Spring MVC:将模型作为参数传递给控制器方法VS显式实例化它
Posted
技术标签:
【中文标题】Spring MVC:将模型作为参数传递给控制器方法VS显式实例化它【英文标题】:Spring MVC: Passing a Model as an argument to a controller method VS instantiating it explicitly 【发布时间】:2014-10-01 17:30:44 【问题描述】:我在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;
在这两种情况下,视图都会正确填充。
这两种方法有什么区别吗?如果是这样,在哪里更喜欢使用一个而不是另一个?
【问题讨论】:
最后没有。但是,Model
会预先填充一些值(特别是如果您使用路径变量),而第二个则不会。同样返回 String
而不是 ModelAndView
要容易得多。
***.com/questions/7175509/… 和 ***.com/questions/16951609/… 的可能重复
@M.Deinum 谢谢;那么,在不使用路径变量时,Model
预填充了哪些值?
@DolphinJava 我不认为这是重复的。您链接的问题似乎更多关于Model
和ModelAndView
之间的差异。不过很好读:-)
当使用 flash 属性时,那些被添加的,当使用 @SessionAttributes
时,这些应该也可用。用@ModelAttribute
注释的方法的结果也在那里。它基本上是预填充模型。
【参考方案1】:
最终没有区别,一切最终都会以ModelAndView
结束。
当使用Model
或ModelMap
作为方法参数时,它会预先填充一些值
-
路径变量
任何
@ModelAttribute
注释方法的结果
控制器可用的任何@SessionAttribute
s
简而言之,它是该方法可用的预填充模型。
Model
始终被创建并与您添加/创建的ModelAndView
合并。
【讨论】:
以上是关于Spring MVC:将模型作为参数传递给控制器方法VS显式实例化它的主要内容,如果未能解决你的问题,请参考以下文章
模型在使用 C# 将 POST 方法作为参数传递给 ASP.NET MVC 中同一控制器的 GET 方法时获取 NULL
如何将模型作为参数传递给 ASP.NET MVC 中的 [HttpPost] ActionMethod?