当验证ActionForm时,如果检测到一个或多个验证错误,Struts框架会把错误转发回配置文件struts-config.xml中<action>元素的input属性所指定的输入页面。

ActionForm的使用方法:
下面通过在(Struts重构)构建一个简单的基于MVC模式的JavaWeb里面的例子

}

在以上的loginActionForm中,validate()方法和reset()方法是ActionForm中两种可以覆盖的方法。validate()方法中定义具体的ActionForm验证规则。

2.配置ActionForm
每创建一个ActionForm类,就需要在Struts的配置文件中配置这个类。如上的类配置如下:

struts1:(Struts)ActionForm类及表单数据验证<form-beans >
struts1:(Struts)ActionForm类及表单数据验证    <form-bean name="loginHandlerForm" type="struts.form.LoginHandlerForm" />
struts1:(Struts)ActionForm类及表单数据验证 
struts1:(Struts)ActionForm类及表单数据验证  </form-beans>

<form-beans>元素用来指定全体ActionForm的配置,一个Struts应用所有的ActionForm的配置都要位于该元素标记内。<form-beans>元素的子元素<form-bean>用来配置一个具体的ActionForm类,每个<form-bean>元素对应的内容为一个form bean实例。一旦定义了<form-bean>元素,就可以在Action中使用它了。

3.访问ActionForm
ActionForm可以被JSP,Struts自定义标记,Action或其他Web组件访问。访问ActionForm的一般方法如下:
 a) 使用Struts HTML标记库
 Struts HTML标记库提供了一组和ActionForm密码关联的标记,这些标记对应到HTML表单域。如<html:form>标记对应HTML的<form>标记,<html:text>对应HTML表单的text类型的<input>输入域。这些标记和ActionForm交互,以把ActionForm中的属性值显示出来。
 b)  从request或session对象中取出ActionForm对象
 根据作用域的不同,Struts框架把ActionForm实例保存在request或session对象中,保存时采用的key值为<form-bean>元素的名字,即name属性的值。因此,可以像取出任何存放在request或session对象中的属性一样取出ActionForm实例。如:

struts1:(Struts)ActionForm类及表单数据验证LoginHandlerForm loginHandlerForm = (LoginHandlerForm)request.getAttribute("loginHandlerForm");        
struts1:(Struts)ActionForm类及表单数据验证        


 c)在Action类的execute()方法中直接访问ActionForm
 如果配置了ActionForm和Action映射,Struts框架就会把ActionForm作为参数传给Action类的execute()方法,在execute()方法中,可以直接读取或设置ActionForm属性。在Action中使用ActionForm的示例如下:

struts1:(Struts)ActionForm类及表单数据验证    public ActionForward execute(ActionMapping mapping, ActionForm form,
    }


表单的数据验证
在上面的LoginHandlerForm代码中我们看到validate()方法体几乎是空的,也就是说LoginHandlerForm没有启动对表单数据进行验证的功能。我们也看到validate()方法返回的是一个ActionErrors对象。该对象封装了验证过程中所发现的错误。
表单验证是ActionForm的一个主要的功能之一。要实现这个功能,我们需要采取4个步骤:
a)重写validate()方法。
b)在资源文件ApplicationResources.properties中设置可能的验证错误的标识。
c)要在配置文件struts-config.xml中,把<action>元素的validate属性设置为true(默认已经是true),并添加<message-resources>元素以指明资源文件的存放路径。
d)在相应输入页面的相应位置加入错误标记<html:errors>,以输出可能的验证错误。
如上代码,如果我们要在LoginHandlerForm中实现输入数据验证功能,则相应采取上术四步。
1.重写validate()方法,如下:

struts1:(Struts)ActionForm类及表单数据验证//验证方法,主要用于验证视图上的数据,例如非空之类,
struts1:(Struts)ActionForm类及表单数据验证    //如果要进行业务验证,则应该在Action中进行!
struts1:(Struts)ActionForm类及表单数据验证    public ActionErrors validate(ActionMapping mapping,
    }

在以上代码中我们使用 了ActionErrors类和ActionMessage类。ActionErrors类封装了一组验证错误,它的用法类似 Map类。而ActionMessage类封装了单个验证错误,它的构造函数内的参数就指向资源文件内的一个错误文本。例如语句"ActionMessage("error.login.userName")"中的参数"error.login.userName" 其实就是资源文件ApplicationResources.properties中的一条错误文本的键(key)。通过ActionErrors对象的add()方法,可以把ActionMessage对象加入到ActionErrors对象中。
2.设置资源文件
在struts的资源文件ApplicationResources.properties中设置可能的验证错误的标识:

struts1:(Struts)ActionForm类及表单数据验证# Resources for parameter 'struts.ApplicationResources'
struts1:(Struts)ActionForm类及表单数据验证# Project MVCStruts
struts1:(Struts)ActionForm类及表单数据验证error.login.userName=用户名必须填写且长度不小于3
struts1:(Struts)ActionForm类及表单数据验证error.login.userName=密码必须填写且长度不小于3

在资源文件中我们不能直接写中文,否则会出现乱码,至于我这里中文一是方便看,二是我按照了插件,可以自动过滤!插件可参考解决Struts中ApplicationResources.properties文件不支持中文问题
3.修改配置文件struts-config.xml
将配置文件struts-config.xml中<action>元素的validate属性设置为true,此处,还需要<message-resources>元素,以指明资源文件的路径。如下:

struts1:(Struts)ActionForm类及表单数据验证<action
struts1:(Struts)ActionForm类及表单数据验证      attribute="loginHandlerForm"
struts1:(Struts)ActionForm类及表单数据验证      input="/login.jsp"
struts1:(Struts)ActionForm类及表单数据验证      name="loginHandlerForm"
struts1:(Struts)ActionForm类及表单数据验证      path="/loginHandler"
struts1:(Struts)ActionForm类及表单数据验证      scope="request"
struts1:(Struts)ActionForm类及表单数据验证      validate="true"
struts1:(Struts)ActionForm类及表单数据验证      type="struts.action.LoginHandlerAction" >
struts1:(Struts)ActionForm类及表单数据验证    <!-- action与视图组件的联系在配置文件中写,这样就大大降低了Action和VIEW的耦合性  -->
struts1:(Struts)ActionForm类及表单数据验证          <forward name="success" path="/main.jsp" />
struts1:(Struts)ActionForm类及表单数据验证          <forward name="fail" path="/register.jsp" />
struts1:(Struts)ActionForm类及表单数据验证     </action>
struts1:(Struts)ActionForm类及表单数据验证<!-- 资源文件 -->
struts1:(Struts)ActionForm类及表单数据验证  <message-resources parameter="struts.ApplicationResources" />
struts1:(Struts)ActionForm类及表单数据验证 


资源文件书写类似JAVA文件,有包之分,注意是点号,不要写成反斜杠/
4.在页面 中加入错误标记:


<html:errors>是struts的一个自定义标记。它能根据它的property属性从资源文件中取出相应的验证错误,并输入页面中指定的位置显示验证错误。

相关文章:

  • 2021-04-05
  • 2021-12-06
  • 2021-06-10
  • 2022-12-23
  • 2022-12-23
  • 2022-01-17
  • 2022-12-23
  • 2021-10-15
猜你喜欢
  • 2022-01-09
  • 2021-05-04
  • 2021-05-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案