所有方法的Spring ModelMap对象

时间:2015-02-15 12:06:56

标签: java spring

为了更好地理解,这是一个示例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对象传递给所有方法,而不传递所有方法?

2 个答案:

答案 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>