5、ActionForm
对于ActionForm你可以从以下几个方面来理解它:
ActionForm表示HTTP窗体中的数据,可以将其看作是模型和视图的中介,它负责保存视图中的数据供模型或者视图使用。Struts 1.1文档中把它比作HTTP和Action之间的防火墙,这体现了ActionForm具有的过滤保护的作用,只有通过ActionForm验证的数据才能够发送到Action处理。
ActionForm是与一个或多个ActionConfig关联的JavaBean,在相应的action的execute方法被调用之前,ActionForm会自动利用请求参数来填充自己(初始化属性)。
ActionForm是一个抽象类,你必须通过继承来实现自己的类。
ActionForm首先利用属性的getter和setter方法来实现初始化,初始化完毕后,ActionForm的validate方法被调用,你可以在其中来检查请求参数的正确性和有效性,并且可以将错误信息以ActionErrors的形式返回到输入窗体。否则,ActionForm将被作为参数传给action的execute方法以供使用。
ActionForm bean的生命周期可以设置为session(缺省)和request,当设置为session时,记得在reset方法中将所有的属性重新设置为初始值。
由于ActionForm对应于HTTP窗体,所以随着页面的增多,你的ActionForm将会急速增加。而且可能同一类型页面字段将会在不同的ActionForm中出现,并且在每个ActionForm中都存在相同的验证代码。为了解决这个问题,你可以为整个应用实现一个ActionForm或者至少一个模块对应于一个ActionForm。
但是,聚合的代价就是复用性很差,而且难维护。针对这个问题,在Struts 1.1中提出了DynaActionForm的概念。
DynaActionForm类
DynaActionForm的目的就是减少ActionForm的数目,利用它你不必创建一个个具体的ActionForm类,而是在配置文件中配置出所需的虚拟ActionForm。例如,在下表中通过指定<form-bean>的type为"org.apache.struts.action.DynaActionForm"来创建一个动态的ActionForm--loginForm。
<form-beans>
<form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="actionClass" type="java.lang.String"/>
<form-property name="username" type="java.lang.String"/>
<form-property name="password" type="java.lang.String"/>
</form-bean>
</form-beans>
动态的ActionForm的使用方法跟普通的ActionForm相同,但是要注意一点。普通的ActionForm对象需要为每个属性提供getter和setter方法,以上面的例子而言,我们需要提供getUsername() 和 setUsername()方法取得和设置username属性,同样地有一对方法用于取得和设置password属性和actionClass属性。
如果使用DynaActionForm,它将属性保存在一个HashMap类对象中,同时提供相应的get(name) 和 set(name)方法,其中参数name是要访问的属性名。例如要访问DynaActionForm中username的值,可以采用类似的代码:
String username = (String)form.get("username");
由于值存放于一个HashMap对象,所以要记得对get()方法返回的Object对象做强制性类型转换。正是由于这点区别,如果你在Action中非常频繁地使用ActionForm对象,建议还是使用普通的ActionForm对象。
分享到:
相关推荐
用jsp、action、struts-config.xml配置文件,举例说明了DynaActionForm 在struts1 中的作用。
DynaActionForm(动态表单)介绍及应用,Struts framework中,ActionForm对象的封装及应用,通过Struts framework中的DynaActionForm类及其子类可以实现动态的ActionForm ,动态的ActionForm允许你通过Struts的配置...
好东西 struts
在"Struts原理(二)"中,我们将深入探讨如何利用Struts框架的一些高级特性,如DispatchAction、资源文件的国际化、错误信息的显示、DynaActionForm以及实体对象作为Form属性的使用。 **掌握DispatchAction** ...
3. ** DynaActionForm**: 这是Struts中的动态表单类,相比于传统的ActionForm,DynaActionForm不需要预先定义字段。它的字段可以在运行时动态添加,这使得表单的结构可以根据服务器端的业务逻辑改变。 4. **Struts-...
DynaActionForm是基于org.apache.struts.action.DynaActionForm的,它不需要预先定义属性,而是允许在运行时动态地添加、修改和删除属性。在配置文件中,我们使用`<form-bean>`元素来声明一个DynaActionForm,并通过...
DynaActionForm dynaForm = (DynaActionForm) form; // 动态添加表单字段 dynaForm.set("fieldName1", "fieldValue1"); dynaForm.set("fieldName2", "fieldValue2"); // ... } } ``` 在JSP页面上,可以使用...
根据提供的文件信息,我们可以深入探讨动态表单在Struts框架中的实现方式及其与DynaActionForm和DynaValidatorForm类的关系。 ### Struts框架中的动态表单 #### 1. **动态表单的基本概念** 在Struts框架中,动态...
如果希望在每次将表单数据组装到动态ActionForm之前先重置所有属性至默认值,可以通过定义一个扩展`DynaActionForm`类的子类,并覆盖其`reset()`方法来实现。具体做法是在`reset()`方法中调用`initialize()`方法。 ...
DynaActionForm dynaForm = (DynaActionForm) form; File file = (File) dynaForm.get("uploadFile"); String fileName = file.getName(); // 保存文件到服务器 // ... return mapping.findForward("success")...
该系统采用Struts框架进行开发,并利用了动态表单`org.apache.struts.action.DynaActionForm`作为主要的数据对象,以简化表单处理过程。 #### 二、Struts框架与动态表单 ##### 1. Struts框架简介 Struts是Apache...
例如,通过`<form-bean>`标签配置DynaActionForm,并在Java代码中使用`DynaActionForm`的get和set方法获取或设置值。 - **BeanUtils**:Jakarta Commons BeanUtils库提供了方便的Java Bean操作,可以简化对象属性的...
它继承自 `org.apache.struts.action.DynaActionForm` 类,并且可以通过 `<form-property>` 标签在 `struts-config.xml` 文件中定义表单字段。 ```xml <form-bean name="xxForm" type="org.apache.struts.action....
8. 为Web层创建Action和Model(DynaActionForm),实现对Web层的请求处理。 9. 填充JSP文件并创建相应的Action,使得Web层可以通过浏览器进行CRUD操作。 10. 进行功能测试,验证Action的CRUD操作是否正常工作。 11. ...
- JSP页面负责显示数据和接收用户输入,通过Struts标签库(如struts-tiles或struts-bean标签)与ActionForm或DynaActionForm交互。 通过以上步骤,你可以使用Eclipse构建一个基本的Struts1.2应用程序。不过,实际...
3. **动态动作表单(DynaActionForm)**:在Struts框架中,`DynaActionForm`是一种可扩展的表单类,允许开发者动态指定表单字段,无需预先定义每个字段的类型。这提高了代码的灵活性和可维护性。 4. **动作调度...
DynaActionForm允许我们在运行时动态定义表单字段,这极大地减少了ActionForm类的数量。然而,使用DynaActionForm的一个挑战是它不支持内置的验证功能。 为了应对这个问题,Struts提供了一个强大的**验证框架**。这...
在Struts中,ActionForm继承自JavaBeans,并且提供了两个主要的实现类:DynaActionForm和ValidatorForm。DynaActionForm继承自ActionForm,提供了动态Bean的功能,而ValidatorForm继承自ActionForm,提供了表单验证...