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;//订单idprivate 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,封装机制更为智能,代码会简化很多。

 

转载于:https://www.cnblogs.com/wql025/p/5006010.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT输入输出(四)之 QProcess

QProcess Qt提供了一个QProcess类用于启动外部程序并与之通信.这个类是异步工作的,而且在后台执行,这样用户界面就可以始终保持响应。 启动一个新的进程的操作非常简单,只需要将待启动的程序名称和启动参数传递给start()函数即可. 例如: QObj…

iOS 推送 逻辑

推送 阶段一:Provider[服务端]把要发送的消息,目的IOS设备标识打包,发送给APNS; 阶段二:APNS在自身的已注册Push服务的IOS设备列表中,查找有相应标识的IOS设备,并将消息发送到IOS设备&#xff1…

正则提取的url中的域名以及替换域名的方法 preg_match()和preg_replace()

<?php //网站的url$url http://www.baidu.com/index.php;//正则表达式$reg /(http):\/\/([^\/])/i;preg_match($reg, $url,$res);/** $res的结果array (size3)0 > string http://www.baidu.com (length20)1 > string http (length4)2 > string www.baidu.com (…

音视频开发

command s 截模拟器的屏幕 MP.4只是一个容器 H.264 H.263是真正的格式 H.265正在测试中 avi H.264 H.263 视频解码&#xff1a;将H.263 H.264转换为视频和音频的格式 视频编码&#xff1a; 解码&#xff1a;硬解码&#xff1a;GPU做的解码 CPU做除了图片以外的&#…

10.11 安装pod

原文地址&#xff1a;http://www.jianshu.com/p/5fc15906c53a 感谢。 更新升级10.11 cocoapods安装出问题最简单的解决方法 这是因为10.11把cocoapods直接干掉了 sudo gem install -n /usr/local/bin cocoapods 再加一句&#xff0c;完美解决 sudo xcode-select --switch /App…

windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解

通俗的讲工作设置内存是程序占用的物理内存(包含与其他程序共享的一部分), 内存专用工作集是程序独占的物理内存, 提交大小是程序独占的内存(包含物理内存和在页面文件中的内存). 注:页面文件就是存放不在物理内存中的内存,文件路径一般在C:\pagefile.sys,目的是为了能够让更…

coreData mapView #include

一、coreData 需要导入系统库CoreData 新建文件的时候选core data 中的Data Model 然后加相应的表 加完表后 在Model.xcdatamodeld中新建文件 选coredata中的第三个 即可 如果两个表有联系 就将附表放到主表中 在build Setting中&#xff0c;输入search 在Framework Searc…

浅谈 C++ 中的 new/delete 和 new[]/delete[]

来自&#xff1a;http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C 中&#xff0c;你也许经常使用 new 和 delete 来动态申请和释放内存&#xff0c;但你可曾想过以下问题呢&#xff1f; new 和 delete 是函数吗&#xff1f;new [] 和 delete [] 又是什么&#xff1f…

JavaScript中的原型继承原理

在JavaScript当中&#xff0c;对象A如果要继承对象B的属性和方法&#xff0c;那么只要将对象B放到对象A的原型链上即可。而某个对象的原型链&#xff0c;就是由该对象开始&#xff0c;通过__proto__属性连接起来的一串对象。__proto__属性是JavaScript对象中的内部属性&#xf…

XMPP

XMPP不支持视频聊天 支持文字聊天 但对于图片和语音聊天支持的不好 那么就将他们转成NSData的形式 IM Instance Message 即时聊天 聊天系统中 XMPP主要做两个人的聊天和群聊&#xff0c;只用了这两个功能 还有一个HTTP的服务器 &#xff0c;他是一个旁路服务器 XMPP底层…

QT 调试

QT调试&#xff08;参考下面的说明就可以正常调试&#xff09;&#xff1a;http://blog.csdn.net/wchengshen/article/details/50254731http://blog.csdn.net/sx341125/article/details/53606534 QT调用DLL&#xff1a; Qt中调用VS编译dll的方法(一)----显式调用 qt使用动态库(…

建模元件有哪些在MapleSim中

信号库&#xff1a;包含通用信号模块、布尔、控制器、离散信号模块、信号源、线性信号模块、非线性信号模块、时间离散信号模块、查询表、信号转换器、数学运算、关系元件、特殊信号模块&#xff0c;应用案例。 电子库&#xff1a;包含电阻、运算放大器、二极管、步进电机、模拟…

iOS小笔记

controller&#xff1a;连接二者的桥梁&#xff1b;cocoa frameworks 有两个框架&#xff1a;foundationfoundation 是cocoa中最基本的一些类&#xff1b;再mac应用程序中负责对象管理&#xff0c;内存管理&#xff0c;容器等相关数据&#xff1b;uikit&#xff1a;uikit&…

【C++】VS2010将写好的程序打包成安装文件发布

参考链接&#xff1a;http://blog.csdn.net/yongh701/article/details/51326142 我们可以将自己写好的VS2010程序打包成安装文件&#xff0c;给用户安装&#xff0c;具体步骤如下&#xff1a; 1、如下图&#xff0c;同样是新建一个项目&#xff0c;但是这次是新建一个其它项目…

01_jeecms建站

一、环境安装 JDK5TOMCAT5.5MYSQL5及以上http://www.jeecms.com/tutorial/index.jhtml参考环境安装篇二、解压文件安装包jeecms-v5zip,如图图1ROOT文件夹复制放到tomcat下的webapps文件夹&#xff08;注&#xff1a;请先删除webapps下原有的默认ROOT文件夹&#xff09;如不想部…

WiFi基本知识

转自&#xff1a;http://blog.csdn.net/myarrow/article/details/7930131 1. IE802.11简介 标准号IEEE 802.11bIEEE 802.11aIEEE 802.11gIEEE 802.11n标准发布时间1999年9月1999年9月2003年6月2009年9月工作频率范围2.4&#xff0d;2.4835GHz 5.150&#xff0d;5.350GHz5.475&a…

iOS各种小理论知识

Objective-C 部分 1. 你如何理解 OC 的内存管理 OC 内存管理是基于引用计数。谁想使用某个对象 B,就要把对象 B 的计数器1,如果不 使用这个对象了,那么就把对象 B 计数器-1,如果 B 对象计数器减到 0,那么 B 对象自动会调用自己的 dealloc 函数,也就是这个对象被销毁。 一…

libev 宏展开

想看源码&#xff0c;宏太多&#xff0c;看着累&#xff0c;宏展开&#xff0c;再看&#xff0c;功力时间不够&#xff0c;先放下 放上宏展开后的代码。 libev4.20 展开方示为 ./configure 修改makefile文件&#xff0c;字符串 替换CC为 CPP 注意要把基础的CC定义保留 make mv …

FreeRTOS高级篇7---FreeRTOS内存管理分析

原文&#xff1a;http://blog.csdn.net/zhzht19861011/article/details/51606068 内存管理对应用程序和操作系统来说都非常重要。现在很多的程序漏洞和运行崩溃都和内存分配使用错误有关。 FreeRTOS操作系统将内核与内存管理分开实现&#xff0c;操作系统内核仅规定了必要的内…

笔试题

1.是不是一个父类写了一个virtual 函数&#xff0c;如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。private 也被集成&#xff0c;只事派生类没有访问权限而已。virtual可加可不加。子类的空间里有父类的所有变量(static除外)。同一个函数只存…