为了更好地理解,这是一个示例Spring Controller代码:
@Controller
public class SampleController {
protected String URL = "http://www.google.com/";
@RequestMapping(value = {listPath}, method = RequestMethod.GET)
public String list1( ModelMap modelMap) {
modelMap.addAttribute("url", URL);
return "list1View";
}
@RequestMapping(value = {listPath}, method = RequestMethod.GET)
public String list2( ModelMap modelMap) {
modelMap.addAttribute("url", URL);
return "list2View";
}
@RequestMapping(value = {listPath}, method = RequestMethod.GET)
public String list3( ModelMap modelMap) {
modelMap.addAttribute("url", URL);
return "list3View";
}
}
有更好的方法吗?将此URL ModelMap对象传递给所有方法,而不传递所有方法?
答案 0 :(得分:1)
如果要为所有控制器返回的模型传递公共值,请尝试将@ControllerAdvice与@ModelAttribute方法结合使用。
这是一个快速解释。
在方法级别使用@ModelAttribute为其提供参考数据 该模型。 @ModelAttribute注释方法在执行之前执行 选择了@RequestMapping带注释的处理程序方法。他们有效 使用经常加载的特定属性预填充隐式模型 来自数据库。然后可以访问这样的属性 通过@ModelAttribute注释处理程序方法参数 选择的处理程序方法,可能应用绑定和验证 它。换一种说法;用@ModelAttribute注释的方法 填充模型中指定的“键”。这发生在之前 @RequestMapping在方法参数级别
答案 1 :(得分:0)
您可以使用HandlerInterceptor并将所有请求的对象添加到RequestScope。
public class MyHandlerInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.addAttribute("url", "some url");
return super.preHandle(request, response, handler);
}
}
在Web应用程序上下文配置(mvc-dispatcher-servlet.xml
)中:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.example.project.MyHandlerInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>