Struts2 使用Validation框架验证数据

在采用struts的xml配置方式校验数据时,发现怎么也不起作用。无法按照正常流程,走到input指向的页面。

一   问题的解决

很多博客说明了自己查找的方式,最后都指明了是因为配置文件格式不正确的原因。出现这种问题的时候,应该从下面4个部分考虑:

1:文件名是否是 LogInAction-validation.xml 第一部分的名字必须与action类名对应一致。

2:struts.xml中同一个action下面,要配置input类型的返回结果,如同:

<action name="login" class="com.allen.ssh.action.LogInAction">
            <result name="success">/Welcome.jsp</result>
            <result name="error">/Register.jsp</result>
            <result name="input">/Register.jsp</result> 
        </action>

3:然后是检查 LogInAction-validation.xml 中指定的属性名字,是否与JSP页面中的属性名字一致。

4:然后是 LogInAction-validation.xml 文件格式是否正确,主要是指如下这一部分:

<!DOCTYPE validators PUBLIC
  "-//Apache Struts//XWork Validator 1.0.3//EN"

  "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

A:在Struts2的框架汇中,开发者可以通过继承ActionSupport()类,并重写validate()方法来完成输入校验。使用在Action中重写Validate()或者 validateXxx()方法实现校验对某个方法起作用。 
   例如:validate()方法会对action中的所有 逻辑处理方法起作用  比如:execute() , login() 

B:采用Struts2的内置校验器 也就是配置文件 来实现校验 

-----------Validate()------------------------ 
1.在Struts2的框架汇中,专门用来校验数据的方法是validate(),开发者可以通过继承ActionSupport()类,并重写validate()方法来完成输入校验。 
validate()方法会对action中的所有 逻辑处理方法起作用  比如:execute() ,    login() 

2.action. 

Java代码   收藏代码
  1. package com.sh.action;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import com.opensymphony.xwork2.ActionSupport;  
  6. import com.sun.xml.internal.fastinfoset.stax.events.Util;  
  7.   
  8. public class ValidateAction extends ActionSupport {  
  9. private String name;  
  10. private String pwd;  
  11. private Date date;  
  12.   
  13.   
  14. @Override  
  15. public String execute() throws Exception {  
  16.     // TODO Auto-generated method stub  
  17.     return SUCCESS;  
  18. }  
  19.   
  20. @Override  
  21. public void validate() {  
  22.     if(date==null || date.after(new Date())){  
  23.         addFieldError("date""出生日期无效!");  
  24.     }  
  25.     if(pwd==null || Util.isEmptyString(pwd)){  
  26.         addFieldError("pwd""密码不能为空!");  
  27.     }  
  28. }  
  29. }  

3.struts.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5.   
  6. <struts>   
  7.     <!-- 如果 注解的action配置改变时候不需要重新启动tomcate -->  
  8.     <constant name="struts.i18n.encoding" value="utf-8"/>  
  9.     <constant name="struts.devMode" value="false"/>    
  10.     <constant name="struts.convention.classes.reload" value="true" />   
  11.       
  12.     <package name="default" extends="struts-default">  
  13.         <action name="validateAction" class="com.sh.action.ValidateAction">  
  14.             <result>/success.jsp</result>  
  15.             <result name="input">/index.jsp</result>  
  16.         </action>  
  17.     </package>  
  18.       
  19. </struts>  

4.login.jsp 
Html代码   收藏代码
  1. <body>  
  2.   <s:fielderror/>  
  3.    <s:form action="validateAction" method="post" theme="simple">  
  4.     用户名:<s:textfield name="name"/><br/>  
  5.     复合生日:<s:textfield name="pwd"/><br/>  
  6.     常用日期:<s:textfield name="date"/><br/>  
  7.     常用日期2:<sx:datetimepicker name="todayDate" label="Format (yyyy-MM-dd)" displayFormat="yyyy-MM-dd hh:mm:ss"/><br/>  
  8.     <s:submit value="提交"/>  
  9.    </s:form>  
  10.   </body>  


5访问 
--http://localhost:8080/Struts2_validate/index.jsp 


-----------ValidateXxxx()------------------------  

