Struts ActionForm简单理解
要想明确struts的控制流程以及它核心API的实现原理(比方 Action/DispatchAction/ActionForm的实现原理),玩转struts1.2的关键就是可以玩转 ActionForm。
ActionForm的应用
1、——ActionForm的特性
1.创建一个form类必须继承于四个父类中的一个,比方ActionForm、ValidatorForm。
2.一个form类中的每个属性都将和页面中form表单中的每个表单元素一一相应
Example:
一个表单为:
<form>
<input type="text" name="username"></input>
<input type="password"name="password"></input>
<input type="text" name="email"></input>
</form>
一个与之相应的form类
public class UserForm extends ActionForm{
private String username;
private String password;
private String email;
private String address;
//以下省略getter和setter方法
}
一个引用了该form类的appAction:
<form-beans>
<form-bean name="userForm"type="form.UserForm"></form-bean>
</form-beans>
<action-mappings>
<action path="/test" type="action.TestAction"name="userForm" attribute="uf" scope="request"></action>
</action-mappings>
3.在引用了form-bean的action中name属性的值就是form-bean中name的值
4.这个userForm默认会被放在session中,使用scope能够指定存储该form对象的地方
2、——普通HTML表单使用Form的工作原理
ActionServlet 对struts-config进行解析时,当解析到某个action中存在一个属性name,那么ActionServlet中的 RequestProcessor就会依据该name的值找到相应的form-bean然后创建一个相应的form类实例,放在我们定义的存储范围中,当表单提交到action相应的appAction之前也就是到达FC的时候,FC会做下面事情:
1.依据路径找到相应的内存中存放着的配置对象中的action
2.依据action中的attribute属性,从session中得到一个相应的form实例
3.该form实例调用reset方法对自己进行清空
4.用表单中的值去填充该form实例
3、——Form与实体对象之间的关系
有的时候我们为了方便会把取到的form中的值直接复制到实体对象中去然后把实体对象再存储到数据库中,这样给我们的编程带来了非常多的方便,但前提是实体对象中须要拷贝的属性,form中要拷贝过去的属性,与form相应的表单元素他们三者必须一一 相应.这样我们就能够把表单中的值得到封装到form中然后再把form中与实体对象中属性同样的值复制到实体对象中。
Example:
entity:
public class User{
private String name;
private String password;
private double salary;
private String address;
//省略getter和setter方法
}
form:
public class UserForm{
private String name;
private String password;
private String salary;
//省略getter和setter方法
}
表单:
<form>
<input type="text" name="name"></input>
<input type="password"name="password"></input>
<input type="text" name="salary"></input>
</form>
1.把表单中的值赋值给UserForm
2.把UserForm中的值复制到User对象中:
//以下这条语句是在action的某个方法中做的所以form直接能够用
BeanUtils.copyProperties(user,form);
3.将user对象存放在数据库中
Struts ActionForm简单理解的更多相关文章
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- Java 层级的简单理解
在J2EE项目中,开发的都是分层来做的: 1.service层:用于暴露给网络调用 2.Impl层:统一规范接口 3.bean层:实体对象,也就是表 4.DAO(Data Access Object) ...
- git的简单理解及基础操作命令
前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...
- [转]简单理解Socket
简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html 题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
- Deep learning:四十六(DropConnect简单理解)
和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...
- Deep learning:四十二(Denoise Autoencoder简单理解)
前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...
- 简单理解dropout
dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...
- 我们为之奋斗过的C#-----C#的一个简单理解
我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...
随机推荐
- SIX GOD
SIX GOD是什么意思呢.?_百度知道 SIX GOD
- ubuntu 14.04 使用极点五笔输入法
相比12.04在外观改变不是非常大,但当中细节有些许变化,特别输入法非常不大好用,为此,我们使用fcitx输入法,使用我喜欢的五笔拼音,安装步骤例如以下: 方法一: 最新的方法非常easy: 安装14 ...
- Swift - 经纬度位置坐标与真实地理位置相互转化
通过CoreLocation类,得到的定位信息都是以经度和纬度等表示的地理信息,通过CLGeocoder类可以将其反编码成一个地址.反之,也可根据一个地址获取经纬度. 1,通过经纬度获取地址 1 2 ...
- Bitmap Style Designer非官方说明
Bitmap Style Designer Bitmap Style Designer给我的第一印象就是简陋,估计也是为了赶工.大致体会了一下,还是能够使用.因为目前没有对此有比较详细的中文资料,就把 ...
- xml总结图--(来自传智播客视频资料)
- tq2440+fedora安装qt4.5
1. make[1]: arm-none-linux-gnueabi-g++:命令未找到 make[1]: *** [.obj/release-shared-emb-arm/qatomic_arm.o ...
- Appium 命令行启动配置
Appium 安装过后,会有图形界面,同样也支持命令行参数的启动和配置 Windws: 在windows 安装配置Appium有三种方式: Node install -g appium .exe文件安 ...
- QString与char*的相互转换
原地址:http://blog.sina.com.cn/s/blog_5c70dfc80100r0nh.html 一.QString转char* QString str; int num=0; s ...
- mysql存储过程及经常使用函数
一.函数 1.数学函数 CEIL()进一取整 SELECT CEIL(1.2);2 FLOOR()舍一取整 SELECT FLOOR(1.9);9 MOD取余数(取模) SELECT MOD(3,8) ...
- fedora 搭建pptp vpn server
1 首先去sourceforge上下载pptpd的源码 http://sourceforge.net/projects/poptop/files/?source=navbar 2 对源码进行编译 ./ ...