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方法中的方式相同.