执行重复Spring控制器代码的最佳方法是什么?

时间:2011-05-18 17:46:33

标签: java model-view-controller spring spring-mvc

我有一个库方法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);

但我担心这与“一次写入,随处使用”的原则不一致。

如何避免在每个处理程序中重复此代码?

2 个答案:

答案 0 :(得分:7)

您可以使用interceptor<mvc:interceptors>来执行此操作

在您的拦截器中,您可以添加任何内容作为请求属性(实际上是模型属性所在的位置)。拦截器代码在每个方法之前或之后执行(与拦截器映射匹配)。

如果您不一定需要在控制器方法之前填充模型,则在postHandle方法中获得ModelAndView对象。

答案 1 :(得分:0)

如何指定@ModelAttribute带注释的参考数据提供程序方法。如果你有一个所有控制器的基类,并且该基类有@ModelAttribute注释方法,那么我相信模型中的数据可用于那些控制器处理的所有视图。看看15.3.2.8 in the Spring docs