0

对不起标题。我想不出更好的措辞。

有什么方法可以设置 Spring 将提供页面的默认模型,而无需先将其作为 @RequestMapping 方法中的参数进行检索?

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

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

4

2 回答 2

2

我不会使用@Autowiredon HttpServletRequest,因为它会让未来从事线程安全代码的开发人员感到困惑。

相反,您应该使用 a@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
    }
}
于 2012-12-02T22:14:13.543 回答
0

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

于 2012-12-02T16:16:44.383 回答