何时在春季使用ModelAndView与Model?

2022-08-31 14:36:00

这对专家来说可能听起来很愚蠢,但我不得不问:
你如何决定何时使用以及何时使用?SpringModelAndViewModel

毕竟,我已经研究了我发现的最好的答案就是这个。它提到这是一种旧方法,而返回是一种新方法。ModelAndViewModelStringSpring

我的问题是,既然我们手头有旧的,我们是否应该弃用旧的?或者您需要使用它的任何情况?ModelAndViewModelModelAndView

另外,有谁知道为什么必须更改为 并作为 值,以及有什么好处?ModelAndViewModelStringView


答案 1

我总是使用控制器方法返回的方法。仅仅是因为它倾向于使控制器方法更加简洁。方法参数现在是严格意义上的参数。所有相关数据都包含在从该方法返回的对象中。ModelAndViewinputoutput

这种风格似乎引起了那些不喜欢将输入参数更新为方法的人的共鸣。坚持认为这将构成副作用,一种危险的模式,因为您无法可靠地预测该方法将要做什么 - 它可以返回返回的对象中的数据,或者它可能更新了任何输入参数中的任何内容。ModelAndView

所以有些人仍然会继续喜欢.ModelAndView

具有 as 方法参数的新样式,并将返回的字符串作为视图名称。似乎来自一种略有不同的设计方法。在这里,模型对象被视为传递给多个处理程序的事件或项,然后返回到呈现它们的视图。这让我想起了AWT / Swing世界中如何处理事件。此模型与多个处理程序可以在对象之上构建直到到达视图的方法更加一致。ModelModel

因此,归根结底,似乎没有明确的理由批评或推广这两种方法。您应该使用与您的整体设计理念更一致的风格。

希望这有帮助。


答案 2

我能发现的一个区别是,对于ModelAndView对象,您可以设置对视图对象的直接引用:

ModelAndView mav = ...
mav.setView(myView);

而如果使用模型和字符串,则需要视图解析器将视图名称解析为实际视图

public String myHandler(...) {
   return "myviewname"; // has to have a resolver from "myviewname" into an actual view
}

推荐