6.只对action中某一个处理方法 进行校验  测试login(如果 valudate()不注释,就会对所有的方法起作用) 
Java代码   收藏代码
  1. package com.sh.action;  
  2.   
  3. import java.util.Date;  
  4. import java.util.regex.Pattern;  
  5.   
  6. import com.opensymphony.xwork2.ActionSupport;  
  7. import com.sun.xml.internal.fastinfoset.stax.events.Util;  
  8.   
  9. public class ValidateAction extends ActionSupport {  
  10. private String name;  
  11. private String pwd;  
  12. private Date date;  
  13.   
  14.   
  15. @Override  
  16. public String execute() throws Exception {  
  17.     // TODO Auto-generated method stub  
  18.     return SUCCESS;  
  19. }  
  20.   
  21. @Override  //会对所有的 方法都有作用 比如 execute login  
  22. public void validate() {  
  23.     if(date==null || date.after(new Date())){  
  24.         addFieldError("date""出生日期无效!");  
  25.     }  
  26.     if(pwd==null || Util.isEmptyString(pwd)){  
  27.         addFieldError("pwd""密码不能为空!");  
  28.     }  
  29. }  
  30.   
  31. //登陆方法  
  32. public String login(){  
  33.     return SUCCESS;  
  34. }  
  35. //只对登录方法进行校验  
  36. public void validateLogin(){  
  37.     if(name!=null && !Pattern.matches("\\w{6,15}", name.trim())){  
  38.         addFieldError(name, "validateLogin()方法的作用");  
  39.     }  
  40. }  
  41. //get set  
  42.   
  43. }  


7.struts.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5.   
  6. <struts>   
  7.     <!-- 如果 注解的action配置改变时候不需要重新启动tomcate -->  
  8.     <constant name="struts.i18n.encoding" value="utf-8"/>  
  9.     <constant name="struts.devMode" value="false"/>    
  10.     <constant name="struts.convention.classes.reload" value="true" />   
  11.       
  12.     <package name="default" extends="struts-default">  
  13.         <action name="validateAction" class="com.sh.action.ValidateAction">  
  14.             <result>/success.jsp</result>  
  15.             <result name="input">/index.jsp</result>  
  16.         </action>  
  17.         <action name="validateLoginAction" class="com.sh.action.ValidateAction" method="login">  
  18.             <result>/success.jsp</result>  
  19.             <result name="input">/index.jsp</result>  
  20.         </action>  
  21.     </package>  
  22.       
  23. </struts>  
  24.   
  25. 8.访问  
  26. --http://localhost:8080/Struts2_validate/index.jsp  
  27. --如果不输入端额话,将会出现指定的错误信息。  


-----------Struts2内置校验器------------------------  
struts2的所有校验器在 
xwork-core.jar/com.opensymphony.xwork2.validator.validators/default.xml 中有定义。 

9.Struts2内置校验器的种类 
Java代码   收藏代码
  1. required:必填校验器  
  2. requiredstring:必填字符串校验器  
  3. stringlength:  字符串长度校验器  
  4. int:整数校验器  
  5. date:日期校验器  
  6. expression:表达式校验器  
  7. fieldexpression:字段表达式校验器  
  8. email: 邮件地址校验器  
  9. url:网址校验器  
  10. conversioin:转换校验器  
  11. regex:正则表达式校验器  


10.使用Struts2内置校验器 
字段校验器配置风格 
Xml代码   收藏代码
  1. <validators>  
  2.   <field name="被校验的字段">  
  3.      <field-validator type="校验器的类型">  
  4.         <param name="参数名">参数值</param>  
  5.          <message> 提示信息</message>  
  6.      </field-validator>  
  7.   </field>  
  8.   
  9.   <!--下一个要验证的字段-->  
  10.     
  11. </validators>  


11.非字段校验器配置风格 
Xml代码   收藏代码
  1. <valiators>  
  2.   <validator type="校验器类型名">  
  3.      <!--fieldName固定的 N必须大写-->  
  4.      <param name="fieldName">需要被校验的字段</param>  
  5.       <!--下面的param元素可以有0个或者多个-->   
  6.      <param name="参数名">参数值</param>  
  7.     <message key="I18NKey">提示信息</message>  
  8.   </validator>  
  9. </validators>  


12.使用内置校验器需要定义 ActionName-validate.xml文件 在其中定义 字段校验器和非字段校验器  

--------使用 字段校验器 -------- 
13.action  
Java代码   收藏代码
  1. package com.sh.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class InnerValidatorAction extends ActionSupport {  
  6.   
  7.     private int age;  
  8.     private String name;  
  9.       
  10.     @Override  
  11.     public String execute() throws Exception {  
  12.         // TODO Auto-generated method stub  
  13.         return SUCCESS;  
  14.     }  
  15. //get set  
  16. }  


