【发布时间】:2011-01-25 19:09:00
【问题描述】:
如果我想在多个页面(例如菜单)中使用一个通用的 UI,推荐的方法是什么?
它将包含模板代码和后端控制器(类似于 LiftWeb 框架中的“sn-ps”)。
我知道 Play 有一个菜单模块,但我更感兴趣的是一般如何实现这一点。
【问题讨论】:
标签: java playframework
如果我想在多个页面(例如菜单)中使用一个通用的 UI,推荐的方法是什么?
它将包含模板代码和后端控制器(类似于 LiftWeb 框架中的“sn-ps”)。
我知道 Play 有一个菜单模块,但我更感兴趣的是一般如何实现这一点。
【问题讨论】:
标签: java playframework
有两种方法可以将通用视图代码包含到 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 方法一样。
【讨论】:
@Before private static void commonData() { Map cacheMap = Cache.get("login_det ",地图.class); if(cacheMap!=null) { renderArgs.put("login_det", cacheMap); System.out.println("commonData"+renderArgs.toString()); } }