ActionForm的详解

一:什么是ActionForm

ActionForm可以从下面四点理解它

1 . ActionForm表示Http窗体的数据,也就是咱们页面表单数据收集器,可以看作是模型和视图的中介,他负责保存表单中的数据供模型或者视图使用,只能通过ActionForm验证的数据才能发送到Action处理。

2 .  ActionForm是一个或者多个ActionConfig关联的JavaBean,在相应的Action的execute方法调用之前,ActionForm会利用请求参数填充自己。

  1. ActionForm是一个抽象类,我们在用的时候必须继承它才行。

二:ActionForm的功能和用法

  1. 获取保存表单参数,ActionForm利用自己的get和set方法来实例化自己,初始化完成以后,并且对表单中的数据,转换成我们预先定义的数据类型。
  2. 验证表单数据,ActionForm验证表单数据。验证表单数据的方法大体分为两种类型,一种是在服务端验证,一种也可以利用javaScript在客户端验证。验证就需要两个ActionForm的特殊类,也就是Struts给我们已经提供好的两个有用的ActionForm。一个是DynaActoinForm,另一个是DynaValidatorForm类。下面分别介绍一下。

三:两个特殊的ActionForm

DynaActionForm类,这个类出现的目的是为了减少系统中的ActionForm的数量,因为ActionForm负责收集表单中的数据,如果表单多了以后,就会导致ActionForm的数量急剧增加,而我们看到王勇视频中,看起来就一两个ActionForm,是因为他演示的功能很少,表单中基本上就是一项物料的信息,但是真正的项目中中绝对不是这样的,也许一个页面就可能设计到很多表单,一个项目的表单那就更多了。这样怎么办呢?DynaActionForm解决了这个问题,它可以让我们不必要创建具体的ActionForm类,而在配置文件中  用"org.apache.struts.action.DynaActionForm"来创建一个动态的ActionForm。比如下面的登录ActionForm

[html]  view plain copy
  1. <form-beans>  
  2.      <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">  
  3.          <form-property name="actionClass" type="java.lang.String"/>  
  4.          <form-property name="username" type="java.lang.String"/>  
  5.          <form-property name="password" type="java.lang.String"/>  
  6.      </form-bean>  
  7.  </form-beans>  

动态的 ActionForm的使用方法跟普通的 ActionForm 相同,但是要注意一点。普通的 ActionForm 对象需要为每个属性提供 getter 和 setter方法,以上面的例子而言,我们需要提供 getUsername() 和 setUsername() 方法取得和设置 username属性,同样地有一对方法用于取得和设置 password 属性和 actionClass 属性。

如果使用DynaActionForm,它将属性保存在一个 HashMap 类对象中,同时提供相应的 get(name) 和 set(name) 方法,其中参数name 是要访问的属性名。例如要访问 DynaActionForm 中 username 的值,可以采用类似的代码:

 

[java]  view plain copy
  1. String username = (String)form.get("username");  


由于值放到一个HashMap对象里面,必须对使用给的值做动态的转换才行,所以不是所有的ActionForm都适合动态,对应经常使用的ActionForm还是建议使用普通ActionForm的。
DynaValidatorForm类

它是DynaActionForm的一个子类,能够对表单数据进行验证,使用他首先要配置,然后在定义插件:

[html]  view plain copy
  1. <form-beans>  
  2.  <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">  
  3.      <form-property name="actionClass" type="java.lang.String"/>  
  4.      <form-property name="username" type="java.lang.String"/>  
  5.      <form-property name="password" type="java.lang.String"/>  
  6.  </form-bean>  
  7. </form-beans>  

插件

[html]  view plain copy
  1. <plug-in className="org.apache.struts.validator.ValidatorPlugIn">  
  2.  <set-property property="pathnames"  
  3.  value="/WEB-INF/validator-rules.xml,  
  4.  /WEB-INF/validation.xml"/>  
  5.  </plug-in>  

其中的validator.xml 和 validator-rules.xml 分别表示验证定义和验证规则的内容(可以合并在一起)。验证规则可以我们自己定义。使用xml文件定义。这里就不再写定义规则了。

Struts 将根据 xml配置文件中的定义来检验表单输入,并将不符合要求的错误信息输出到页面。但是你可能会想:这个功能虽然好,可是什么检验都跑到服务器端执行,效率方面和用户易用性方面是不是有些问题?你可能会怀念起那简单的JavaScript 客户端验证。

我们不用担心,在 Struts 中也支持JavaScript 客户端验证。如果你选择了客户端验证,当某个表单被提交以后,Struts 启动客户端验证,如果浏览器不支持 JavaScript验证,则服务器端验证被启动,这种双重验证机制能够最大限度地满足各种开发者的需要。JavaScript 验证代码也是在 validator-rules.xml文件中定义的。

定义的过程本人感觉比较复杂,这些验证我还是喜欢把它放到页面中,让页面开发人员去验证。

你可能感兴趣的:(ActionForm的详解)