14.InnerValidatorAction-validation.xml 定义上面 aciton的校验文件 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.   
  5. <validators>  
  6. <!-- 根据字段配置校验 -->  
  7.   
  8. <!--  
  9. short-circuit="true" :表示短路,即下面的: 如果age 不是整数 就不会验证 age 的大小范围,这样我们的错误信息只有一个   (类似: if...  else if...)  
  10. short-circuit="false" :表示不短路(默认): 即下面的: 如果 age 不是整数,还会继续判断age的大小范围 这样页面就有两个错误信息  (类似if...  if..)  
  11. -->  
  12. <!-- 验证字段必须为整数 -->  
  13. <!--使用conversion校验器-->  
  14. <field name="age">  
  15.      <field-validator type="conversion" short-circuit="true">  
  16.         <message>年龄必须为整数</message>  
  17.      </field-validator>  
  18. </field>  
  19.   
  20. <!-- 验证字段必须的大小范围 -->  
  21. <!--使用int校验器-->  
  22. <field name="age">  
  23.     <field-validator type="int" short-circuit="true">  
  24.          <param name="min">18</param>  
  25.          <param name="max">100</param>  
  26.          <message>年龄必须在${min}到${max}之间</message>  
  27.     </field-validator>  
  28. </field>  
  29.   
  30. <!-- 验证name字段必须为string类型 -->  
  31. <!--使用requiredstring校验器-->  
  32. <field name="name">  
  33. <field-validator type="requiredstring" short-circuit="true">  
  34. <message>姓名不能为空</message>  
  35. </field-validator>  
  36. </field>  
  37.   
  38. <!--使用stringlength校验器-->  
  39. <field name="name">  
  40. <field-validator type="stringlength" short-circuit="true">  
  41.     <param name="maxLength">15</param>  
  42.     <param name="minLength">6</param>  
  43.     <message>姓名长度必须为${minLength}到${maxLength}之间!</message>  
  44. </field-validator>  
  45. </field>  
  46.   
  47. </validators>  


15.strust.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5.   
  6. <struts>   
  7.     <!-- 如果 注解的action配置改变时候不需要重新启动tomcate -->  
  8.     <constant name="struts.i18n.encoding" value="utf-8"/>  
  9.     <constant name="struts.devMode" value="true"/>    
  10.     <constant name="struts.convention.classes.reload" value="false" />   
  11.       
  12.     <package name="default" extends="struts-default">  
  13.         <action name="innerValidateAction" class="com.sh.action.InnerValidatorAction">  
  14.             <result>/success.jsp</result>  
  15.             <result name="input">/login.jsp</result>  
  16.         </action>   
  17.           
  18.     </package>  
  19.       
  20.   
  21. </struts>  

16.login.jsp 
Html代码   收藏代码
  1. <body>  
  2.  <s:fielderror/>  
  3.   <s:form action="innerValidateAction" method="post" theme="simple">  
  4.     用户名:<s:textfield name="name"/><br/>  
  5.     年龄:<s:textfield name="age"/><br/>  
  6.     <s:submit value="提交"/>  
  7.   </s:form>  
  8.  </body>  


17.访问上 
--http://localhost:8080/Struts2_validator/login.jsp 
如果不输入就可以看到 验证的消息 

18.使用  非字段校验器 InnerValidator1Action-validation.xml 
Xml代码   收藏代码
  1. <!--对于 字符类型的校验 个人发现 如果不定义requiredstring这个类型的校验 下面的 stringlength校验器 不起作用 --->  
  2. <validator type="requiredstring">  
  3.     <param name="fieldName">name</param>  
  4.     <message>姓名不能为空!</message>  
  5. </validator>  
  6.   
  7.  <validator type="stringlength">  
  8.  <param name="fieldName">name</param>  
  9.  <param name="maxLength">15</param>  
  10.  <param name="minLength">6</param>  
  11.  <message>姓名长度为${minLength}到${maxLength}之间!</message>  
  12.  </validator>  



----------复合属性 校验------------  

A:使用字段校验器  
1.pojo 
Java代码   收藏代码
  1. package com.sh.pojo;  
  2.   
  3. public class User {  
  4. private String name;  
  5. private String pwd;  
  6. private String mobile;  
  7.   
  8. //get set  
  9. }  


