1,DynaActionForm
动态ActionForm是为了避免标准ActionForm膨胀而设计的,使用动态ActionForm可以获得标准ActionForm的所有功能,动态actionForm的配置,动态actonForm的配置中type使用的是struts提供的一个动态ActionForm类----DynaActionForm类,DynaActionForm类继承了ActionForm。
<form-beans>
<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String"></form-property>
<form-property name="age" type="java.lang.Integer"></form-property>
</form-bean>
</form-beans>
在该配置文件中form-bean的属性值是struts中的一个DynaActionForm类,该类继承了ActionForm类
form-property配置的是表单的字段,其中name要与表单中的name相同,type指的是表单中name的数据类型,在form-property中还可以像标准ActionForm那样实现reset设置初始值,或者实现validate实现验证,但是在动态表单中采用的是动态验证,也就是使用的是验证框架,需要加载一个验证插件,在验证插件中配置验证。
设置了动态ActionForm后就可以不用在写继承ActionForm的类了。直接在Action中使用动态ActionForm即可。
DynaActionForm采用的是map集合以键值对的形式存放表单数据
Action中的代码:
/**
* 测试动态ActionForm
* @author Administrator
*
*/
public class DynaActionFormTestAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm daf = (DynaActionForm)form;
String username = (String)daf.get("username");
Integer age = (Integer)daf.get("age");
System.out.println("username=" + username);
System.out.println("age=" + age);
return mapping.findForward("success");
}
}
jsp页面上可以使用el表达式取出:
<body>
用户名称:${dynaForm.map.username }<br>
年龄:${dynaForm.map.age }<br>
</body>