什么时候在Spring中使用ModelAndView vs Model?
这听起来可能听起来很愚蠢,但我不得不问。 你如何决定什么时候使用ModelAndView
vs. Model
?
毕竟我研究了最好的答案,我发现是这一个 。 它提到了ModelAndView
是一个老方法,返回的String
是一个新的方法。
我的问题是我们现在应该弃用旧的ModelAndView
吗? 或者是否有任何情况下需要使用ModelAndView
。
另外,是否有人知道为什么必须将ModelAndView
更改为Model
和String
值作为View
,以及有哪些好处?
我总是使用控制器方法返回ModelAndView
方法。 只是因为它往往使控制器方法更简洁一点。 方法参数现在是严格的input
参数。 所有的output
相关的数据都包含在方法返回的对象中。
ModelAndView
风格似乎与不喜欢将input参数更新为方法的人共鸣。 坚持认为这会构成一个副作用,一个危险的模式,因为你不能可靠地预测方法将要做什么 – 它可以在返回的对象中返回数据,或者它可以更新任何input参数中的任何东西。
所以有些人仍然会继续喜欢ModelAndView
。
Model
作为方法参数并返回string作为视图名称的新样式。 似乎来自一个稍微不同的devise方法。 在这里,模型对象被认为是被传递给多个处理程序的事件或项目的种类,然后被返回到它们被呈现的视图。 这让我想起AWT / Swing世界中的事件是如何处理的。 这个模型与多个处理程序可以在Model
对象之上构build的方法更加一致,直到它达到视图。
所以在这一天结束的时候,似乎没有一个明确的理由来批评或推广这两种方法。 您应该使用与您的整体devise理念更加一致的风格。
希望这可以帮助。
我可以发现的一个区别是ModelAndView对象可以设置对视图对象的直接引用:
ModelAndView mav = ... mav.setView(myView);
而如果使用模型和string,则需要使用视图parsing器将视图名称parsing为实际视图
public String myHandler(...) { return "myviewname"; // has to have a resolver from "myviewname" into an actual view }
在search引擎优化的angular度来看,如果我们有任何要求,我们可以使用ModelAndView来应用301redirect,我们不能使用Model来实现。