2.action 
Java代码   收藏代码
  1. package com.sh.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import com.sh.pojo.User;  
  5.   
  6. public class UserAction extends ActionSupport {  
  7.   
  8.     private User user;  
  9. @Override  
  10.     public String execute() throws Exception {  
  11.         // TODO Auto-generated method stub  
  12.         return SUCCESS;  
  13.     }  
  14. //get set  
  15.   
  16. }  


3.编写UserAction-validation.xml 校验文件 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.           
  5. <validators>  
  6. <field name="user.mobile">  
  7.     <field-validator type="requiredstring">  
  8.         <!--去掉空格 -->  
  9.         <param name="trim">true</param>  
  10.         <message>手机号不能为空</message>   
  11.     </field-validator>  
  12.     <field-validator type="regex">  
  13.         <param name="expression"><![CDATA[^1[358]\d{9}$]]></param>  
  14.         <message>手机号格式不正确</message>  
  15.     </field-validator>  
  16. </field>  
  17.   
  18. </validators>  


4.jsp 
Html代码   收藏代码
  1. <body>  
  2.   <s:fielderror/>  
  3.    <s:form action="userAction" method="post" theme="simple">  
  4.     用户名:<s:textfield name="user.name"/><br/>  
  5.     密码:<s:textfield name="user.pwd"/><br/>  
  6.     手机版:<s:textfield name="user.mobile"/><br/>  
  7.     <s:submit value="提交"/>  
  8.    </s:form>  
  9.   </body>  


5.访问 
---http://localhost:8080/Struts2_validator/login2.jsp 
--如果不填 或者格式错误会有提示的 


B使用 visitor 校验复合属性  
1.action 
Java代码   收藏代码
  1. package com.sh.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import com.sh.pojo.User;  
  5.   
  6. public class VisitorAction  extends ActionSupport{  
  7.   
  8.     private User user;  
  9.   
  10.     @Override  
  11.     public String execute() throws Exception {  
  12.         // TODO Auto-generated method stub  
  13.         return SUCCESS;  
  14.     }  
  15. //get set  
  16. }  


2.定义 aciton校验文件 VisitorAction-validation.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.           
  5. <validators>  
  6.     <field name="user">  
  7.         <field-validator type="visitor">  
  8.             <!--复合类型属性的上下文校验名称  -->  
  9.             <param name="context">visitorContext</param>  
  10.             <!--是否添加前缀 如果true 就使用message-->  
  11.             <param name="appendPrefix">true</param>  
  12.             <message>联系人:</message>  
  13.         </field-validator>  
  14.     </field>  
  15. </validators>  


3.定义实体类User 的上下文校验文件User-visitorContext-validation.xml (和User同目录) 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.   
  5. <validators>  
  6.     <field name="name">  
  7.         <field-validator type="requiredstring">  
  8.             <message>姓名不能为空!</message>  
  9.         </field-validator>  
  10.     </field>  
  11.     <field name="age">  
  12.         <field-validator type="int">  
  13.             <param name="min">10</param>  
  14.             <param name="max">100</param>  
  15.             <message>年龄为${min}到${max}之间</message>  
  16.         </field-validator>  
  17.     </field>  
  18. </validators>  


4.login3.jsp 
Html代码   收藏代码
  1. <body>  
  2. <s:fielderror/>  
  3.  <s:form action="visitorAction" method="post" theme="simple">  
  4.     用户名:<s:textfield name="user.name"/><br/>  
  5.     年龄:<s:textfield name="user.age"/><br/>  
  6.     手机版:<s:textfield name="user.mobile"/><br/>  
  7.     <s:submit value="提交"/>  
  8.  </s:form>  
  9. </body>  


5.struts.xml 
Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5.   
  6. <struts>   
  7.     <!-- 如果 注解的action配置改变时候不需要重新启动tomcate -->  
  8.     <constant name="struts.devMode" value="false"/>    
  9.     <constant name="struts.convention.classes.reload" value="true" />   
  10.       
  11.     <package name="default" extends="struts-default">  
  12.         <action name="visitorAction" class="com.sh.action.VisitorAction">  
  13.             <result>/index.jsp</result>  
  14.             <result name="input">/login3.jsp</result>  
  15.         </action>  
  16.     </package>  
  17.       
  18. </struts>  


