动态ActionFormDynaActionForm

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>

原文地址:https://www.cnblogs.com/jinzhengquan/p/1953849.html