springMVC把前台的数据封装为POJO与struts2的封装形式不同。struts2需要在控制器声明需封装的POJO,而springMVC不需要任何准备工作,只需在相应的方法的参数中加上需封装的POJO,当用户提交表单时,springMVC会根据表单中dom元素的name属性与请求的方法中的参数中的POJO的属性名进行比对,如果相同,则将name属性的值赋给这个属性,进而完成封装,下面举例说明:

一、先看一下定义的POJO

Orders(订单)

/**
* 订单
* @author Administrator
*
*/
public class Orders implements Serializable {
private String oid;//订单id private Opportunity opportunity;//销售机会
private Linkman linkman;//联系人
private User user;//业务员 private Date bdate; //开单日期
private Date fdate;//合同到期时间
private Float ysprice;//应收金额
private int statues;//审核状态
private Integer flag;//订单状态
private String remark;//备注
private Integer uids;//订单审核人
}

上面的Orders类中有一个Opportunity属性(销售机会),属性名为opportunity,下面是定义的Opportunity类:

Opportunity(销售机会)(注:Orders与Opportunity呈一对一关联)

/**
* 销售机会
* @author Administrator
*
*/
public class Opportunity implements Serializable{
private int opid;
private Float allprice;//所有商品的购买总价
private int allcount;//所有商品的购买数量
private String odate;//下单时间 private User user;//业务员
private Linkman linkman;//联系人 }

二、再看一下提交的jsp相关片段

三、上面的表单的请求地址是${pageContext.request.contextPath}/addOrder,我们来看一下这个方法的定义:

当用户提交表单后,springMVC会找到这个方法,然后将表单中的name为opportunity对应的值赋给这个方法中Orders类中实例引用名orders的opportunity属性,通过debug调试,可以印证这一点:

可以看出,对应表单中的name="opportunity.linkman.lname"对应的值,springMVC是先将此值赋给Opportunity类中的linkman属性,再将opportunity的值赋给addOrder方法中参数Orders中的opportunity属性,即完成了对其引用名orders的封装。

四、如果将表单、请求方法修改成以下的情况,那又会如何呢?

还是bug调试,看一下执行addOrder方法时的情况:

以上的结果表明表单提交后,springMVC并没有为addOrder方法参数中的Orders封装opportunity这个属性,这是因为表单中根本找不到这个属性,何谈封装呢?但表单中有opid和linkman.lname这两个属性,且在addOrder方法中有Opportunity opp这个参数,在Opportunity 类中有opid、linkman这个两个属性,因此springMVC会将表单中的opid和linkman.lname这两个属性的值赋给参数中的Opportunity opp的opid、linkman这两个属性,从而进行封装。

后记:springMVC相比于struts2,封装机制更为智能,代码会简化很多。

springMVC数据封装成POJO的更多相关文章

  1. SpringMVC将通过ajax发送的 json数据封装成JavaBean

    SpringMVC将通过ajax发送的 json数据封装成JavaBean 通过ajax发送的 json数据封装成JavaBean对发送时有如下要求: 1.发送的数据类型必须时UTF-8 2.发送的必 ...

  2. 使用HIBERNATE的SQL查询并将结果集自动转换成POJO

    在某些场合下,我们可能想使用HIBERNATE的框架提供的SQL查询接口,但是,由于实体没有做映射,HIBERNATE不能把结果集转换成你想要的List<POJO>,本文讨论如何在这种情况 ...

  3. 如何将内存图像数据封装成QImage

    http://blog.csdn.net/lyc_daniel/article/details/9055787 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放.旋转)操作. ...

  4. 将内存图像数据封装成QImage V2

    转:http://www.cnblogs.com/bibei1234/p/3161555.html 如何将内存图像数据封装成QImage 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行 ...

  5. (原)编写JAVA工具之json自动封装成pojo

    代码在最后 我个人是不太喜欢http和json,可能是游戏做的多了的原因的,对通信协议和通信方式特敏感,因此即使是做应用我也会选择rpc而非http,但是有时候因为各种原因,还是不的不处理标准的htt ...

  6. 【Qt开发】如何将内存图像数据封装成QImage V1

    如何将内存图像数据封装成QImage 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放.旋转)操作.如果能够将内存图像数据封装成QImage,则可以利用QImage强大的图像 ...

  7. 【Qt开发】将内存图像数据封装成QImage V2

    如何将内存图像数据封装成QImage 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放.旋转)操作.如果能够将内存图像数据封装成QImage,则可以利用QImage强大的图像 ...

  8. java递归菜单树转换成pojo对象

    package com.cjonline.foundation.authority.pojo; import java.util.ArrayList; import java.util.Collect ...

  9. SpringMVC学习 -- 使用 POJO 对象绑定请求参数值

    Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配 , 自动为该对象填充属性值 , 支持级联属性.如:address.province. package com.itdoc.spri ...

随机推荐

  1. HTML特殊符号对照表(转)

    table { border-collapse: collapse; } #htmlchar-container-list { width: 100%; border-top: 2px solid # ...

  2. HDOJ2010水仙花数

    水仙花数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. 去重 oracle

    --去重DELETE FROM DEPR_MONTHS_LIST AWHERE (A.ASSET_ID,A.DEPR_DATE,A.UNIT_COST_ID) IN(SELECT B.ASSET_ID ...

  4. lstm-思想2

    LSTM 网络 Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息.LSTM 由 Hochreiter & Schmidhub ...

  5. 《JS高级程序设计》笔记 —— 解析查询字符串

    今天在继续翻阅<JS高级程序设计>的时候,正好翻到location对象这一小节,其中有一部分就是讲的解析查询字符串.看到这个内容立马想到了做去哪儿秋招笔试题的时候有这么一道题. 去哪儿笔试 ...

  6. poj 3616 Milking Time

                                                                                                 Milking ...

  7. 腾讯QQ表情为什么如此成功呢

    本人为原创作品:e良师益友 ,转载是并且注明 e良师益友网导读:腾讯开发的QQ表情功能给中国人的聊天增添一抹幽默,很多时候图片表情比话语更好的表达我们的意思,翻开你的聊天记录就会发现夹杂这很多不同的表 ...

  8. 转 Linux命令及Linux终端的20个趣事

    https://linux.cn/article-2831-1.html 1. 命令:sl (蒸汽机车) 你可能了解 ‘ls’ 命令,并经常使用它来查看文件夹的内容.但是,有些时候你可能会拼写成 ‘s ...

  9. 利用nginx做负载均衡

    round-robin:轮询.以轮询方式将请求分配到不同服务器上,默认 least-connected:最少连接数.将下一个请求分配到连接数最少的那台服务器上 ip-hash :基于客户端的IP地址. ...

  10. a标签点击后的虚线框问题

    以前一直用的方法都是: a {outline: none;star:expression(this.onFocus=this.blur());} 后来发现有瑕疵,不完美.体现在页面调用JS动作比较频繁 ...