6.访问 
--http://localhost:8080/Struts2_validator/login3.jsp 
--没有输入的时候会看到验证信息 



---------------集合属性校验---------------  
1.action 
Java代码   收藏代码
  1. package com.sh.action;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.opensymphony.xwork2.ActionSupport;  
  6. import com.sh.pojo.User;  
  7.   
  8. public class VisitorListAction extends ActionSupport {  
  9.   
  10.     private List<User> userlist;  
  11.   
  12.     @Override  
  13.     public String execute() throws Exception {  
  14.         System.out.println("1");  
  15.         return super.execute();  
  16.     }  
  17.      //get set  
  18. }  



2.定义action的校验文 VisitorListAction-validation.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.           
  5. <validators>  
  6.     <field name="userlist">  
  7.         <field-validator type="visitor">  
  8.             <!--复合类型属性的上下文校验名称  -->  
  9.             <param name="context">visitorContext2</param>  
  10.             <!--是否添加前缀 如果true 就使用message-->  
  11.             <param name="appendPrefix">true</param>  
  12.             <message>联系人:</message>  
  13.         </field-validator>  
  14.     </field>  
  15. </validators>  



3.定义集合中的对象 描述属性文件VisitorListAction-conversion.properties 
(命名规则为 ActionNaqme-conversion.properties 具体的在 三十五 章里介绍) 
Java代码   收藏代码
  1. Element_userlist=com.sh.pojo.User  


4.定义集合对象校验文件User-visitorContext2-validation.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.   
  5. <validators>  
  6.     <field name="name">  
  7.         <field-validator type="requiredstring">  
  8.             <message>姓名不能为空!</message>  
  9.         </field-validator>  
  10.     </field>  
  11.     <field name="age">  
  12.         <field-validator type="int">  
  13.             <param name="min">20</param>  
  14.             <param name="max">120</param>  
  15.             <message>年龄为${min}到${max}之间</message>  
  16.         </field-validator>  
  17.     </field>  
  18. </validators>  



5.struts.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5.   
  6. <struts>   
  7.     <!-- 如果 注解的action配置改变时候不需要重新启动tomcate -->  
  8.     <constant name="struts.devMode" value="true"/>    
  9.     <constant name="struts.convention.classes.reload" value="true" />   
  10.       
  11.     <package name="default" extends="struts-default">  
  12.         <action name="visitorListAction" class="com.sh.action.VisitorListAction">  
  13.             <result>/success.jsp</result>  
  14.             <result name="input">/visitorList.jsp</result>        
  15.         </action>  
  16.     </package>  
  17.       
  18. </struts>  



6.visitorList.jsp 
Html代码   收藏代码
  1. <body>  
  2.     <s:fielderror/>  
  3.     <form action="${pageContext.request.contextPath}/visitorListAction.action" method="post">  
  4.         <ul style="list-style:none; text-align: center;">  
  5.             <li style="float: left;width: 155px">用户名</li>  
  6.             <li style="float: left;width: 155px">密码</li>  
  7.             <li style="float: left;width: 155px">年龄</li>  
  8.             <li style="float: left;width: 155px">生日</li>  
  9.             <li style="float: left;width: 155px">地址</li>  
  10.           </ul>  
  11.           <div style="clear: both;"></div>  
  12.         <c:forEach items="new int[]{0,0,0,0}" varStatus="st">  
  13.           <ul style="list-style:none;">  
  14.             <li style="float: left">  
  15.                 <input name="userlist[${st.index}].name"/>  
  16.             </li>  
  17.             <li style="float: left">  
  18.                 <input name="userlist[${st.index}].pwd" />  
  19.             </li>  
  20.             <li style="float: left">  
  21.                 <input name="userlist[${st.index}].age"/>  
  22.             </li>  
  23.             <li style="float: left">  
  24.                 <input name="userlist[${st.index}].birthday" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'});"/>  
  25.             </li>  
  26.             <li>  
  27.                 <input name="userlist[${st.index}].address" />  
  28.             </li>  
  29.           </ul>  
  30.         </c:forEach>  
  31.        <div><input type="submit"/></div>  
  32.   </body>  


7.访问 
--http://localhost:8080/Struts2_validator/visitorList.jsp 
--可以看到所设定的所有被校验的字段 

