(Java)访问Spring Model而不使用参数或ModelAndView

时间:2012-12-02 04:48:23

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

对标题感到抱歉。我想不出更好的措辞。

有没有办法设置Spring提供页面的默认模型,而不首先在@RequestMapping方法中将其作为参数检索?

我正在使用方面来获取控制器方法的返回值(返回视图)并将其插入到模型中,然后渲染一个不同的全局视图,然后包含我添加到模型中的内容。这适用于请求将Model作为参数的方法。

但是,我还希望能够捕获所有未明确请求模型并仍然将返回值插入其中的方法(通过@AfterReturning建议)。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我不会在@Autowired上使用HttpServletRequest因为它会混淆未来开发线程安全代码的开发人员。

相反,您应该使用@ModelAttributeInterceptor

@ModelAttribute

请参阅: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib-method-args

但是你可以做这样的事情并将这个方法添加到你的控制器:

@ModelAttribute
public preloadModel(HttpServletRequest request, ModelMap model) {
    //Add stuff to model.
}

拦截

请参阅:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor

public class PreloadModelInterceptor extends HandlerInterceptorAdapter {

    @Override
    public void postHandle(HttpServletRequest request, 
                       HttpServletResponse response, 
                       Object handler,
        ModelAndView modelAndView) throws Exception {
    // add model attibutes for your view to see but not your controller
    }
}

答案 1 :(得分:0)

好吧,我找到了解决方法。或者也许是底层Spring框架正在做的所有事情。我只是在HttpServletRequest中自动装配并调用了setAttribute。似乎工作正常。