DynaActionform--- 转载
1)什么是动态ActionForm
动态ActionForm是struts从1.1版本开始引入一项新的技术,即在创建ActionForm时可以不用通过编程的方式而只要通过struts-config.xml文件中进行配置,以后在struts运行时,会自动根据struts-config.xml中配置的DynaActionform来生成一个Action实例
2)为什么要使用DynaActionform
很显然随着应用程序的变大,数百个ActionForm 这样不仅编程起来麻烦,以后维护起来也麻烦,比如:某个属性变化了,则需要修改源代码,然后重新编译,但是如果使用DynaActionform则只需要修改struts-config.xml配置文件就行了。这样提高了应用程序的开发效率与应用程序的可维护性
3)如何使用DynaActionform
1)在struts-config.xml中创建一个DynaActionform
<form-beans >
<form-bean name="dynaActionForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="num1" type="java.lang.String"/>
<form-property name="num2" type="java.lang.String"/>
</form-bean>
</form-beans>
2)从上面的配置可以看出,动态ActionForm的配置必须增加forms-property元素且每个forms-property包含两个属性
A:name 属性的名字,该属性必须与jsp页面的表单元素的名字一致
B:type 属性的类型。强烈建议把类型都设置为String,以后在Action中再去转换
C:类型不能直接写String一定要写上java.lang.String
D:动态ActionForm的type必须要写org.apache.struts.action.DynaActionForm
它是struts中内置的一个用于创建动态ActionForm的一个父类
3)如何使用DynaActionForm
在与之对应的Action中的Excute中写上代码,然后通过其get方法就行了DynaActionForm frm=(DynaActionForm)form; //取出动态ActionForm frm.get("在struts-config.xml为动态Action配置的属性的名字");
比如:
int num1=Integer.parseInt(frm.get("num1").toString());
String userName=frm.get("userName").toString();
double price=Double.parseDouble(frm.get("price").toString());
例子
在静态ActionForm中
jsp 表单
<input type="text" name="userName" id="userName">
<input type="password" name="password" id="userPwd">
strurs
<form-beans>
<form-bean name="loginFormss" type="com.oa.modules.login.web.form.LoginForm" />
</form-beans>
Action
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;
动态ActionForm
jsp表单
<input type="text" name="loginForm.userName" id="userName">
<input type="password" name="loginForm.password" id="userPwd">
struts
<form-beans>
<form-bean name="aa" type="org.apache.struts.action.DynaActionForm">
<form-property name="loginForm" type="com.oa.modules.login.web.form.LoginForm" />
</form-bean>
</form-beans>
Action
Action public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm af = (DynaActionForm)form;
LoginForm loginForm = (LoginForm)af.get("loginForm");