我想知道将上下文信息(如当前菜单或页面标题)添加到 spring 3 + tiles 2 应用程序的最佳方法是什么。
我希望系统尽可能易于扩展,例如,我的图块配置使用通配符,因为我不想为每个新的请求处理程序编写一个新条目:
<tiles-definitions>
<definition name="baseLayout" template="/WEB-INF/jsp/layout.jsp">
<put-attribute name="title" value="Template" />
<put-attribute name="header" value="/WEB-INF/jsp/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/jsp/menu.jsp" />
<put-attribute name="body" value="/WEB-INF/jsp/content.jsp" />
<put-attribute name="footer" value="/WEB-INF/jsp/footer.jsp" />
</definition>
<definition name="**-tile" extends="baseLayout">
<put-attribute name="title" value="{1}" />
<put-attribute name="body" value="/WEB-INF/jsp/{1}.jsp" />
</definition>
</tiles-definitions>
所以我想剩下的唯一选择就是在模型中添加东西。我当然可以为每个请求处理程序添加一个新的模型条目(例如 MODEL_ID),如下所示:
@RequestMapping(value="/order/{orderId}.x")
public String showOrder(ModelMap model, @PathVariable long orderId) {
// do stuff
model.addAttribute(Context.MODEL_ID, Context.getOrderContext());
}
然后在 title.jsp 中解释这个特定的 MODEL_ID 以显示标题,并在 menu.jsp 中解释以突出显示当前菜单项。
但是,我不喜欢将这些行添加到我所有控制器的所有请求方法中的想法。
我正在考虑编写一个拦截器,它试图根据视图或请求路径的名称来确定“上下文”,但是我必须重写拦截器中的所有 URL,并使它们与控制器保持同步。
将上下文信息添加到每个控制器以在常见磁贴中使用的正确或最简单的方法是什么?