如果这样做的话,您可能会失去类型安全性,并且可能会在编译时而不是运行时捕获一些错误。
但是仍然可能:
final Class<?> clazz = Class.forName("views.html." + folder + "." + template);//assumed you have a String parameter for your templatejava.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和源生成器对模板进行索引。您可以浏览views文件夹,然后根据文件夹/模板名称和发票创建地图。
该地图位于 生成的 类中,如下所示:
map.put("folderx.templatey", views.html.folderx.templatey);//no reflection!
因此,如果模板不存在,至少SBT会在构建时警告您。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)