所谓的动态actionForm就是不用特意为每个表单编写具体的actionForm类。 使用actiomForm的缺点:ActiomForm会增加会增加一个类的绝对数量,其次如果对应的actiomForm 表单的html表单出现添加和删除属性,ActionForm就要修改重新编译,如果html表单是动态的话,那actiomForm就无能为力了。 Struts引入了动态的actionForm来解决这个问题,struts中的DynaActionForm类及子类实现了动态加载actionForm类,我们不用另外编写相应的actionForm类,DynaActionForm会根据相应的配置属性动态加载actionForm. 区别于普通的actionForm设置,只是在<form-bean>中的type设置为DynaValidatorForm类。 (1)首先在struts_config.xml中定义ActionForm名字,和相对应的路径类,利用<form-beans>的子元素 <form-property>使动态的ActionForm具有属性。 <form-beans> <form-bean name="HelloAppActionForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="userName" type="java.lang.String" /> <form-property name="userPassword" type="java.lang.String" /> <form-property name="checkNumber" type="java.lang.String" /> </form-bean> </form-beans>
(2)然后在<action-mappings>里,映射相对的Action. <action-mappings> <action input="/index.jsp" name="HelloAppActionForm"path="/HelloAppAction" scope="request" type="helloapp.HelloAppAction" validate="true"> <forward name="index" path="/index.jsp" /> </action> </action-mappings>
(3)在jsp页面调用的情况如下代码。必须要在struts标签下调用。 <html:form action="/HelloAppAction.do" focus="userName"> <bean:message key="HelloApplication.jsp.tips"/> <html:text property="userName" size="16" maxlength="16"/><br> <bean:message key="HelloApplication.jsp.enterPassword"/> <html:text property="userPassword" size="16" maxlength="10"/><br> <bean:message key="HelloApplication.jsp.enterCheckNumber"/> <html:text property="checkNumber" size="4" maxlength="10"/><br>
<html:submit property="submit" > <bean:message key="HelloApplication.jsp.submit"/> </html:submit> <html:reset property="reset"> <bean:message key="HelloApplication.jsp.reset"/> </html:reset> <p><html:errors/></p> </html:form>
访问动态actionForm的方法 标准的actionform提供了get/set方法来读取和设置属性,而DynaValidatorForm把属性保存在Map中,因此保存actionForm的属性跟保存Map相似。 下面是相关代码: Pullic Object get(String name) ; public void set(String name,Object value) ; 列子: HelloAppActionForm.set(“username”, “sturts”); String usernane = (string)HelloAppActionForm.get(“username”); |