-------------内置校验器 : required--------  
1.用于要求户必须有值,(非null), 
参数:fieldName:校验的字段名, 如果是字段校验则不用指定该参数。 
2.用户 验证 一个对象是否为空 
3.不能用来校验 string 类型的必填. 如果要校验 则使用 requiredstring。 
4. required要求的是一个对象不能为null,它可以验证像Date类型的对象 
5.requiredstring只是对字符串做限制 
  有参数 maxLength 
         minLength 
         trim 

-------------内置校验器 :conversion-------  
1.action 
Java代码   收藏代码
  1. package com.sh.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class IntAction extends ActionSupport {  
  6.   
  7. private int age;  
  8.   
  9. public int getAge() {  
  10.     return age;  
  11. }  
  12.   
  13. public void setAge(int age) {  
  14.     this.age = age;  
  15. }  
  16.   
  17. @Override  
  18. public String execute() throws Exception {  
  19.     // TODO Auto-generated method stub  
  20.     return SUCCESS;  
  21. }  
  22.   
  23. }  


2,校验文件 IntAction-validation.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.           
  5. <validators>  
  6.     <field name="age">  
  7.         <field-validator type="conversion">  
  8.             <!--复合类型属性的上下文校验名称  -->  
  9.             <param name="repopulateField">true</param>  
  10.             <!--是否添加前缀 如果true 就使用message-->  
  11.             <message>年龄必须为整数:</message>  
  12.         </field-validator>  
  13.     </field>  
  14. </validators>  


3.struts.xml 
Xml代码   收藏代码
  1. <action name="intAction" class="com.sh.action.IntAction">  
  2.     <result name="success">/success.jsp</result>  
  3.         <result name="input">/int.jsp</result>    
  4.     </action>  


4.int.jsp 
Html代码   收藏代码
  1. <body>  
  2.   ==================使用内置校验器  类型转转校验器========================  
  3.   <s:fielderror/>  
  4.    <s:form action="intAction" method="post" theme="simple">  
  5.     用户名:<s:textfield name="userName"/><br/>  
  6.     年龄:<s:textfield name="age"/><br/>  
  7.     <s:submit value="提交"/>  
  8.    </s:form>  
  9.   </body>  


5.访问 
--http://localhost:8383/Struts2_validator/int.jsp 
--如果不输入 就出现 年龄必须为整数:错误信息 
--如果输入 字符  就会出现两个 错误信息  
---其中一个错误信息是 Struts2框架的错误信息为英文 为了解决这个问题 下面可以 改为只能够为 中文 或者 置空 这样就只有一个错误提示 或者 连个中文提示 

6.定义IntAction_zh_CN.properties 
Java代码   收藏代码
  1. invalid.fieldvalue.age=properties文件:年龄必须整数  
  2. #或者xia'm  
  3. #invalid.fieldvalue.age=    


这样就会提示两个中文错误信息 (不过意思是一样的) 


-------------------Date--------------  
1,校验文件 DateAction-validation.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.           
  5. <validators>  
  6.     <field name="age">  
  7.         <field-validator type="date">  
  8.             <!--复合类型属性的上下文校验名称  -->  
  9.             <param name="max">2012-12-20</param>  
  10.                         <param name="min">1997-01-01</param>  
  11.             <message>生日应在 ${min}到${max}之间</message>  
  12.         </field-validator>  
  13.     </field>  
  14. </validators>  


-------------------Emal 和 URL--------------------  
1.EmailUrlAction-validation.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.   
  5. <validators>  
  6.     <field name="email">  
  7.         <field-validator type="email">  
  8.             <message>邮件地址不正确</message>  
  9.         </field-validator>  
  10.     </field>  
  11.     <field name="url">  
  12.         <field-validator type="url">  
  13.             <message>网址格式不正确</message>  
  14.         </field-validator>  
  15.     </field>  
  16. </validators>  


------------------------expression 和 fieldexpression----------  
expression 不能使用字段校验风格配置 
fieldexpression 两种都可以使用 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.   
  5. <validators>  
  6.   
  7. <validator type="expression">  
  8.     <param name="expression">max2 > min2</param>  
  9.     <message>max1要大于 min1</message>  
  10. </validator>  
  11.   
  12. <field name="max2">  
  13. <field-validator type="fieldexpression">  
  14.     <param name="expression">max2 > min2</param>  
  15.     <message>max2要大于 min2</message>  
  16. </field-validator>  
  17. </field>  
  18. </validators>  


