Spring MCV中Model层是View层的数据容器,Jsp页面上所有的参数传递都是通过绑定到模型。


这里 不得不说Spring的mvc设计将Entity和Model分离的好处:也许很多SSH开发的程序猿一接触spring的mvc框架感觉这样分离很没有必要,因为struts直接使用Entity就可以了。那请思考一个问题?页面有业务逻辑需要声明一个变量,但不是实体需要保存的字段,是不是需要在action或者其他的位置声明这个变量?这时候,随着开发深入这种变量是不是很混乱。那么将这样的变量放到一个专门的java类中统一管理,是不是就清晰了。清晰了之后我们来看spring mvc的model层,是不是就刚好吻合这样的情况

Spring MVC强大一:灵活的访问控制
一个Controller处理一个功能模块的所有请求,只需要使用@RequestMapping("save2.do")就可以直接使用"../save2.do"接受请求了。不用向Struts一样声明大量的Action

Spring MVC强大二:支持多个Java Model
也许大家已经习惯使用Struts表单提交只支持一个JavaBean的模式,这种模式缺点很明显,想一个表单提交两个对象是不可能实现的。而spring mvc呢,完全支持多个java model绑定到一个表单,一次提交就可以接收到所有的对象。举个例子:A、B两个Entity,一对多的关联关系,A中包含多个B,使用List集合技术实现。这里对应的Model层有A、B,但是A模型不支持绑定 包含对象的 List集合,因为model需要内部转换为Entity保存数据。这时候,关键点来了,我们直接在Model层声明C,内容包含一个List bList属性。这时候,A的页面就可以直接使用C中声明的集合属性( name=" bList[0].name " ) 传参了。注意在A的Controller声明方法,参数中包含C就Ok了。下面贴出C的代码、A页面的代码、A的Controller方法
C模型层Model:
 
    
  1. publicclass C extends ModelSupport {

  2. private List bList;

  3. public List getBList() {

  4. return bList;

  5. }

  6. publicvoid setBList(List bList) {

  7. this.bList = bList;

  8. }

  9. }

A视图层View:
 
    
  1. <tr>

  2. <td>${daily.buyGoodName}td>

  3. <td><inputtype="text"name="bList[0].dmGstorage"value="0"onkeyup="clearNoNum(this)"/>td>

  4. <td><inputtype="text"name="bList[0].dmGoutflow"value="0"onkeyup="clearNoNum(this)"/>td>

  5. <td><inputtype="text"name="bList[0].dmGinventory"value="0"/>td>

  6. <td><inputtype="text"name="bList[0].dmGenableDay"value="0"onkeyup="clearNoNum(this)"/>td>

  7. tr>


A控制层Controller:

 
    
  1. @RequestMapping("dmgSave")

  2. @ResponseBody

  3. public Json addSave(MaterialDailyMang mode,C c){

  4. System.out.println(c.getBList().size());

  5. Json json= super.addSave(mode);

  6. //保存物品集合

  7. for (B b : c.getBList()) {

  8. MaterialDailyMang mang=(MaterialDailyMang) json.getObj();

  9. b.setDmId(mang.getId());

  10. materialDailyGoodService.addSave(b);

  11. }

  12. return json;

  13. }