[英]Spring MVC 3 with Hibernate - Whats my model for use in ModelAndView?
[英]When to use ModelAndView vs Model in Spring?
这听起来对于Spring
专家来说可能是愚蠢的,但我不得不问:
你如何决定何时使用ModelAndView
以及何时使用Model
?
毕竟我研究过的最好的答案就是这个 。 它已经提到ModelAndView
是一种旧方法,返回String
的Model
是Spring
一种新方式。
我的问题是,现在我们手头有Model
,我们是否应该弃用旧的ModelAndView
? 或者是否有任何需要使用ModelAndView
的情况?
此外,有谁知道为什么必须将ModelAndView
更改为Model
和String
值作为View
,有什么好处?
我总是使用控制器方法返回ModelAndView
方法。 仅仅因为它倾向于使控制器方法更简洁。 方法参数现在是严格input
参数。 并且所有与output
相关的数据都包含在从该方法返回的对象中。
ModelAndView
样式似乎与那些不喜欢将输入参数更新为方法的人产生共鸣。 坚持认为这会构成副作用,这是一种危险的模式,因为你无法可靠地预测方法将要做什么 - 它可以返回返回对象中的数据,或者它可以更新任何输入参数中的任何内容。
所以有些人仍然会继续喜欢ModelAndView
。
使用Model
作为方法参数并返回字符串作为视图名称的新样式。 似乎来自略有不同的设计方法。 这里,模型对象被认为是在返回到渲染它们的视图之前传递给多个处理程序的一类事件或项。 它提醒我如何在AWT / Swing世界中处理事件。 此模型与多个处理程序可以构建在Model
对象之上的方法更加一致,直到它到达视图。
因此,在一天结束时,似乎没有明确的理由批评或推广这两种方法。 您应该使用与整体设计理念更加一致的风格。
希望这可以帮助。
我可以发现的一个区别是使用ModelAndView对象可以设置对视图对象的直接引用:
ModelAndView mav = ...
mav.setView(myView);
而如果使用Model和String,则需要视图解析器将视图名称解析为实际视图
public String myHandler(...) {
return "myviewname"; // has to have a resolver from "myviewname" into an actual view
}
在SEO的角度来看,如果我们对此有任何要求,我们可以使用ModelAndView来应用301重定向,我们无法使用Model实现这一点。
@RequestMapping("/")
public ModelAndView AWBCOntroller() {
log.info("Tracking info");
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
return mav;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.