【Struts】——ActionForm
2017-01-30 18:58
417 查看
上篇示例中我们看到了ActionForm,这篇我们详细了解一下:
ActionForm是用于封装用户的请求参数的。上篇我们也提到了:(在ActionForm中设置用到的数据,需和表单保持一致。因为提交表单的时候,数据会存在ActionFrom中)
静态:
在传统的web应用中,不能自动收集用户输入的表单内容,所以开发人员不得不手动提取表单的值,数据量少还可以,但当表单输入项很多时就会产生很多重复性的工作。因为表单输入文本域为:<input type=“text” name="password">要取得其文本值,我们每次都需要以这种方式获取:request.getParameter("password")
而ActionForm便很好的帮我们解决了这个 问题。如在Struts中用struts的html标签获取值:<html:text property="password">
在这种情况下,struts会自动把表单中的输入项赋值到ActionForm中的password属性中。从而把表单的内容保存在ActionForm中。整个过程全自动, 不需人工干涉。但我们一般要遵循以下规范:
(1)每个ActionForm都要继承org.apache.struts.action.ActionForm类,而且需要为每一个表单提供一个ActionForm。
(2)ActionForm中每个属性要与表单中的输入项一一对应。
(3)AcitonForm每个属性都要提供的getter方法和setter方法。Struts框架就是通过这些方法来保存表单的值,然后在Action中通过这些方法取得表单的值。
(4)如果表单需要验证,就需要在ActionForm中提供validate方法,这个方法中提供对表单的具体验证逻辑。这个方法不仅实现了数据验证同时实现了数据缓冲的作用,在validate方法中验证用户提交表单的有效性,当表单验证失败时会自动返回用户输入页面,这时候用户输入的值都保存在ActionForm中,返回页面时struts框架会取出AcitonForm中的数据并输出到对应的用户输入项中,保证了用户开始输入的表单信息。
动态:
以上是静态ActionForm,相对比传统的方便了很多,但我们需要为每一个表单创建一个ActionForm,这样当表单多的时候,会导致ActionForm数量很多。那如何解决呢?
这就要提到动态ActionForm。动态ActionForm不需要创建自己的ActionForm,需要在创建自己Action的时候直接把execute方法中传递过来的form对象转化为DynaActionForm。
我们需要更改struts-config.xml中form-beans配置:
静态ActionForm方式,使用get/set方法,而动态ActionForm方式,使用map的getkey方式,其中key就是标签name的值。
使用动态ActionForm优点:若更改表单和ActionForm时不需要重新编译,而静态的需要更改静态的ActionForm.Java文件,必须重新编译。缺点:静态返回的是对应的值,动态ActionForm返回的是对象,我们还要把这个对象进行强制转换。
ActionForm是用于封装用户的请求参数的。上篇我们也提到了:(在ActionForm中设置用到的数据,需和表单保持一致。因为提交表单的时候,数据会存在ActionFrom中)
静态:
在传统的web应用中,不能自动收集用户输入的表单内容,所以开发人员不得不手动提取表单的值,数据量少还可以,但当表单输入项很多时就会产生很多重复性的工作。因为表单输入文本域为:<input type=“text” name="password">要取得其文本值,我们每次都需要以这种方式获取:request.getParameter("password")
而ActionForm便很好的帮我们解决了这个 问题。如在Struts中用struts的html标签获取值:<html:text property="password">
在这种情况下,struts会自动把表单中的输入项赋值到ActionForm中的password属性中。从而把表单的内容保存在ActionForm中。整个过程全自动, 不需人工干涉。但我们一般要遵循以下规范:
(1)每个ActionForm都要继承org.apache.struts.action.ActionForm类,而且需要为每一个表单提供一个ActionForm。
(2)ActionForm中每个属性要与表单中的输入项一一对应。
(3)AcitonForm每个属性都要提供的getter方法和setter方法。Struts框架就是通过这些方法来保存表单的值,然后在Action中通过这些方法取得表单的值。
(4)如果表单需要验证,就需要在ActionForm中提供validate方法,这个方法中提供对表单的具体验证逻辑。这个方法不仅实现了数据验证同时实现了数据缓冲的作用,在validate方法中验证用户提交表单的有效性,当表单验证失败时会自动返回用户输入页面,这时候用户输入的值都保存在ActionForm中,返回页面时struts框架会取出AcitonForm中的数据并输出到对应的用户输入项中,保证了用户开始输入的表单信息。
动态:
以上是静态ActionForm,相对比传统的方便了很多,但我们需要为每一个表单创建一个ActionForm,这样当表单多的时候,会导致ActionForm数量很多。那如何解决呢?
这就要提到动态ActionForm。动态ActionForm不需要创建自己的ActionForm,需要在创建自己Action的时候直接把execute方法中传递过来的form对象转化为DynaActionForm。
我们需要更改struts-config.xml中form-beans配置:
<form-beans> <form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="username" type="java.lang.String" /> <form-property name="age" type="java.lang.Integer"/> </form-bean> </form-beans>Action中使用get方法取得表单中的值。
/** * 测试动态ActionForm. * @author summer * */ public classDynaActionFormTestAction extends Action { @Override publicActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequestrequest, HttpServletResponse response) throwsException { DynaActionFormdaf = (DynaActionForm)form; //取出map中key值为name,value为类名. Stringusername = (String)daf.get("username"); Integerage = (Integer)daf.get("age"); System.out.println("username"+username); System.out.println("username"+age); returnmapping.findForward("success"); } }
静态ActionForm方式,使用get/set方法,而动态ActionForm方式,使用map的getkey方式,其中key就是标签name的值。
使用动态ActionForm优点:若更改表单和ActionForm时不需要重新编译,而静态的需要更改静态的ActionForm.Java文件,必须重新编译。缺点:静态返回的是对应的值,动态ActionForm返回的是对象,我们还要把这个对象进行强制转换。
相关文章推荐
- Struts1.2中ActionForm的理解
- Struts里提交中文表单到ActionForm的乱码问题
- struts中动态表单(DynaActionForm)的使用(超简单例子)
- 保持struts-config.xml不变,将动态Form org.apache.struts.action.DynaActionForm转化成ActionForm的例子
- 2.Struts的<action input=""></action>:ActionForm
- 4.Struts设置ActionForm为session struts-config.xml
- Struts ActionForm的优化写法
- struts中action,actionform,jsp配置及流程分析(个人理解)
- struts入门学习(struts中ActionForm,Action,javabean的运行机制 )
- 多行数据提交到Struts的ActionForm的List属性中
- 2. struts上传:ActionForm
- 2.Struts采用EL保持表单数据:ActionForm
- 3.Struts设置ActionForm为session Action
- Struts使用中ActionForm get set方法的小问题
- 一口一口吃掉Struts(六)——动态ActionForm
- 【转载】Struts-ActionForm详解
- 结合验证在struts中减少Action和ActionForm的数量 选择自 fancyerII 的 Blog
- 深入浅出学习Struts1框架(十一)-利用ActionMapping来创建ActionForm
- 对struts1.2中ActionForm的理解
- Struts1 页面提交到ActionForm,form为null