Spring MVC:将Model作为参数传递给控制器​​方法VS显式实例化它

时间:2014-10-01 17:30:44

标签: java spring spring-mvc

我在MVC Controller课程中创建了两个测试方法。在第一种方法中,Model作为参数传递,而在第二种方法中,我直接实例化它。在这两种方法中,我向Model实例添加了一个属性:

@RequestMapping("/test-modelParam")
public String testMethod1(Model model) {
    model.addAttribute("testname", "testvalue");
    return "/testview";
}


@RequestMapping("/test-modelInstantiatedExplicitly")
public ModelAndView testMethod2() {
    ModelAndView mav = new ModelAndView("/testview");
    mav.addObject("testname", "testvalue");
    return mav;
}

在两种情况下都会正确填充视图。

这两种方法有什么区别吗?如果是这样,哪一个优先使用另一个?

1 个答案:

答案 0 :(得分:5)

最终没有任何区别,一切最终会在ModelAndView中结束。

使用ModelModelMap作为方法参数时,会预先填充一些值

  1. 路径变量
  2. 任何@ModelAttribute注释方法的结果
  3. 控制器可用的任何@SessionAttribute
  4. 简而言之,它是可用于该方法的预先填充的模型。

    Model始终是创建的,并与您使用ModelAndView添加/创建的人合并。