当前位置: 首页 > 面试题库 >

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

傅奕
2023-03-14
问题内容

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

public static Result renderTemplate(String folder, String template) {
    return ok(
        views.html.<<FOLDER_GOES_HERE>>.<<TEMPLATE_NAME_GOES_HERE>>.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和源生成器对模板进行索引。您可以浏览views文件夹,然后根据文件夹/模板名称和发票创建地图。

该地图位于 生成的 类中,如下所示:

map.put("folderx.templatey", views.html.folderx.templatey);//no reflection!

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



 类似资料:
  • Scala 函数 一般情况下函数调用参数,就按照函数定义时的参数顺序一个个传递。但是我们也可以通过指定函数参数名,并且不需要按照顺序向函数传递参数,实例如下: object Test { def main(args: Array[String]) { printInt(b=5, a=7); } def printInt( a:Int, b:Int ) = {

  • Scala 函数 Scala 允许你指明函数的最后一个参数可以是重复的,即我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。 Scala 通过在参数的类型之后放一个星号来设置可变参数(可重复的参数)。例如: object Test { def main(args: Array[String]) { printStrings("Runoob", "Scala",

  • 我试图导入一个程序,并在其中使用几个函数,但我遇到了一个问题,与argparse有关。 在我想使用的函数中,创建者将其解析器参数传递给函数,如下所示。 我想知道如何在我正在编写的另一个程序中使用这个函数。我是否以某种方式创建了一个parser.parse_args()对象,其参数与他相同?我想到的一件事是使用subprocess.popen这样运行它: 但这似乎不太理想。我真的对如何处理argpa

  • 问题内容: 我的工厂如下 这是Foo的定义: 好。我不确定如何使用Guice将此参数传递给Foo构造函数? 有任何想法吗? 问题答案: 所有“ Guice构造函数参数”答案在某种程度上似乎都不完整。这是一个完整的解决方案,包括用法: //在实现类上注释构造函数和辅助参数 //使用仅接受辅助参数的create()方法创建工厂接口。 // FooFactory接口没有显式的实现类(Guice Magi

  • 我很好奇在Spark中把一个RDD传递给一个函数到底做了什么。 假设我们如上定义一个函数。当我们调用函数并传递一个现有的RDD[String]对象作为输入参数时,这个my_function是否将这个RDD作为函数参数进行“复制”?换句话说,是按引用调用还是按值调用?

  • Scala 函数 Scala 可以为函数参数指定默认参数值,使用了默认参数,你在调用函数的过程中可以不需要传递参数,这时函数就会调用它的默认参数值,如果传递了参数,则传递值会取代默认值。实例如下: object Test { def main(args: Array[String]) { println( "返回值 : " + addInt() ); } def