使用动态ActionForm-DynaActionForm(原理)
2007-04-16 15:50
537 查看
在Struts框架中,ActionForm对象用来包装HTML表单数据,并能动态返回用于显示给用户的数据,自定义的ActionForm必需符合JavaBean规范,并继承Struts的ActionForm类,同时用户可以选择的覆盖两个方法:reset()和validate().
ActionForm的唯一缺点是对于大型的Struts应用,必需以编程的方式创建大量的ActionForm类,如果HTML表单字段发生变化,就必须修改并编译相关的ActionForm类。Struts1.1对此进行了改进,引入了动态ActionForm类的概念,Struts框架的DynaActionForm类及其子类实现了动态ActionForm,该类是ActionForm类的子类。同时也提供了Validator验证框架实现动态验证表单(DynaValidatorForm)的功能。
1、配置动态ActionForm
动态ActionForm支持在Struts配置文件(struts-config.xml)中完成ActionForm的全部配置,没有必要编写额外的程序创建具体的ActionForm类,配置动态ActionForm的方法为:在Struts配置文件中配置一个<form-bean>元素,将type属性设置为DynaActionForm或它的某个子类的全名,例如:
<form-bean name="registForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="name" type="java.lang.String"/>
<form-property name="psw1" type="java.lang.String"/>
<form-property name="psw2" type="java.lang.String"/>
</form-bean>
<form-bean>的<form-property>子元素用来设置动态ActionForm的属性,<form-property>元素的name属性指定属性名,type指定属性类型,可以把动态的ActionForm的属性设置为以下Java类型:
java.lang.BigDecimal
java.lang.BigInteger
java.lang.Boolean
java.lang.Byte
java.lang.Character
java.lang.Class
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.lang.String
java.sql.Date
java.sql.Time
java.sql.Timestamp
如果表单的字段值为Java基本类型,在配置时应该用相应的包装类型来代替,比如:int类型的包装类型为Integer:
<form-property
initial="0"
name="age"
type="java.lang.Integer"/>
并在action中设置使用对应动态Action Form:
<action path="/registSubmit" type="classmate.RegistAction" name="registForm" scope="request" input="/error.jsp"/>
2、动态ActionForm的reset()方法 参考:http://www.56boke.com/user1/yhaiz/archives/2006/1910.html
3、访问动态ActionForm
Action类和JSP都可以访问动态ActionForm,使用方法与标准ActionForm大致相同,只有一点小差别,如果使用标准的ActionForm对象,在标准的ActionForm中针对每个属性都提供了get/set方法,来读取或设置属性。
而DynaActionForm把所有的属性保存在一个Map类对象中,并提供了下面的用于访问所有属性的通用方法:
public Object get(String name);
public void set(String name,Object value);
get(String name)方法根据指定的属性名返回属性值;set(String name,Object value)方法用于为给定的属性赋值。例如,如果访问DynaActionForm类中的email属性,可以采用:
//get email
String email = (String)form.get("email");
// set email
form.set("email",example@example.com);
这里建立Action Bean,要从动态ActionForm中接收表单数据:
public class RegistAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
DynaActionForm dyform = (DynaActionForm) form;
//get dynamic action form
String name = (String)dyform.get("name");
String psw1 = (String)dyform.get("psw1");
String psw2 = (String)dyform.get("psw2"); .......................................................
在JSP页面上和使用ActionForm一样:<form action="registSubmit.do" method="post">
ActionForm的唯一缺点是对于大型的Struts应用,必需以编程的方式创建大量的ActionForm类,如果HTML表单字段发生变化,就必须修改并编译相关的ActionForm类。Struts1.1对此进行了改进,引入了动态ActionForm类的概念,Struts框架的DynaActionForm类及其子类实现了动态ActionForm,该类是ActionForm类的子类。同时也提供了Validator验证框架实现动态验证表单(DynaValidatorForm)的功能。
1、配置动态ActionForm
动态ActionForm支持在Struts配置文件(struts-config.xml)中完成ActionForm的全部配置,没有必要编写额外的程序创建具体的ActionForm类,配置动态ActionForm的方法为:在Struts配置文件中配置一个<form-bean>元素,将type属性设置为DynaActionForm或它的某个子类的全名,例如:
<form-bean name="registForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="name" type="java.lang.String"/>
<form-property name="psw1" type="java.lang.String"/>
<form-property name="psw2" type="java.lang.String"/>
</form-bean>
<form-bean>的<form-property>子元素用来设置动态ActionForm的属性,<form-property>元素的name属性指定属性名,type指定属性类型,可以把动态的ActionForm的属性设置为以下Java类型:
java.lang.BigDecimal
java.lang.BigInteger
java.lang.Boolean
java.lang.Byte
java.lang.Character
java.lang.Class
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.lang.String
java.sql.Date
java.sql.Time
java.sql.Timestamp
如果表单的字段值为Java基本类型,在配置时应该用相应的包装类型来代替,比如:int类型的包装类型为Integer:
<form-property
initial="0"
name="age"
type="java.lang.Integer"/>
并在action中设置使用对应动态Action Form:
<action path="/registSubmit" type="classmate.RegistAction" name="registForm" scope="request" input="/error.jsp"/>
2、动态ActionForm的reset()方法 参考:http://www.56boke.com/user1/yhaiz/archives/2006/1910.html
3、访问动态ActionForm
Action类和JSP都可以访问动态ActionForm,使用方法与标准ActionForm大致相同,只有一点小差别,如果使用标准的ActionForm对象,在标准的ActionForm中针对每个属性都提供了get/set方法,来读取或设置属性。
而DynaActionForm把所有的属性保存在一个Map类对象中,并提供了下面的用于访问所有属性的通用方法:
public Object get(String name);
public void set(String name,Object value);
get(String name)方法根据指定的属性名返回属性值;set(String name,Object value)方法用于为给定的属性赋值。例如,如果访问DynaActionForm类中的email属性,可以采用:
//get email
String email = (String)form.get("email");
// set email
form.set("email",example@example.com);
这里建立Action Bean,要从动态ActionForm中接收表单数据:
public class RegistAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
DynaActionForm dyform = (DynaActionForm) form;
//get dynamic action form
String name = (String)dyform.get("name");
String psw1 = (String)dyform.get("psw1");
String psw2 = (String)dyform.get("psw2"); .......................................................
在JSP页面上和使用ActionForm一样:<form action="registSubmit.do" method="post">
相关文章推荐
- 使用动态ActionForm-DynaActionForm(应用&Validator)
- DynaActionForm(动态ActionForm)的使用
- 保持struts-config.xml不变,将动态Form org.apache.struts.action.DynaActionForm转化成ActionForm的例子
- DynaActionForm--动态ActionForm
- 使用DynaActionForm自动填充Form
- struts中动态表单(DynaActionForm)的使用(超简单例子)
- DynaActionForm的使用
- 动态ActionFrom --DynaActionForm
- Struts1.2中的action配置(使用DynaActionForm)
- 如何使用DynaActionForm
- 如何使用DynaActionForm
- DynaActionForm的使用
- struts DynaActionForm 使用心得
- Struts中使用 DynaActionForm
- DynaActionForm是什么及好处使用
- 收刮文章:Struts中ActionForm和ValidatorForm,ActionForm和DynaActionForm的区别
- 使用ActionlessForm.cs重写Form后使得验证控件失效的解决方法
- jdk动态代理与cglib代理、spring Aop代理原理-代理使用浅析
- 使用Struts2动态方法调用时(DMI)出现There is no Action mapped for namespace [/user] and action name [user!add] 问题
- 动态加载类的原理——元数据的使用