--------------------double----------------------  
Xml代码   收藏代码
  1. <field name="sal">  
  2.       
  3.         <!-- 10<=sal<=100 -->  
  4.         <field-validator type="double">  
  5.             <!-- 允许的最大值 -->  
  6.             <param name="minInclusive">10</param>  
  7.             <!-- 允许的最大值 -->  
  8.             <param name="maxInclusive">100</param>  
  9.             <message>${minInclusive}大于等于 薪水 小于等于  ${maxInclusive}</message>           
  10.         </field-validator>  
  11.           
  12.         <!-- 10<sal<100 -->  
  13.         <field-validator type="double">  
  14.             <!-- 允许的最大值 -->  
  15.             <param name="minExclusive">10</param>  
  16.             <!-- 允许的最大值 -->  
  17.             <param name="maxExclusive">100</param>  
  18.             <message>"${minInclusive}大于  薪水 小于 ${maxInclusive}"</message>             
  19.         </field-validator>  
  20.       
  21.     </field>  


-----------------------regex-----------------------  
Xml代码   收藏代码
  1. <field name="mycode">  
  2.         <field-validator type="regex">  
  3.             <param name="expression">  
  4.                 <![CDATA[[0-9]\d{5}(?!\d)]]>  
  5.             </param>  
  6.             <message>不是有效的邮政编码!</message>  
  7.         </field-validator>  
  8.     </field>  


------------------自定义校验器--------------  
1.action 
Java代码   收藏代码
  1. package com.sh.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class MyValidateAction extends ActionSupport {  
  6. private String name;  
  7.   
  8. @Override  
  9. public String execute() throws Exception {  
  10.     // TODO Auto-generated method stub  
  11.     return SUCCESS;  
  12. }  
  13. //get set  
  14. }  


2.自定义一个校验器类 继承相应的 校验接口 就可以了 MyValidate .java 
Java代码   收藏代码
  1. package com.sh.validate;  
  2.   
  3. import com.opensymphony.xwork2.validator.ValidationException;  
  4. import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;  
  5.   
  6. public class MyValidate extends FieldValidatorSupport {  
  7.   
  8.     private String name; //对应<param name="name"/>  
  9.     public void validate(Object object) throws ValidationException {  
  10.         // TODO Auto-generated method stub  
  11.         String fieldName=super.getFieldName();  
  12.         String value=super.getFieldValue(fieldName, object).toString();  
  13.           
  14.         if(!name.equals(value)){  
  15.             super.addFieldError(super.getFieldName(), object);  
  16.         }  
  17.     }  
  18.     public String getName() {  
  19.         return name;  
  20.     }  
  21.     public void setName(String name) {  
  22.         this.name = name;  
  23.     }     
  24. }  


3.在框架中注册自定义的校验器类 编写 validators.xml (文件名固定) 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC  
  3.         "-//Apache Struts//XWork Validator Definition 1.0//EN"  
  4.         "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">  
  5. <validators>  
  6. <validator name="myValidate" class="com.sh.validate.MyValidate"></validator>  
  7.   
  8. </validators>  


4.使用自定义校验器类 编写 校验文件 MyValidateAction-validation.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN"  
  3. "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">  
  4.           
  5. <validators>  
  6.     <field name="name">  
  7.         <field-validator type="myValidate">  
  8.             <param name="name">admin</param>  
  9.             <message>姓名必须为${name}!</message>  
  10.         </field-validator>  
  11.     </field>  
  12. </validators>  


5.struts.xml 
Xml代码   收藏代码
  1. <action name="myValidateAction" class="com.sh.action.MyValidateAction">  
  2.     <result name="success">/success.jsp</result>  
  3.     <result name="input">/myValidator.jsp</result>  
  4. </action>  


6.myValidator.jsp 
Html代码   收藏代码
  1. <body>  
  2. ==================使用内置校验器 自定义校验器的使用========================  
  3. <s:fielderror/>  
  4.  <s:form action="myValidateAction" method="post" theme="simple">  
  5.     用户名:<s:textfield name="name"/><br/>  
  6.     年龄:<s:textfield name="age"/><br/>  
  7.     <s:submit value="提交"/>  
  8.  </s:form>  
  9. </body>  


7.访问 
--http://localhost:8383/Struts2_validator/myValidator.jsp 
--如果输入就会出现  姓名必须为admin!的错误信息




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值