公司最近决定用最近用Struts2作为前端的MVC框架,在开发过程中遇到了领域模型ModelDriven中包含多个对象属性,那么页面怎么封装这个属性才能被后台的model对象接收到呢?
以下是开发实例,具体包含了从页面到后台的Action参数传递过程的介绍:
1. 包含对象属性的ModelDriven对象,用于页面和后台Action的参数传递, 需要注意的是对象属性需要实例化,即属性对象的实例在大对象中已经被new过。
public class GoodsDO extends Model{
/**
* 货品属性VO
* */
private GoodsPropVO goodsPropVO = new GoodsPropVO();
/**
* 货品VO
* */
private GoodsVO goodsVO = new GoodsVO();
public GoodsPropVO getGoodsPropVO() {
return goodsPropVO;
}
public void setGoodsPropVO(GoodsPropVO goodsPropVO) {
this.goodsPropVO = goodsPropVO;
}
public GoodsVO getGoodsVO() {
return goodsVO;
}
public void setGoodsVO(GoodsVO goodsVO) {
this.goodsVO = goodsVO;
}
}
2. 页面的参数属性定义格式为:对象属性名.属性名,如下是一段js提交form的代码,主要说明页面属性定义的格式:
$.jsonform({
items : [ {
id : 'cate_name',
mapping : 'goodsVO.cate_name'
}, {
id : 'goods_name',
mapping : 'goodsVO.goods_name'
}, {
id : 'goods_code',
mapping : 'goodsVO.goods_code'
}, {
id : 'reg_code',
mapping : 'goodsVO.reg_code'
}, {
id : 'goods_unit',
mapping : 'goodsVO.goods_unit'
}, {
id : 'goods_pinyin',
mapping : 'goodsVO.goods_pinyin'
}, {
id : 'brand_name',
mapping : 'goodsVO.brand_name'
}, {
id : 'brand_name',
mapping : 'goodsVO.brand_name'
}, {
id : 'company_name',
mapping : 'goodsVO.company_name'
} , {
id : 'temp_min',
mapping : 'goodsPropVO.temp_min'
}, {
id : 'temp_max',
mapping : 'goodsPropVO.temp_max'
}, {
id : 'hum_min',
mapping : 'goodsPropVO.hum_min'
}, {
id : 'hum_max',
mapping : 'goodsPropVO.hum_max'
}, {
id : 'company_name',
mapping : 'goodsVO.company_name'
}, {
id : 'length',
mapping : 'goodsPropVO.length'
}, {
id : 'width',
mapping : 'goodsPropVO.width'
},{
id : 'height',
mapping : 'goodsPropVO.height'
},{
id : 'weight',
mapping : 'goodsPropVO.weight'
}]
});
3. Action中注册ModelDriven 对象:
public class GoodsAction implements ModelDriven<GoodsDO>{
/**实例化 ModelDriven 对象,Struts 不会主动帮你实例的*/
private GoodsDO goodsDO = new GoodsDO();
//这里是实现接口方法
@Override
public GoodsDO getModel() {
// TODO Auto-generated method stub
//别忘记了,要把返回值写上哦
return goodsDO;
}
}
通过上面说明就可以知道Struts 2 中MVC的model在页面和Action交互方式,希望对大家有帮助!