Play Framework是否支持“代码段”?

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

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

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

有两种方法可以将常见的视图代码包含在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); } 

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