模型视图类ModelAndView(转载)

从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。

下面看ModelAndView.Java的代码,如下所示。

package org.springframework.web.servlet;
import Java.util.HashMap;
import Java.util.Map;
public class ModelAndView {
private Object view; //该属性用来存储返回的视图信息
private Map model; //该属性用来存储处理后的结果数据
//下面是一些参数不同的构造函数,用来创建ModelAndView实例
public ModelAndView() {
}
public ModelAndView(View view) {
this.view = view;
}
public ModelAndView(String viewName) {
this.view = viewName;
}
public ModelAndView(View view, Map model) {
this.view = view;
this.model = model;
}
public ModelAndView(String viewName, Map model) {
this.view = viewName;
this.model = model;
}
public ModelAndView(View view, String modelName,
Object modelObject) {
this.view = view;
addObject(modelName, modelObject);
}
public ModelAndView(String viewName, String modelName,
Object modelObject) {
this.view = viewName;
addObject(modelName, modelObject);
}
//view属性的getter、setter方法,可以看出view属性可以是一个View类的实例,也可以是一个String
public void setView(View view) {
this.view = view;
}
public View getView() {
return (this.view instanceof View ? (View) this.view : null);
}
public void setViewName(String viewName) {
this.view = viewName;
}
public String getViewName() {
return (this.view instanceof String ? (String) this.view : null);
}
public boolean isReference() {
return (this.view instanceof String);
}
//下面的方法用来给model属性赋值、或者获取该属性的值,model是一个Map类型的属性
protected Map getModelInternal() {
return this.model;
}
public Map getModel() {
if (this.model == null) {
this.model = new HashMap(1);
}
return this.model;
}
public ModelAndView addObject(String modelName, Object modelObject) {
getModel().put(modelName, modelObject);
return this;
}
public ModelAndView addAllObjects(Map modelMap) {
getModel().putAll(modelMap);
return this;
}
...
}
通过上面的代码可以看出,ModelAndView创建了两个属性view和model,并且创建了获取这两个属性以及给这两个属性赋值的一些方法。view属性可以是View接口的一个实例,也可以是一个String类型的值,所有的视图类都必须实现View接口,在后面的内容中将会讲到;model属性是一个Map类型的值,所以其每一个元素都是一个Key-Value对。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值