我想知道在spring 3 + tiles 2 app中添加上下文信息(如当前菜单或页面标题)的最佳方法是什么。
我希望系统尽可能容易扩展,例如我的tiles配置使用通配符,因为我不想为每个新的请求处理程序写一个新条目:
<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并使它们与控制器保持同步。 / p>
将上下文信息添加到每个控制器以在公共磁贴中使用的正确或最简单的方法是什么?