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>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章