我正在尝试实现我的第一个Spring MVC控制器,遵循Spring文档,一些教程和“Spring in Action”一书。
现在我有一个疑问:实施控制器方法我发现处理模型的差异。
有时他们使用Map<String, Object>
,Model
对象或ModelAndView
对象。
使用对象或其他对象的区别是什么? 选择一个而不是另一个的原因是什么?
答案 0 :(得分:2)
ModelAndView,包含模型和视图的名称。合同中的ModelMap仅包含有关模型的信息。
因此,使用模型和视图,您可以明确设置视图名称。
如果您只是设置模型并在控制器中返回一个字符串,则视图名称将从请求uri中推断出来。
答案 1 :(得分:0)
Spring docs:'在正常情况下,ModelAndView实例由视图名称和模型Map组成,它包含bean名称和相应的对象(如命令或表单,包含引用数据)。 - 如果您必须从表单中收集条目,显示某些内容(dao对象)等,它就是将对象传输到视图(或后面)的方式。
----例子
ModelAndView model = new ModelAndView();
model.addObject(路径);
model.addObject( “用户”,用户);
model.addObject( “问候”,service.getMessage());
返回模型;
// ViewName,User Bean,MSG Bean
// Spring doc
public interface Controller {
/**
* Process the request and return a ModelAndView object which the DispatcherServlet
* will render.
*/
ModelAndView handleRequest(
HttpServletRequest request,
HttpServletResponse response) throws Exception;
}
答案 2 :(得分:0)
ModelAndView是Web MVC框架中Model和View的持有者。请注意,这些完全不同。这个类只是为了使控制器能够在单个返回值中返回模型和视图。
它表示由处理程序返回的模型和视图,由Dispatcher解析。视图可以采用String视图名称的形式,需要由ViewResolver对象解析;
或者可以直接指定视图对象。该模型是一个Map,允许使用按名称键入的多个对象。