struts2的数据验证之编码方式验证和validation.xml验证

转载自:https://blog.csdn.net/yuhui123999/article/details/51802293

1.编码方式验证

在Action的execute方式执行前会先执行validate方法,如果在validate方法里addFieldError或者addActionError,那么Action将不会执行execu方法,并且会直接跳转到一个名为“input”的result视图。推荐对每个需要数据验证的方法创建validate加上自定义方法的名称的一个验证方式,如自定义方法login,则创建validateLogin验证方法。

Action

[java]  view plain  copy
  1. package com.zucc.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import com.opensymphony.xwork2.ModelDriven;  
  5. import com.zucc.model.User;  
  6.   
  7. public class UserAction extends ActionSupport implements ModelDriven<User>{  
  8.       
  9.     private User user;  
  10.       
  11.     @Override  
  12.     public String execute() throws Exception {  
  13.         System.out.println("UserAction execute.....");  
  14.         System.out.println("username:"+user.getUsername());  
  15.         System.out.println("password:"+user.getPassword());  
  16.         System.out.println("rePassword:"+user.getRePassword());  
  17.         System.out.println("age:"+user.getAge());  
  18.         System.out.println("do register....");  
  19.         return SUCCESS;  
  20.     }  
  21.   
  22.     @Override  
  23.     public User getModel() {  
  24.         this.user = new User();  
  25.         return this.user;  
  26.     }  
  27.       
  28.     @Override  
  29.     public void validate() {  
  30.         System.out.println("UserAction validate....");  
  31.         if(user.getUsername()==null||user.getUsername().trim().equals("")){  
  32.             this.addFieldError("username""用户账号不能为空");  
  33.         }  
  34.         if(user.getPassword()==null||user.getPassword().trim().equals("")){  
  35.             this.addFieldError("password""密码不能为空");  
  36.         }  
  37.         if(user.getRePassword()==null||user.getRePassword().trim().equals("")){  
  38.             this.addFieldError("rePassword""确认密码不能为空");  
  39.         }  
  40.         if(!(user.getPassword().equals(user.getRePassword()))){  
  41.             this.addFieldError("rePassword""两次输入密码不一致");  
  42.         }  
  43.         if(user.getAge()<=0||user.getAge()>150){  
  44.             this.addFieldError("age""年龄不合法");  
  45.         }  
  46.     }  
  47. }  



验证不通过跳转到一个名为“input”的result视图,在struts.xml中配置

struts.xml

[html]  view plain  copy
  1. <struts>  
  2.     <constant name="struts.enable.DynamicMethodInvocation" value="true" />  
  3.     <constant name="struts.devMode" value="true" />  
  4.       
  5.     <package name="default" namespace="/" extends="struts-default">  
  6.   
  7.         <action name="user_register" class="com.zucc.action.UserAction" method="register">  
  8.             <result>/Hello.jsp</result>  
  9.             <result name="input">/register.jsp</result>  
  10.         </action>  
  11.     </package>  
  12. </struts>  

在表单上显示addFieldError中的信息有三种方式,一种是使用EL,一种是使用struts-tags标签,一种是完全使用struts-tags标签

使用EL

[html]  view plain  copy
  1. <body>  
  2.     <h1>用户注册</h1>  
  3.     <div>${fieldErrors['password'][0]}</div>  
  4.     <div>${fieldErrors['rePassword'][0]}</div>  
  5.     <div>${fieldErrors['age'][0]}</div></span>  
  6.     <form action="user_register" method="post">  
  7.         帐号:<input type="text" name="username"><br/>   
  8.         密码:<input type="password" name="password"><br/>  
  9.         确认密码:<input type="password" name="rePassword"><br/>  
  10.         年龄:<input type="text" name="age"><br/>  
  11.         <input type="submit" value="提交">  
  12.     </form>  
  13.     <hr/>  
  14. </body>  

使用struts-tags标签

[html]  view plain  copy
  1. <%@ taglib prefix="s" uri="/struts-tags" %>  
  2. <body>  
  3.     <h1>用户注册</h1>  
  4.     <div><s:fielderror></s:fielderror></div>  
  5.     <form action="user_register" method="post">  
  6.         帐号:<input type="text" name="username"><br/>   
  7.         密码:<input type="password" name="password"><br/>  
  8.         确认密码:<input type="password" name="rePassword"><br/>  
  9.         年龄:<input type="text" name="age"><br/>  
  10.         <input type="submit" value="提交">  
  11.     </form>  
  12. </body>  


完全使用struts-tags标签

[html]  view plain  copy
  1. <%@ taglib prefix="s" uri="/struts-tags" %>  
  2. <body>  
  3.     <h1>用户注册</h1>  
  4.     <s:form action="user_register" method="post">  
  5.         <s:textfield name="username" label="帐号"/>  
  6.         <s:password name="password" label="密码"/>  
  7.         <s:password name="rePassword" label="确认密码"/>  
  8.         <s:textfield name="age" label="年龄"/>  
  9.         <s:submit value="提交"/>  
  10.     </s:form>  
  11. </body>  


