Play Framework是否支持"片段"?

san*_*ity 8 java playframework

如果我想在多个页面上有一个共同的UI,例如菜单,建议的方法是什么?

它将包含模板代码和后端控制器(类似于LiftWeb框架中的"片段").

我知道Play有一个菜单模块,但我对如何实现这一目标更感兴趣.

Cod*_*nci 11

有两种方法可以将常见的视图代码包含在Play框架中.

您可以使用#{include}标签或#{extends}标签.

顾名思义,extends标签从父视图扩展而来.在创建新应用程序时,默认情况下会在Play设置的框架代码中使用extends标记.它扩展了main.html.你在这里添加你的代码.

includes标签允许您在指定点将一段公共视图代码注入模板.这与php include/require或jsp包含的工作大致相同.

当模板代码也需要模型中的数据或逻辑(通过控制器)时,问题就出现了.如果是这种情况,那么您需要在控制器中使用@Before或@With表示法来确保每次都执行通用的控制器代码.您可以将任何数据添加到renderArgs列表中,以便可以在视图中使用它.

使用renderArgs的一个简单示例是.

@Before
private static void commonData() {
    // do your logic here
    renderArgs.put("menu", menu);
    renderArgs.put("selected", selectedMenuItem);
}
Run Code Online (Sandbox Code Playgroud)

您放入renderArgs(菜单并在示例中选中)的值将与将它们传递到render方法中的方式相同.

  • 代码示例已添加. (3认同)