Java 播放framework 2.1.3函数,该函数将使用给定参数呈现scala模板

Java 播放framework 2.1.3函数,该函数将使用给定参数呈现scala模板,java,reflection,playframework,playframework-2.0,Java,Reflection,Playframework,Playframework 2.0,我需要控制器中的一个方法,以这种方式从接收到的参数调用适当的模板: public static Result renderTemplate(String folder, String template) { return ok( views.html.<<FOLDER_GOES_HERE>>.<<TEMPLATE_NAME_GOES_HERE>>.render(Users.createForm) ); } 公共静态

我需要控制器中的一个方法,以这种方式从接收到的参数调用适当的模板:

public static Result renderTemplate(String folder, String template) {
    return ok(
        views.html.<<FOLDER_GOES_HERE>>.<<TEMPLATE_NAME_GOES_HERE>>.render(Users.createForm)
    );
}
公共静态结果renderTemplate(字符串文件夹、字符串模板){
返回ok(
views.html…render(Users.createForm)
);
}
如果可能的话?我本来可以通过反射来完成,但由于某些原因,我无法列出view和view.html的字段

有人能告诉我为什么,并解释我应该做什么来实现这一点


谢谢你

如果你这样做的话,你可能会失去类型安全性和在编译时而不是运行时捕获错误的可能性

但仍有可能:

final Class<?> clazz = Class.forName("views.html." + folder + "." + template);
//assumed you have a String parameter for your template
java.lang.reflect.Method render = clazz.getDeclaredMethod("render", String.class);
play.api.templates.Html html = (play.api.templates.Html) render.invoke(null, "hi");
return ok(html);

因此,如果模板不存在,至少SBT会在构建时警告您。

我理解这个原理,但它给了我一个错误:在这一行:`html=(play.api.templates.html)render.invoke(null,form);`
[NullPointerException:null]
模板有一个参数,它是form
@(createForm:form[models.User])
,很抱歉延迟,本周非常忙为了简单起见,我使用String参数创建了一个表单,您需要的是而不是String.class form.class。
map.put("folderx.templatey", views.html.folderx.templatey);//no reflection!