【问题标题】:Best way to execute repetitive Spring controller code?执行重复 Spring 控制器代码的最佳方法?
【发布时间】:2011-08-28 06:39:33
【问题描述】:

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

但这恐怕不符合“一次编写,到处使用”的原则。

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

【问题讨论】:

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


    【解决方案1】:

    您可以使用interceptor<mvc:interceptors> 来做到这一点

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

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

    【讨论】:

    • 很好,看起来使用 postHandleRender 方法,您甚至可以在视图呈现之前获取模型并添加内容,因此您不必将其添加为请求属性。
    • 抱歉,我给出了错误的链接 - 它应该是 servlet,而不是 portlet。 servlet 只有 3 个方法,其中模型仅在 postHandle 方法中可用。
    • @digitaljoel 是的,补充说。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 2011-08-02
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多