springMVC数据封装成POJO
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的更多相关文章
- SpringMVC将通过ajax发送的 json数据封装成JavaBean
SpringMVC将通过ajax发送的 json数据封装成JavaBean 通过ajax发送的 json数据封装成JavaBean对发送时有如下要求: 1.发送的数据类型必须时UTF-8 2.发送的必 ...
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
在某些场合下,我们可能想使用HIBERNATE的框架提供的SQL查询接口,但是,由于实体没有做映射,HIBERNATE不能把结果集转换成你想要的List<POJO>,本文讨论如何在这种情况 ...
- 如何将内存图像数据封装成QImage
http://blog.csdn.net/lyc_daniel/article/details/9055787 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放.旋转)操作. ...
- 将内存图像数据封装成QImage V2
转:http://www.cnblogs.com/bibei1234/p/3161555.html 如何将内存图像数据封装成QImage 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行 ...
- (原)编写JAVA工具之json自动封装成pojo
代码在最后 我个人是不太喜欢http和json,可能是游戏做的多了的原因的,对通信协议和通信方式特敏感,因此即使是做应用我也会选择rpc而非http,但是有时候因为各种原因,还是不的不处理标准的htt ...
- 【Qt开发】如何将内存图像数据封装成QImage V1
如何将内存图像数据封装成QImage 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放.旋转)操作.如果能够将内存图像数据封装成QImage,则可以利用QImage强大的图像 ...
- 【Qt开发】将内存图像数据封装成QImage V2
如何将内存图像数据封装成QImage 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放.旋转)操作.如果能够将内存图像数据封装成QImage,则可以利用QImage强大的图像 ...
- java递归菜单树转换成pojo对象
package com.cjonline.foundation.authority.pojo; import java.util.ArrayList; import java.util.Collect ...
- SpringMVC学习 -- 使用 POJO 对象绑定请求参数值
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配 , 自动为该对象填充属性值 , 支持级联属性.如:address.province. package com.itdoc.spri ...
随机推荐
- fadein()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java Concurrency - 线程的基础操作
创建线程 在 Java 中,创建线程有两种方式: 继承 java.lang.Thread 类,重写 run 方法. public class MyJob extends Thread { @Overr ...
- sql常识-SQL 通配符
在搜索数据库中的数据时,您可以使用 SQL 通配符. SQL 通配符 在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符. SQL 通配符必须与 LIKE 运算符一起使用. 在 SQL 中, ...
- SQL获取刚插入的记录的自动增长列ID的值
假设表结构如下: CREATE TABLE TestTable ( id int identity, CreatedDate datetime ) SQL2005获得新增行的自动增长列的语句如下: i ...
- SQL_转换格式的函数—CAST()和CONVERT()
将一种数据类型的表达式显式转换为另一种数据类型的表达式.CAST 和 CONVERT 提供相似的功能. cast SELECT CAST('12.5' AS int) --在将 varchar 值 ' ...
- TM4C123GH6PM程序
模式一&模式二:单次计时&周期计时/******************************************* 开发坏境:CCSv5.4 开发板:TIVA C Launch ...
- 在swift中使用oc 的代码
就是需要一个桥文件, 方法一:在swift项目中,新建一个oc的类,这时候,会弹出一个对话框,你点默认的那个选项就行了.然后在新生成的桥文件中导入你所需要的oc代码的头文件就行了. 方法二:但是有时候 ...
- YSPASYS 中小型企业简单员工评价考核系统
背景:公司运营接近2年时间了,随着不断的有员工入职.离职,使用信息化管理员工各类信息是一件很有必要的事儿.诸如员工基本信息,内部公告,资产盘点,客户管理,工作周报,优秀员工评选,请假.外出.报销.采购 ...
- C#中Excel的导入和导出的几种基本方式
在上一篇(http://www.cnblogs.com/fengchengjushi/p/3369386.html)介绍过,Excel也是数据持久化的一种实现方式.在C#中.我们常常会与Excel文件 ...
- (转)卸载和安装LINUX上的JDK
卸载默认的: 用root用户登陆到系统,打开一个终端输入 # rpm -qa|grep gcj 显示内容其中包含下面两行信息 # java-1.4.2-gcj-compat-1.4.2.0-27jpp ...