Struts数据验证

      Action类继承了ActionSupport类,而该类实现了Action、Validateable、ValidationAware、TextProvider、LocaleProvider和Seriazbale接口。而其中Validatteable 接口定义了一个validateable()方法,只要在用户的Action中重写该方法就可以实现验证功能。

 1 /**
 2  *会在执行execute之前执行,对传入的数据进行检验
 3  */
 4     @Override
 5     public void validate() {
 6         // 如果用户名为空,就把错误信息添加到Action 类的 fieldError
 7         if (user.getUsername()==null||user.getUsername().trim().equals("")) {
 8             addFieldError("user.username", "用户名必须填!");
 9         }
10     }

  在类中定义了校验方法后,该方法会在执行系统的execute()方法执行之前执行,如果执行该方法之后Action类的fieldError中已将包含了数据校验错误信息,将把请求转发到input视图处。

1     <action name="StrutsDemo1" class="cn.itcast.struts2.action.StrutsDemo1">
2    <!-- 配置结果页面的跳转 在Action 中根据不同的返回值配置不同的跳转页面 -->
3    <result name="success">/demo1/main.jsp</result>
4    <result name="input">login.jsp</result>
5     </action>    

会在登录界面显示错误信息。

struts2提供了校验框架,只需要增加一个校验配置文件就可以完成对数据的校验。

命名格式:ActionName-validation.xml     其中ActionName就是需要校验的用户自定义的Action类的类名 ,且该文件应与Action位于同一路径,如果Action类中有多个方法,对应的struts.xml文件中就有多个Action配置,这时如果想对其中一个方法进行验证,命名应该为ActionName-name-calidation.xml,这里的name是在struts.xml中的Action属性里面的name。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2  <!DOCTYPE validators PUBLIC
 3           "-//Apache Struts//XWork Validator 1.0.3//EN"
 4          "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators>
 5      <field name="user.username">
 6          <!-- 验证字符串不能为空 ,选项必填-->
 7          <field-validator type="requiredstring">
 8                <!-- 去空格 -->
 9               <param name="trim">true</param>
10               <!-- 错误提示信息 -->
11               <message>用户名必填</message>
12           </field-validator>
13       </field>
14 </validators>

其他整数校验器:

 1    <!-- 验证字符串不能为空 ,选项必填-->
 2         <field-validator type="requiredstring">
 3             <!-- 去空格 -->
 4             <param name="trim">true</param>
 5             <!-- 错误提示信息 -->
 6             <message>用户名必填</message>
 7         </field-validator>
 8             
 9         <!-- 整数大小校验器 -->
10         <field-validator type="int">
11         <param name="min">18</param>
12         <param name="max">100</param>
13         <message>必须在18和100之间</message>
14         </field-validator>
15             
16         <!-- 日期校验器 -->
17         <field-validator type="date">
18         <param name="min">1990-01-01</param>
19         <param name="max">2017-01-01</param>
20         <message>日期必须在1990-01-01到2017-01-01之间</message>
21         </field-validator>
22             
23         <!-- 邮件地址校验器 -->
24         <field-validator type="email">
25             <message>必须是有效的email地址</message>        
26         </field-validator>
27         
28         <!-- 网址地址校验器 -->
29         <field-validator type="url">
30         <message>必须输入有效的网址</message>
31         </field-validator>
32         
33         <!-- 字符串长度校验器 -->
34         <field-validator type="stringlength">
35         <param name="minlength">6</param>
36         <param name="maxlength">20</param>
37         <message>字符长度必须在6到20之内</message>
38         </field-validator>
39         
40         <!-- 正则表达式校验器 -->
41         <field-validator type="regex">
42         <param name="expression"><![CDATA[(d{6})]]></param>
43         <message>必须是6位的数字</message>
44         </field-validator>
45         
原文地址:https://www.cnblogs.com/the-wang/p/7609123.html