我有一个库方法Common.addTheUsualStuffToTheModel(model)
,需要在我的应用中的每个控制器方法中为模型添加各种属性。
@RequestMapping(value = "/everypath", method = RequestMethod.GET)
public final String everyHandler(ModelMap model)
{
model = Common.addTheUsualStuffToTheModel(model);
return "everyPage";
}
到目前为止,我一直在为每个处理程序方法添加相同的行:
model = Common.addTheUsualStuffToTheModel(model);
但我担心这与“一次写入,随处使用”的原则不一致。
如何避免在每个处理程序中重复此代码?
答案 0 :(得分:7)
您可以使用interceptor和<mvc:interceptors>
来执行此操作
在您的拦截器中,您可以添加任何内容作为请求属性(实际上是模型属性所在的位置)。拦截器代码在每个方法之前或之后执行(与拦截器映射匹配)。
如果您不一定需要在控制器方法之前填充模型,则在postHandle
方法中获得ModelAndView
对象。
答案 1 :(得分:0)
如何指定@ModelAttribute带注释的参考数据提供程序方法。如果你有一个所有控制器的基类,并且该基类有@ModelAttribute注释方法,那么我相信模型中的数据可用于那些控制器处理的所有视图。看看15.3.2.8 in the Spring docs。