Struts1.x ActionForm
来源:互联网 发布:越光宝盒 知乎 编辑:程序博客网 时间:2024/05/16 18:15
1.ActionForm
原理
继承于org.apache.struts.action.ActionForm,在jsp发出请求后,实例化servlet并载入struts-config.xml。通过执行action方法来获取mapping中的actionform的name,首先会在session、request中查找是否存在对应的actionform;有则直接return,反之根据名字反射构造相应的实例类,并将request中的数据设置到actionform中。如下图
2.使用
ActionForm使用要求
1.必须扩展org.apache.struts.action.ActionForm积累
2.定义与html表单中输入控件name一直的可读写公共属性
可选参数
reset :初始化必要属性
validate:校验必要属性
作用
字段收集器
struts自动根据从http传输过来的属性自动设置相应的值,开发所做的就是在表单上的控件名称和ActionForm上的公共属性相对应即可。
数据缓冲
虽然在web端可以通过js来控制数据的验证,但总会出现这样兼容性以及脚本无法使用的情况。而ActionForm配备的validate就可以屏蔽这个问题。
类型转换
因为从http传过来都是key-value,value通常为文本。而在ActionForm中属性都是会有自己定义的数据类型的,boolean或者string等。这里主要使用的还是beanutils这个第三方的开发包,不同的数据类型调用不同的转换包。
原理:在请求servlet时候,init的方法会注册相应的转换类,也就是对应的几个基本数据类型的转换器。转换器的最基本原理还是实现了convert类,如:这个数据需要转换为boolean类型,传过来的时候会将数据类型和数据传过来。如果传过来就是boolean类型,那么直接返回;如果不是则(boolean)value.tostring()强转即可;因为这个时候已经知道目标数据类型了,所以这个时候强转是不会出现数据丢失的情况的。
自定义的类型转换,上面由于只能针对基本的数据类型进行转换。而对于一些自定义的数据类型,就需要自己定义相应的转换器进行转换了。这里转换的实现思路,仿造struts实现的原理。然后在servlet初始化时,注册到相应的map结构中即可。
demo
java 转换器
package cfl.convert.util;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.http.HttpServlet;import org.apache.commons.beanutils.Converter;/* * 初始化转换器-陈方林-2014年10月15日 */public class personalConvert implements Converter {@Overridepublic Object convert(Class type, Object value) {// TODO Auto-generated method stubif(value instanceof Date){return value;}if(value instanceof String){try {return new SimpleDateFormat("yyyy-MM-dd").parse((String)value);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return null;}}
servlet
package cfl.convert.util;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import org.apache.commons.beanutils.ConvertUtils;public class personalConvertServlet extends HttpServlet {@Overridepublic void init() throws ServletException {// TODO Auto-generated method stubSystem.out.print("success");ConvertUtils.register(new personalConvert(), java.util.Date.class);}}
配置 自定义servlet初始化 注册对应的转换器
<servlet> <servlet-name>personConvert</servlet-name> <servlet-class>cfl.convert.util.personalConvertServlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet>
DynaActionForm
以配置来替换ActionForm,需要定义一系列的属性。但涉及到验证等属性时,需要借用第三方的jar包(validator)来实现。
1.配置属性
demo
<form-beans><form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm"><form-property name="username" type="java.lang.String"></form-property><form-property name="age" type="java.lang.Integer"></form-property></form-bean> </form-beans>
同样这样也能够通过EL表达式从actionform里面取得数据,也就是说动态form和静态form没有什么区别,无非在实现上需要使用一些第三方的jar。
3.总结
actionform根据form表单对表单数据进行了单独处理,减轻了jsp的负担,也降低了数据和显示和显示逻辑的耦合度。易于开发,需要注意的就是需要约定form中输入控件的name和actionform类的公共属性保持一致。也正是这种约定降低了编程和开发的难度,正如开发中常讲:约定优于配置。
0 0
- Struts1.x ActionForm
- struts1.x中ActionForm的作用
- Struts1.x中ActionForm的应用探究
- Struts1 ActionForm
- 在Struts1.x中用actionForm实现 request.getParameterValues("")效果;
- Struts1 ActionForm 工作原理
- Struts1 - 学习笔记 - ActionForm
- struts1之ActionForm
- struts1.2中的ActionForm
- struts1配置动态actionForm
- struts1的actionform
- struts1.x数据从前台jsp到后台actionform中文乱码
- struts1 中ActionForm赋值原理
- struts1 中ActionForm赋值原理
- struts1 中ActionForm赋值原理
- struts1 中ActionForm赋值原理
- struts1 中ActionForm赋值原理
- Struts1 中 什么是动态ActionForm 与静态ActionForm
- 第11周项目6(4-4)-回文素数
- 二叉树遍历 (递归算法)
- 简简单单
- 悟透JavaScript - 奇妙的对象
- 数字电路设计之VGA显示条形图的verilog实现
- Struts1.x ActionForm
- ios之工程中混合使用 ARC 和非ARC 配置方法
- SQL Server 2012修改sa密码的方法
- eclipse myeclipse 中的server的配置
- 二叉搜索树的后序遍历
- Android与设计模式——观察者(Observer)模式
- 悟透JavaScript - 放下对象
- 第11周项目7-太乐了
- bufferbloat--缓存过满