2.使用validation.xml验证
使用XML对Action方法进行校验方式有两种:

一种是对Action的所有方法进行校验,validation.xml的名字是ActionClassName-validation.xml,其ActionClassName为action的类名,-valication为固定写法,如UserAction-validation.xml;

另一种是对Action指定方法进行校验,validation.xml的名字是ActionClassName-AccessActionName-validation.xml,其中ActionClassName为action的类名,AccessActionName为指定Action的方法在struts.xml的 action name,-valication为固定写法,如UserAction-user_register-validation.xml


Action-UserAction

[java]  view plain  copy
  1. package com.zucc.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import com.opensymphony.xwork2.ModelDriven;  
  5. import com.zucc.model.User;  
  6.   
  7. public class UserAction extends ActionSupport implements ModelDriven<User>{  
  8.       
  9.     private User user;  
  10.       
  11.     @Override  
  12.     public String execute() throws Exception {  
  13.         System.out.println("UserAction execute.....");  
  14.         System.out.println("username:"+user.getUsername());  
  15.         System.out.println("password:"+user.getPassword());  
  16.         System.out.println("rePassword:"+user.getRePassword());  
  17.         System.out.println("age:"+user.getAge());  
  18.         System.out.println("do register....");  
  19.         return SUCCESS;  
  20.     }  
  21.   
  22.     @Override  
  23.     public User getModel() {  
  24.         this.user = new User();  
  25.         return this.user;  
  26.     }  
  27.       
  28.     public String register() throws Exception{  
  29.         System.out.println("UserAction register....");  
  30.         return SUCCESS;  
  31.           
  32.     }  
  33. }  

如果validation.xml的名字是UserAction-validation.xml,那就是对UserAction中的所有方法进行验证;如果validation.xml的名字是UserAction-user_register-validation.xml,那就只是对UserAction中的register方法进行验证。

user_register是因为struts.xml的action name是user_register,如下面的struts.xml

struts.xml

[html]  view plain  copy
  1. <struts>  
  2.     <constant name="struts.enable.DynamicMethodInvocation" value="true" />  
  3.     <constant name="struts.devMode" value="true" />  
  4.       
  5.     <package name="default" namespace="/" extends="struts-default">  
  6.   
  7.         <action name="user_register" class="com.zucc.action.UserAction" method="register">  
  8.             <result>/Hello.jsp</result>  
  9.         </action>  
  10.     </package>  
  11. </struts>  


validation.xml中的写法有两种方式,一种是属性field,另一种是使用验证器validator

属性field

[html]  view plain  copy
  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">  
  5.           
  6. <validators>  
  7.     <field name="username">  
  8.         <field-validator type="required">  
  9.             <message>用户名不能为空</message>  
  10.         </field-validator>  
  11.         <field-validator type="requiredstring">  
  12.             <message>用户名不能为空</message>  
  13.         </field-validator>  
  14.     </field>  
  15.       
  16.     <field name="age">  
  17.         <field-validator type="int">  
  18.             <param name="max">150</param>  
  19.             <param name="min">1</param>  
  20.             <message>年龄必须介于1-150</message>  
  21.         </field-validator>  
  22.     </field>  
  23.       
  24.     <field name="password">  
  25.         <field-validator type="requiredstring">  
  26.             <message>密码不能为空</message>  
  27.         </field-validator>  
  28.     </field>  
  29.       
  30.     <field name="rePassword">  
  31.         <field-validator type="requiredstring">  
  32.             <message>确认密码不能为空</message>  
  33.         </field-validator>  
  34.     </field>  
  35.       
  36.     <field name="rePassword">  
  37.         <field-validator type="fieldexpression">  
  38.             <param name="expression">password.equals(rePassword)</param>  
  39.             <message>密码必须一致</message>  
  40.         </field-validator>  
  41.     </field>  
  42.       
  43. </validators>  


验证器validator

[html]  view plain  copy
  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">  
  5.           
  6. <validators>  
  7.   
  8.     <validator type="requiredstring">  
  9.         <param name="fieldName">username</param>  
  10.         <message>用户名不能为空</message>  
  11.     </validator>  
  12.       
  13.     <validator type="requiredstring">  
  14.         <param name="fieldName">password</param>  
  15.         <message>密码不能为空</message>  
  16.     </validator>  
  17.       
  18.     <validator type="requiredstring">  
  19.         <param name="fieldName">rePassword</param>  
  20.         <message>确认密码不能为空</message>  
  21.     </validator>  
  22.       
  23.     <validator type="fieldexpression">  
  24.         <param name="expression">password.equals(rePassword)</param>  
  25.         <param name="fieldName">rePassword</param>  
  26.         <message>密码必须一致</message>  
  27.     </validator>  
  28.       
  29.     <validator type="int">  
  30.         <param name="fieldName">age</param>  
  31.         <param name="max">150</param>  
  32.         <param name="min">1</param>  
  33.         <message>年龄必须介于1-150</message>  
  34.     </validator>  
  35.       
  36. </validators>  

猜你喜欢

转载自blog.csdn.net/dfsethtdfd/article/details/80677027
今日推荐