Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Java)访问Spring模型,而不使用参数或ModelAndView_Java_Spring_Model View Controller_Parameters_Model - Fatal编程技术网

(Java)访问Spring模型,而不使用参数或ModelAndView

(Java)访问Spring模型,而不使用参数或ModelAndView,java,spring,model-view-controller,parameters,model,Java,Spring,Model View Controller,Parameters,Model,关于标题,我很抱歉。我想不出更好的措辞了 有没有办法设置Spring提供页面的默认模型,而不首先在@RequestMapping方法中将其作为参数检索 我使用aspects获取控制器方法的返回值(返回视图)并将其插入到模型中,然后呈现一个不同的全局视图,其中包括我添加到模型中的内容。这在要求将模型作为参数的方法上非常有效 但是,我还希望能够捕获所有没有显式请求模型的方法,并且仍然将返回值插入其中(通过@AfterReturning advice)。有什么想法吗?嗯,我找到了一个解决办法。或者,它

关于标题,我很抱歉。我想不出更好的措辞了

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

我使用aspects获取控制器方法的返回值(返回视图)并将其插入到模型中,然后呈现一个不同的全局视图,其中包括我添加到模型中的内容。这在要求将模型作为参数的方法上非常有效


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

嗯,我找到了一个解决办法。或者,它可能是底层Spring框架所做的一切。我只是自动连接了HttpServletRequest并调用了setAttribute。似乎可以正常工作。

我不会在
HttpServletRequest
上使用
@Autowired
,因为这会让未来的开发人员对线程安全代码感到困惑

相反,您应该使用
@modeldattribute
拦截器

@模型属性 见:

但您可以这样做,并将此方法添加到控制器:

@ModelAttribute
public preloadModel(HttpServletRequest request, ModelMap model) {
    //Add stuff to model.
}
拦截器 见:


ModelAttribute非常适合我的需要。我还将研究一下拦截器,但我认为这就足够了。谢谢。如果您想向视图所需的所有控制器添加模型属性,那么拦截器非常有用。例如,我通常将用户对象绑定到拦截器中的模型。
@modeldattribute
将仅适用于在其所在的控制器中映射的请求,但在已处理的请求映射(带有
@RequestMapping
的方法)中可用。它适用于我,因为我已经有了一个BaseController,我的所有控制器都扩展了它。我只是在那里的
@modeldattribute
方法中设置必要的变量。
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
    }
}