2014-09-11 11 views
1

뷰의 이름을 읽고 뷰를 렌더링하려는 구성 파일이 있습니다. 나는 이것을 위해 자바 리플렉션을 사용하려고하는데 다음과 같은 코드가 보인다.Java에서 리플렉션을 사용하여 Play에서 뷰 클래스를 동적으로로드하십시오.

Class viewClass = Play.current().classloader().loadClass(viewName); 
Method render = viewClass.getDeclaredMethod("render"); 
page = (Html)render.invoke(viewClass.newInstance()); 

Java.lang.ClassNotFoundException이 발생한다. viewName은 뷰의 이름입니다.

+0

'viewName' (즉, 값)으로 무엇을 사용하고 있습니까? – Salem

답변

1

클래스 이름을 얻은 방법을 게시하지 않았으므로 여기서는 색인보기에 대한 전체 예제를 제공합니다.

String viewName = "views.html.index" 
Class viewClass = Play.current().classloader().loadClass(viewName); 
Method render = viewClass.getDeclaredMethod("render"); 
Html page = (Html) render.invoke(null); 

당신이보기 클래스의 위해서, newInstance() 메소드를 호출 할 수있는 또 다른 문제가 있습니다. 다행히도 render() 메서드를 정적으로 호출 할 수 있으므로 클래스의 인스턴스가 필요하지 않습니다. invoke() 메소드에 null을 전달하십시오.

+0

고마워요. :) –

관련 문제