(八)struts2之表單驗證

1. Struts2中的輸入校驗

2. 編碼方式校驗
  1) Action一定要繼承自ActionSupport
  2) 針對某個要進行校驗的請求處理方法編寫一個 public void validateXxx()方法,在方法內部進行表單數據校驗.
  3) 也可針對所有的請求處理方法編寫public void validate()方法。
  4) 在校驗方法中,可以通過addFieldError()方法來添加字段校驗錯誤消息。
  5) 當校驗失敗時,Struts框架會自動跳轉到name爲input的Result頁面。在校驗失敗頁面中,可以使用<s:fielderror/>來顯示錯誤消息
  6) 簡單,靈活。但重用性不高。
 
3. XML配置方式校驗。在編碼方式之前被執行。
  1) 針對要校驗的Action類,在同包下編寫一個名爲:Action類名-validation.xml校驗規則文件。
  2) 在校驗規則文件中添加校驗規則:具體的校驗器名,參數可參看Struts2的reference或Struts2的API。
     a) Field校驗:針對Action類中每個非自定義類型的Field進行校驗的規則。
    <field name="要校驗的Field名">
     <field-validator type="校驗規則器名" short-circuit="是否要短路徑校驗(默認是false)">
         <param name="校驗器要使用的參數名">值</param>
            <message>校驗失敗時的提示消息</message>
  </field-validator>
  <!-- 還可添加其它的校驗規則 -->
 </field>
 
     b) 非Field校驗:針對Action類的某些Field使用OGNL表達進行組合校驗。
    <validator type="fieldexpression">
  <param name="fieldName">pwd</param>
     <param name="fieldName">pwd2</param>
     <param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表達式 -->
     <message>確認密碼和密碼輸入不一致</message>
 </validator>
 
     c) visitor校驗:主要是用來校驗Action類中的自定義類型Field。(針對使用模型驅動方式時)
       i) 在Action類的的校驗規則文件中針對自定義類型Field使用visitor校驗規則。
    <!-- 針對自定義Field使用visitor校驗 -->
 <field name="user">
  <field-validator type="required" short-circuit="true">
            <message>用戶的信息必填</message><!-- 消息前綴 -->
  </field-validator>
  <field-validator type="visitor"><!-- 指定爲visitor校驗規則 -->
   <param name="context">userContext</param><!-- 指定本visitor校驗的上下文名 -->
            <param name="appendPrefix">true</param><!-- 是否要添加校驗失敗消息的前綴 -->
            <message>用戶的</message><!-- 消息前綴 -->
  </field-validator>
 </field>
    ii) 針對visitor的Field編寫一個校驗規則文件.文件名爲: visitor字段類型名[-visitor校驗的上下文名]-validation.xml. 例如: 本例中的文件名爲User-userContext-validation.xml
                  注意: 此文件要存放到visitor字段類型所在的包下.
    iii) 在visitor的Field校驗規則文件中針對要校驗的Field添加校驗規則.
   3) 在校驗失敗頁面(名爲input的result頁面)中,可以使用<s:fielderror/>來顯示錯誤消息。
   4) 默認情況下,XML的校驗規則對Action中所有的請求處理方法生效.此時應該只針對每個要校驗的請求處理方法指定校驗。有兩種方式:
      i) 只爲Action中的指定方法指定校驗規則文件,配置文件命名爲:Action類型名-別名-validation.xml,
                      別名是要校驗的方法對應的Action標籤的name屬性值。
                      如:UserAction在struts2.xml的配置爲:
    <package name="my" extends="struts-default" namespace="/">
  <action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}">
   <result name="success">/info.jsp</result>
   <result name="input">/user_{1}.jsp</result>
  </action>
    </package>             
                ● UserAction中有registe方法和login方法,要對registe方法進行校驗,則它的校驗規則文件名爲:UserAction-user_registe-validation.xml。
                 ● 如果使用visitor校驗器,必需指定visitor校驗的上下文名。
      ii) 在校驗攔截器中指定要驗證的方法。不太實用。
   <action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}">
    <result name="success">/info.jsp</result>
    <result name="input">/user_{1}.jsp</result>
     <interceptor-ref name="defaultStack">
        <!-- 給校驗攔截器指定不進行校驗的方法列表:用逗號隔開 -->
        <param name="validation.excludeMethods">*</param>
        <!-- 給校驗攔截器指定要進行校驗的方法列表:用逗號隔開 -->
        <param name="validation.includeMethods">regist</param>
      </interceptor-ref>
   </action>
   5) 同時使用客戶端校驗和服務器端校驗
      i) 設置<s:form>標籤的validate屬性:
         false:默認值。校驗框架只執行服務器端校驗。
         true:先執行客戶端校驗,然後再執行服務器端校驗。
         form標籤會根據你在服務器端配置的驗證規則生成對應的JavaScript驗證代碼。
                      目前支持的內置校驗器:required、requiredstring、stringlength、regex validator、email、url、int、double
      ii) 不太好用,不建議使用。建議使用jQuery進行頁面表單校驗。
   6) 自定義校驗器:
      i) 繼承自FieldValidatorSupport抽象類。重寫validate(Object obj)方法
      ii) 註冊校驗器類. 在應用程序的classpath下新建一校驗器註冊文件。名爲validators.xml,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "
http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
  <validator name="校驗器名" class="校驗器類的全限定名"/> 
</validators>

 

4. Annotation方式校驗: Struts2提供了註解的方式校驗
  1) @Validation 指明這個類或者接口將使用基於註解的校驗。Struts2.1中已被標識爲過時。
  2) @Validations() 在同一個方法上要使用多個註解校驗時。
  3) @SkipValidation 指定某個方法不需要校驗。否則所有方法都會使用校驗。也可以在檢驗攔截器中使用validateAnnotatedMethodOnly
  4) 13個內置校驗器的註解版本:(注:這些註解都只能用在方法級別上) 具體參數參見Struts2的API或Reference。
@RequiredFieldValidator
@RequiredStringValidator
@StringLengthFieldValidator
@IntRangeFieldValidator
@DoubleRangeFieldValidator
@DateRangeFieldValidator
@ExpressionValidator
@FieldExpressionValidator
@RegexFieldValidator
@EmailValidator
@UrlValidator
@VisitorFieldValidator
@ConversionErrorFieldValidator

 

 

 

 

 

第一個示例:XML配置式校驗器---註冊頁面
acc_registe.jsp

Html代碼  收藏代碼
  1. <span style="font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ taglib uri="/struts-tags" prefix="s" %>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>Struts2中基於XML配置式的校驗器使用示例</title>  
  7.   </head>  
  8.   <body>  
  9. <h3>XML配置式校驗器---註冊頁面</h3><hr/>  
  10.   
  11. <div style="color:red"><s:fielderror/></div>  
  12. <form action="acc_registe.action" method="post">  
  13.     <table>  
  14.         <tr>  
  15.             <td>ID</td>  
  16.             <td><input type="text" name="id" value="${param.id}"/></td>  
  17.         </tr>  
  18.         <tr>  
  19.             <td>登錄名</td>  
  20.             <td><input type="text" name="name" value="${param.name}"/></td>  
  21.         </tr>  
  22.         <tr>  
  23.             <td>密碼</td>  
  24.             <td><input type="password" name="pwd"/></td>  
  25.         </tr>  
  26.         <tr>  
  27.             <td>重複密碼</td>  
  28.             <td><input type="password" name="pwd2"/></td>  
  29.         </tr>  
  30.         <tr>  
  31.             <td>時間</td>  
  32.             <td><input type="text" name="registed_date" value="${param.registed_date}"/></td>  
  33.         </tr>  
  34.         <tr>  
  35.             <td>email</td>  
  36.             <td><input type="text" name="email" value="${param.email}"/></td>  
  37.         </tr>  
  38.         <tr>  
  39.             <td>考試成績</td>  
  40.             <td><input type="text" name="score" value="${param.score}"/></td>  
  41.         </tr>  
  42.         <tr>  
  43.             <td colspan="2"><input type="submit" value=" 提交 "/></td>  
  44.         </tr>  
  45.     </table>  
  46. </form>  
  47.   </body>  
  48. </html></span>  

 src/struts.xml

Java代碼  收藏代碼
  1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  5.   
  6. <struts>  
  7.     <!-- 請求參數的編碼方式 -->  
  8.     <constant name="struts.i18n.encoding" value="UTF-8"/>  
  9.     <!-- 指定被struts2處理的請求後綴類型。多個用逗號隔開 -->  
  10.     <constant name="struts.action.extension" value="action,do,go,xkk"/>  
  11.     <!-- 當struts.xml改動後,是否重新加載。默認值爲false(生產環境下使用),開發階段最好打開  -->  
  12.     <constant name="struts.configuration.xml.reload" value="true"/>  
  13.     <!-- 是否使用struts的開發模式。開發模式會有更多的調試信息。默認值爲false(生產環境下使用),開發階段最好打開  -->  
  14.     <constant name="struts.devMode" value="false"/>  
  15.     <!-- 設置瀏覽器是否緩存靜態內容。默認值爲true(生產環境下使用),開發階段最好關閉  -->  
  16.     <constant name="struts.serve.static.browserCache" value="false" />  
  17.     <!-- 是否允許在OGNL表達式中調用靜態方法,默認值爲false -->  
  18.     <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>  
  19.       
  20.     <!-- 指定由spring負責action對象的創建   
  21.     <constant name="struts.objectFactory" value="spring" />  
  22.     -->  
  23.     <!-- 是否開啓動態方法調用 -->  
  24.     <constant name="struts.enable.DynamicMethodInvocation" value="false"/>  
  25.       
  26.     <package name="my" extends="struts-default" namespace="/">  
  27.         <action name="acc_*" class="com.javacrazyer.web.action.AccountAction" method="{1}">  
  28.             <result name="success">/info.jsp</result>  
  29.             <result name="input">/acc_{1}.jsp</result>  
  30.         </action>  
  31.           
  32.     </package>  
  33.       
  34. </struts>  
  35. </span>  

 

AccountAction.java

Java代碼  收藏代碼
  1. <span style="font-size: medium;">package com.javacrazyer.web.action;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import com.opensymphony.xwork2.ActionSupport;  
  6.   
  7.   
  8. public class AccountAction extends ActionSupport {  
  9.     private static final long serialVersionUID = -1418893621512812472L;  
  10.     private Integer id;  
  11.     private String name;  
  12.     private String pwd;  
  13.     private String pwd2;  
  14.     private Double score;  
  15.     private Date registed_date;  
  16.     private String email;  
  17.       
  18.     public String registe() throws Exception{  
  19.         System.out.println("registe-------------------");  
  20.         return SUCCESS;  
  21.     }  
  22.       
  23.     public String login()throws Exception{  
  24.         return SUCCESS;  
  25.     }  
  26.       
  27.     public Integer getId() {  
  28.         return id;  
  29.     }  
  30.     public void setId(Integer id) {  
  31.         this.id = id;  
  32.     }  
  33.     public String getName() {  
  34.         return name;  
  35.     }  
  36.     public void setName(String name) {  
  37.         this.name = name;  
  38.     }  
  39.     public Double getScore() {  
  40.         return score;  
  41.     }  
  42.     public void setScore(Double score) {  
  43.         this.score = score;  
  44.     }  
  45.     public Date getRegisted_date() {  
  46.         return registed_date;  
  47.     }  
  48.     public void setRegisted_date(Date registedDate) {  
  49.         registed_date = registedDate;  
  50.     }  
  51.     public String getEmail() {  
  52.         return email;  
  53.     }  
  54.     public void setEmail(String email) {  
  55.         this.email = email;  
  56.     }  
  57.   
  58.     public String getPwd() {  
  59.         return pwd;  
  60.     }  
  61.   
  62.     public void setPwd(String pwd) {  
  63.         this.pwd = pwd;  
  64.     }  
  65.   
  66.     public String getPwd2() {  
  67.         return pwd2;  
  68.     }  
  69.   
  70.     public void setPwd2(String pwd2) {  
  71.         this.pwd2 = pwd2;  
  72.     }  
  73. }</span>  

 AccountAction-validation.xml [與AccountAction同目錄]

Java代碼  收藏代碼
  1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC   
  3.     "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  4.     "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  5. <validators>  
  6.     <!-- 字段校驗 -->  
  7.     <field name="id">  
  8.         <field-validator type="required" short-circuit="true">  
  9.             <message>ID必填的</message>  
  10.         </field-validator>  
  11.         <field-validator type="int">  
  12.             <param name="min">20</param>  
  13.             <param name="max">50</param>  
  14.             <message>ID必須在 ${min} 到 ${max} 之間</message>  
  15.         </field-validator>  
  16.     </field>  
  17.     <field name="name">  
  18.         <field-validator type="requiredstring" short-circuit="true">  
  19.             <message>姓名是必填的</message>  
  20.         </field-validator>  
  21.         <field-validator type="regex">  
  22.             <param name="expression"><![CDATA[(^[a-zA-Z_]\w{3,9}$)]]></param>  
  23.             <message>姓名不合法</message>  
  24.         </field-validator>  
  25.     </field>  
  26.     <field name="pwd">  
  27.         <field-validator type="requiredstring" short-circuit="true">  
  28.             <message>密碼是必填的</message>  
  29.         </field-validator>  
  30.     </field>  
  31.       
  32.     <!-- 非字段校驗 -->  
  33.     <validator type="fieldexpression">  
  34.         <param name="fieldName">pwd</param>  
  35.         <param name="fieldName">pwd2</param>  
  36.         <param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表達式 -->  
  37.         <message>確認密碼和密碼輸入不一致</message>  
  38.     </validator>  
  39.       
  40.     <field name="score">  
  41.         <field-validator type="double">  
  42.              <param name="minInclusive">0.0</param>  
  43.                <param name="maxInclusive">100.0</param>  
  44.                <message>成績必須在${minInclusive}和${maxInclusive}之間</message>  
  45.         </field-validator>  
  46.     </field>  
  47.     <field name="email" >  
  48.         <field-validator type="regex">  
  49.              <param name="expression"><![CDATA[(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\.com)|(\.cn)|(\.net)|(\.org)|(\.info)|(\.edu)|(\.mil)|(\.gov)|(\.biz)|(\.ws)|(\.us)|(\.tv)|(\.cc)|(\.aero)|(\.arpa)|(\.coop)|(\.int)|(\.jobs)|(\.museum)|(\.name)|(\.pro)|(\.travel)|(\.nato)|(\..{2,3})|(\..{2,3}\..{2,3}))$)]]></param>  
  50.              <message>郵箱不合法</message>  
  51.         </field-validator>  
  52.     </field>  
  53.       
  54.     <field name="registed_date">  
  55.         <field-validator type="date">  
  56.              <param name="min">1970-01-01</param>  
  57.              <param name="max">2019-01-01</param>  
  58.              <message>註冊日期不合法</message>  
  59.         </field-validator>  
  60.     </field>  
  61. </validators></span>  

 

 

第二個示例:XML配置式校驗器---登錄和註冊頁面

user_login.jsp

Html代碼  收藏代碼
  1. <span style="font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ taglib uri="/struts-tags" prefix="s" %>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>Struts2中基於XML配置式的校驗器使用示例</title>  
  7.   </head>  
  8.   <body>  
  9. <h3>XML配置式校驗器---登錄頁面</h3><hr/>  
  10. <div style="color:red"><s:fielderror/></div>  
  11. <form action="user_login.action" method="post">  
  12.     <table>  
  13.         <tr>  
  14.             <td>登錄名</td>  
  15.             <td><input type="text" name="user.name" value="${param['user.name']}"/></td>  
  16.         </tr>  
  17.         <tr>  
  18.             <td>密碼</td>  
  19.             <td><input type="password" name="user.pwd"/></td>  
  20.         </tr>  
  21.         <tr><td colspan="2"><input type="submit" value=" 提交 "/></td></tr>  
  22.     </table>  
  23. </form>  
  24.   </body>  
  25. </html></span>  

 
user_registe.jsp

Html代碼  收藏代碼
  1. <span style="font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ taglib uri="/struts-tags" prefix="s" %>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>Struts2中基於XML配置式的校驗器使用示例</title>  
  7.   </head>  
  8.   <body>  
  9. <h3>XML配置式校驗器---註冊頁面</h3><hr/>  
  10.   
  11. <div style="color:red"><s:fielderror/></div>  
  12. <form action="user_registe.action" method="post">  
  13.     <table>  
  14.         <tr>  
  15.             <td>ID</td>  
  16.             <td><input type="text" name="user.id" value="${param['user.id']}"/></td>  
  17.         </tr>  
  18.         <tr>  
  19.             <td>登錄名</td>  
  20.             <td><input type="text" name="user.name" value="${param['user.name']}"/></td>  
  21.         </tr>  
  22.         <tr>  
  23.             <td>密碼</td>  
  24.             <td><input type="password" name="user.pwd"/></td>  
  25.         </tr>  
  26.         <tr>  
  27.             <td>重複密碼</td>  
  28.             <td><input type="password" name="user.pwd2"/></td>  
  29.         </tr>  
  30.         <tr>  
  31.             <td>時間</td>  
  32.             <td><input type="text" name="user.registed_date" value="${param['user.registed_date']}"/></td>  
  33.         </tr>  
  34.         <tr>  
  35.             <td>email</td>  
  36.             <td><input type="text" name="user.email" value="${param['user.email']}"/></td>  
  37.         </tr>  
  38.         <tr>  
  39.             <td>考試成績</td>  
  40.             <td><input type="text" name="user.score" value="${param['user.score']}"/></td>  
  41.         </tr>  
  42.         <tr>  
  43.             <td colspan="2"><input type="submit" value=" 提交 "/></td>  
  44.         </tr>  
  45.     </table>  
  46. </form>  
  47.   </body>  
  48. </html></span>  

 

src/struts.xml

Java代碼  收藏代碼
  1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  5.   
  6. <struts>  
  7.     <!-- 請求參數的編碼方式 -->  
  8.     <constant name="struts.i18n.encoding" value="UTF-8"/>  
  9.     <!-- 指定被struts2處理的請求後綴類型。多個用逗號隔開 -->  
  10.     <constant name="struts.action.extension" value="action,do,go,xkk"/>  
  11.     <!-- 當struts.xml改動後,是否重新加載。默認值爲false(生產環境下使用),開發階段最好打開  -->  
  12.     <constant name="struts.configuration.xml.reload" value="true"/>  
  13.     <!-- 是否使用struts的開發模式。開發模式會有更多的調試信息。默認值爲false(生產環境下使用),開發階段最好打開  -->  
  14.     <constant name="struts.devMode" value="false"/>  
  15.     <!-- 設置瀏覽器是否緩存靜態內容。默認值爲true(生產環境下使用),開發階段最好關閉  -->  
  16.     <constant name="struts.serve.static.browserCache" value="false" />  
  17.     <!-- 是否允許在OGNL表達式中調用靜態方法,默認值爲false -->  
  18.     <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>  
  19.       
  20.     <!-- 指定由spring負責action對象的創建   
  21.     <constant name="struts.objectFactory" value="spring" />  
  22.     -->  
  23.     <!-- 是否開啓動態方法調用 -->  
  24.     <constant name="struts.enable.DynamicMethodInvocation" value="false"/>  
  25.       
  26.     <package name="my" extends="struts-default" namespace="/">  
  27.         <action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}">  
  28.             <result name="success">/info.jsp</result>  
  29.             <result name="input">/user_{1}.jsp</result>  
  30.         </action>  
  31.     </package>  
  32.       
  33. </struts>  
  34. </span>  

 

UserAction.java

Java代碼  收藏代碼
  1. <span style="font-size: medium;">package com.javacrazyer.web.action;  
  2.   
  3.   
  4. import com.javacrazyer.domain.User;  
  5. import com.opensymphony.xwork2.ActionSupport;  
  6.   
  7.   
  8. public class UserAction extends ActionSupport {  
  9.     private static final long serialVersionUID = -2554018432709689579L;  
  10.     private User user; //自定義類型Field  
  11.       
  12.       
  13.       
  14.     public String registe() throws Exception{  
  15.         System.out.println("registe======================");  
  16.         return SUCCESS;  
  17.     }  
  18.       
  19.     public String login() throws Exception{  
  20.         return SUCCESS;  
  21.     }  
  22.     /* 
  23.     public void validate(){ 
  24.         System.out.println("調用validate方法"); 
  25.     } 
  26.      
  27.     //執行exceute方法前調用 
  28.     public void validateRegiste(){ 
  29.         System.out.println("調用validateRegiste方法"); 
  30.         String lname = user.getLoginname(); 
  31.          if(null != lname && !lname.trim().matches("[a-zA-Z_]\\w{3,19}")){ 
  32.                 this.addFieldError("loginname", "用戶名不能爲空,且只能由4-20個字母和數字組成"); 
  33.                 //this.addActionError("用戶名不能爲空,且只能由4-20個字母和數字組成"); 
  34.         } 
  35.     } 
  36.      
  37.     public void validateLogin(){ 
  38.         System.out.println("調用validateLogin方法"); 
  39.     } 
  40. */  
  41.     public User getUser() {  
  42.         return user;  
  43.     }  
  44.   
  45.     public void setUser(User user) {  
  46.         this.user = user;  
  47.     }  
  48.       
  49. }</span>  

 

UserAction-user_login-validation.xml

Java代碼  收藏代碼
  1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC   
  3.     "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  4.     "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  5. <validators>  
  6.     <!-- 針對自定義Field使用visitor校驗 -->  
  7.     <field name="user">  
  8.         <field-validator type="required" short-circuit="true">  
  9.             <message>用戶的信息必填</message><!-- 消息前綴 -->  
  10.         </field-validator>  
  11.         <field-validator type="visitor">  
  12.             <param name="context">userLoginContext</param><!-- 指定本visitor校驗的上下文 -->  
  13.             <param name="appendPrefix">true</param><!-- 是否要添加校驗失敗消息的前綴 -->  
  14.             <message>用戶的</message><!-- 消息前綴 -->  
  15.         </field-validator>  
  16.     </field>  
  17. </validators></span>  

 

UserAction-user_registe-validation.xml

Java代碼  收藏代碼
  1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC   
  3.     "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  4.     "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  5. <validators>  
  6.     <!-- 針對自定義Field使用visitor校驗 -->  
  7.     <field name="user">  
  8.         <field-validator type="required" short-circuit="true">  
  9.             <message>用戶的信息必填</message><!-- 消息前綴 -->  
  10.         </field-validator>  
  11.         <field-validator type="visitor">  
  12.             <param name="context">userContext</param><!-- 指定本visitor校驗的上下文 -->  
  13.             <param name="appendPrefix">true</param><!-- 是否要添加校驗失敗消息的前綴 -->  
  14.             <message>用戶的</message><!-- 消息前綴 -->  
  15.         </field-validator>  
  16.     </field>  
  17. </validators></span>  

 

 

第三個示例:註解方式校驗器---註冊頁面

acc2_registe.jsp

Html代碼  收藏代碼
  1. <span style="font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ taglib uri="/struts-tags" prefix="s" %>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>Struts2中基於Annotation配置式的校驗器使用示例</title>  
  7.   </head>  
  8.   <body>  
  9. <h3>Annotation配置式校驗器---註冊頁面</h3><hr/>  
  10.   
  11. <div style="color:red"><s:fielderror/></div>  
  12. <form action="acc2_registe.action" method="post">  
  13.     <table>  
  14.         <tr>  
  15.             <td>ID</td>  
  16.             <td><input type="text" name="id" value="${param.id}"/></td>  
  17.         </tr>  
  18.         <tr>  
  19.             <td>登錄名</td>  
  20.             <td><input type="text" name="name" value="${param.name}"/></td>  
  21.         </tr>  
  22.         <tr>  
  23.             <td>密碼</td>  
  24.             <td><input type="password" name="pwd"/></td>  
  25.         </tr>  
  26.         <tr>  
  27.             <td>重複密碼</td>  
  28.             <td><input type="password" name="pwd2"/></td>  
  29.         </tr>  
  30.         <tr>  
  31.             <td>時間</td>  
  32.             <td><input type="text" name="registed_date" value="${param.registed_date}"/></td>  
  33.         </tr>  
  34.         <tr>  
  35.             <td>email</td>  
  36.             <td><input type="text" name="email" value="${param.email}"/></td>  
  37.         </tr>  
  38.         <tr>  
  39.             <td>考試成績</td>  
  40.             <td><input type="text" name="score" value="${param.score}"/></td>  
  41.         </tr>  
  42.         <tr>  
  43.             <td colspan="2"><input type="submit" value=" 提交 "/></td>  
  44.         </tr>  
  45.     </table>  
  46. </form>  
  47.   </body>  
  48. </html></span>  

 

src/struts.xml

Java代碼  收藏代碼
  1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  5.   
  6. <struts>  
  7.     <!-- 請求參數的編碼方式 -->  
  8.     <constant name="struts.i18n.encoding" value="UTF-8"/>  
  9.     <!-- 指定被struts2處理的請求後綴類型。多個用逗號隔開 -->  
  10.     <constant name="struts.action.extension" value="action,do,go,xkk"/>  
  11.     <!-- 當struts.xml改動後,是否重新加載。默認值爲false(生產環境下使用),開發階段最好打開  -->  
  12.     <constant name="struts.configuration.xml.reload" value="true"/>  
  13.     <!-- 是否使用struts的開發模式。開發模式會有更多的調試信息。默認值爲false(生產環境下使用),開發階段最好打開  -->  
  14.     <constant name="struts.devMode" value="false"/>  
  15.     <!-- 設置瀏覽器是否緩存靜態內容。默認值爲true(生產環境下使用),開發階段最好關閉  -->  
  16.     <constant name="struts.serve.static.browserCache" value="false" />  
  17.     <!-- 是否允許在OGNL表達式中調用靜態方法,默認值爲false -->  
  18.     <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>  
  19.       
  20.     <!-- 指定由spring負責action對象的創建   
  21.     <constant name="struts.objectFactory" value="spring" />  
  22.     -->  
  23.     <!-- 是否開啓動態方法調用 -->  
  24.     <constant name="struts.enable.DynamicMethodInvocation" value="false"/>  
  25.       
  26.     <package name="my" extends="struts-default" namespace="/">  
  27.             <action name="acc2_*" class="com.javacrazyer.web.action.Account2Action" method="{1}">  
  28.             <result name="success">/info.jsp</result>  
  29.             <result name="input">/acc2_{1}.jsp</result>  
  30.         </action>  
  31.     </package>  
  32.       
  33. </struts>  
  34. </span>  

 

Account2Action.java

Java代碼  收藏代碼
  1. <span style="font-size: medium;">package com.javacrazyer.web.action;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.apache.struts2.interceptor.validation.SkipValidation;  
  6.   
  7. import com.opensymphony.xwork2.ActionSupport;  
  8. import com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator;  
  9. import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;  
  10. import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;  
  11. import com.opensymphony.xwork2.validator.annotations.Validations;  
  12. import com.opensymphony.xwork2.validator.annotations.ValidatorType;  
  13.   
  14. /** 
  15.  * 使用註解來配置校驗的示例 
  16.  * 
  17.  */  
  18. public class Account2Action extends ActionSupport {  
  19.     private static final long serialVersionUID = -1418893621512812472L;  
  20.     private Integer id;  
  21.     private String name;  
  22.     private String pwd;  
  23.     private String pwd2;  
  24.     private Double score;  
  25.     private Date registed_date;  
  26.     private String email;  
  27.       
  28.       
  29.     @Validations(  
  30.             requiredStrings={@RequiredStringValidator(fieldName="name",message="我的用戶名是必須的",shortCircuit=true,trim=true,type=ValidatorType.FIELD),  
  31.                     @RequiredStringValidator(fieldName="pwd",message="我的密碼是必須的",shortCircuit=true,trim=true,type=ValidatorType.FIELD)},  
  32.             fieldExpressions={@FieldExpressionValidator(fieldName="pwd", message="兩次密碼不相同",expression="pwd==pwd2")},  
  33.             regexFields={@RegexFieldValidator(expression="^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\\.com)|(\\.cn)|(\\.net)|(\\.org)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.biz)|(\\.ws)|(\\.us)|(\\.tv)|(\\.cc)|(\\.aero)|(\\.arpa)|(\\.coop)|(\\.int)|(\\.jobs)|(\\.museum)|(\\.name)|(\\.pro)|(\\.travel)|(\\.nato)|(\\..{2,3})|(\\..{2,3}\\..{2,3}))$")}  
  34.     )  
  35.     public String registe() throws Exception{  
  36.         System.out.println("registe-------------------");  
  37.         return SUCCESS;  
  38.     }  
  39.       
  40.     @SkipValidation  
  41.     public String login()throws Exception{  
  42.         return SUCCESS;  
  43.     }  
  44.       
  45.     public Integer getId() {  
  46.         return id;  
  47.     }  
  48.     public void setId(Integer id) {  
  49.         this.id = id;  
  50.     }  
  51.     public String getName() {  
  52.         return name;  
  53.     }  
  54.     public void setName(String name) {  
  55.         this.name = name;  
  56.     }  
  57.     public Double getScore() {  
  58.         return score;  
  59.     }  
  60.     public void setScore(Double score) {  
  61.         this.score = score;  
  62.     }  
  63.     public Date getRegisted_date() {  
  64.         return registed_date;  
  65.     }  
  66.     public void setRegisted_date(Date registedDate) {  
  67.         registed_date = registedDate;  
  68.     }  
  69.     public String getEmail() {  
  70.         return email;  
  71.     }  
  72.     public void setEmail(String email) {  
  73.         this.email = email;  
  74.     }  
  75.   
  76.     public String getPwd() {  
  77.         return pwd;  
  78.     }  
  79.   
  80.     public void setPwd(String pwd) {  
  81.         this.pwd = pwd;  
  82.     }  
  83.   
  84.     public String getPwd2() {  
  85.         return pwd2;  
  86.     }  
  87.   
  88.     public void setPwd2(String pwd2) {  
  89.         this.pwd2 = pwd2;  
  90.     }  
  91. }</span>  

 

第四個示例:註解方式校驗器---用戶註冊頁面

user2_registe.jsp

Java代碼  收藏代碼
  1. <span style="font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ taglib uri="/struts-tags" prefix="s" %>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>Struts2中基於XML配置式的校驗器使用示例</title>  
  7.   </head>  
  8.   <body>  
  9. <h3>XML配置式校驗器---註冊頁面</h3><hr/>  
  10.   
  11. <div style="color:red"><s:fielderror/></div>  
  12. <form action="user2_registe.action" method="post">  
  13.     <table>  
  14.         <tr>  
  15.             <td>ID</td>  
  16.             <td><input type="text" name="user.id" value="${param['user.id']}"/></td>  
  17.         </tr>  
  18.         <tr>  
  19.             <td>登錄名</td>  
  20.             <td><input type="text" name="user.name" value="${param['user.name']}"/></td>  
  21.         </tr>  
  22.         <tr>  
  23.             <td>密碼</td>  
  24.             <td><input type="password" name="user.pwd"/></td>  
  25.         </tr>  
  26.         <tr>  
  27.             <td>重複密碼</td>  
  28.             <td><input type="password" name="user.pwd2"/></td>  
  29.         </tr>  
  30.         <tr>  
  31.             <td>時間</td>  
  32.             <td><input type="text" name="user.registed_date" value="${param['user.registed_date']}"/></td>  
  33.         </tr>  
  34.         <tr>  
  35.             <td>email</td>  
  36.             <td><input type="text" name="user.email" value="${param['user.email']}"/></td>  
  37.         </tr>  
  38.         <tr>  
  39.             <td>考試成績</td>  
  40.             <td><input type="text" name="user.score" value="${param['user.score']}"/></td>  
  41.         </tr>  
  42.         <tr>  
  43.             <td colspan="2"><input type="submit" value=" 提交 "/></td>  
  44.         </tr>  
  45.     </table>  
  46. </form>  
  47.   </body>  
  48. </html></span>  

 src/struts.xml

Java代碼  收藏代碼
  1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  5.   
  6. <struts>  
  7.     <!-- 請求參數的編碼方式 -->  
  8.     <constant name="struts.i18n.encoding" value="UTF-8"/>  
  9.     <!-- 指定被struts2處理的請求後綴類型。多個用逗號隔開 -->  
  10.     <constant name="struts.action.extension" value="action,do,go,xkk"/>  
  11.     <!-- 當struts.xml改動後,是否重新加載。默認值爲false(生產環境下使用),開發階段最好打開  -->  
  12.     <constant name="struts.configuration.xml.reload" value="true"/>  
  13.     <!-- 是否使用struts的開發模式。開發模式會有更多的調試信息。默認值爲false(生產環境下使用),開發階段最好打開  -->  
  14.     <constant name="struts.devMode" value="false"/>  
  15.     <!-- 設置瀏覽器是否緩存靜態內容。默認值爲true(生產環境下使用),開發階段最好關閉  -->  
  16.     <constant name="struts.serve.static.browserCache" value="false" />  
  17.     <!-- 是否允許在OGNL表達式中調用靜態方法,默認值爲false -->  
  18.     <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>  
  19.       
  20.     <!-- 指定由spring負責action對象的創建   
  21.     <constant name="struts.objectFactory" value="spring" />  
  22.     -->  
  23.     <!-- 是否開啓動態方法調用 -->  
  24.     <constant name="struts.enable.DynamicMethodInvocation" value="false"/>  
  25.       
  26.     <package name="my" extends="struts-default" namespace="/">  
  27.         <!-- 使用Annotation配置校驗的Action -->  
  28.         <action name="user2_*" class="com.javacrazyer.web.action.User2Action" method="{1}">  
  29.             <result name="success">/info.jsp</result>  
  30.             <result name="input">/user2_{1}.jsp</result>  
  31.         </action>  
  32.     </package>  
  33.       
  34. </struts>  
  35. </span>  

 

User2Action.java

Java代碼  收藏代碼
  1. <span style="font-size: medium;">package com.javacrazyer.web.action;  
  2.   
  3.   
  4. import com.javacrazyer.domain.User;  
  5. import com.opensymphony.xwork2.ActionSupport;  
  6. import com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator;  
  7. import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;  
  8. import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;  
  9. import com.opensymphony.xwork2.validator.annotations.Validations;  
  10. import com.opensymphony.xwork2.validator.annotations.ValidatorType;  
  11.   
  12. /** 
  13.  * 使用註解來配置校驗器 
  14.  *  
  15.  */  
  16. public class User2Action extends ActionSupport {  
  17.     private static final long serialVersionUID = -2554018432709689579L;  
  18.     private User user; //自定義類型Field  
  19.       
  20.     @Validations(  
  21.             requiredStrings={@RequiredStringValidator(fieldName="user.name",message="你的用戶名是必須的",shortCircuit=true,trim=true,type=ValidatorType.FIELD),  
  22.                     @RequiredStringValidator(fieldName="user.pwd",message="人的密碼是必須的",shortCircuit=true,trim=true,type=ValidatorType.FIELD)},  
  23.             fieldExpressions={@FieldExpressionValidator(fieldName="user.pwd", message="兩次密碼不相同",expression="user.pwd==user.pwd2")},  
  24.             regexFields={@RegexFieldValidator(fieldName="user.email",message="郵箱不合法",expression="^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\\.com)|(\\.cn)|(\\.net)|(\\.org)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.biz)|(\\.ws)|(\\.us)|(\\.tv)|(\\.cc)|(\\.aero)|(\\.arpa)|(\\.coop)|(\\.int)|(\\.jobs)|(\\.museum)|(\\.name)|(\\.pro)|(\\.travel)|(\\.nato)|(\\..{2,3})|(\\..{2,3}\\..{2,3}))$")}  
  25.     )  
  26.     public String registe() throws Exception{  
  27.         System.out.println("registe======================");  
  28.         return SUCCESS;  
  29.     }  
  30.       
  31.     public String login() throws Exception{  
  32.         return SUCCESS;  
  33.     }  
  34.   
  35.     public User getUser() {  
  36.         return user;  
  37.     }  
  38.   
  39.     public void setUser(User user) {  
  40.         this.user = user;  
  41.     }  
  42. }</span>  

 

另附:

User.java

Java代碼  收藏代碼
  1. <span style="font-size: medium;">package com.javacrazyer.domain;  
  2.   
  3. import java.util.Date;  
  4.   
  5.   
  6. public class User {  
  7.     private Integer id;  
  8.     private String name;  
  9.     private String pwd;  
  10.     private String pwd2;  
  11.     private Double score;  
  12.     private Date registed_date;  
  13.     private String email;  
  14.       
  15.     public User(){}  
  16.   
  17.     public Integer getId() {  
  18.         return id;  
  19.     }  
  20.   
  21.     public void setId(Integer id) {  
  22.         this.id = id;  
  23.     }  
  24.   
  25.     public String getName() {  
  26.         return name;  
  27.     }  
  28.   
  29.     public void setName(String name) {  
  30.         this.name = name;  
  31.     }  
  32.   
  33.     public String getPwd() {  
  34.         return pwd;  
  35.     }  
  36.   
  37.     public void setPwd(String pwd) {  
  38.         this.pwd = pwd;  
  39.     }  
  40.   
  41.     public String getPwd2() {  
  42.         return pwd2;  
  43.     }  
  44.   
  45.     public void setPwd2(String pwd2) {  
  46.         this.pwd2 = pwd2;  
  47.     }  
  48.   
  49.     public Double getScore() {  
  50.         return score;  
  51.     }  
  52.   
  53.     public void setScore(Double score) {  
  54.         this.score = score;  
  55.     }  
  56.   
  57.     public Date getRegisted_date() {  
  58.         return registed_date;  
  59.     }  
  60.   
  61.     public void setRegisted_date(Date registedDate) {  
  62.         registed_date = registedDate;  
  63.     }  
  64.   
  65.     public String getEmail() {  
  66.         return email;  
  67.     }  
  68.   
  69.     public void setEmail(String email) {  
  70.         this.email = email;  
  71.     }  
  72.       
  73.       
  74. }</span>  

 

與user.java同一目錄的User-userContext-validation.xml

Java代碼  收藏代碼
  1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC   
  3.     "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  4.     "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  5. <validators>  
  6.     <!-- 字段校驗 -->  
  7.     <field name="id">  
  8.         <field-validator type="required" short-circuit="true">  
  9.             <message>ID必填的</message>  
  10.         </field-validator>  
  11.         <field-validator type="int">  
  12.             <param name="min">20</param>  
  13.             <param name="max">50</param>  
  14.             <message>ID必須在 ${min} 到 ${max} 之間</message>  
  15.         </field-validator>  
  16.     </field>  
  17.     <field name="name">  
  18.         <field-validator type="requiredstring" short-circuit="true">  
  19.             <message>姓名是必填的</message>  
  20.         </field-validator>  
  21.         <field-validator type="regex">  
  22.             <param name="expression"><![CDATA[(^[a-zA-Z_]\w{3,9}$)]]></param>  
  23.             <message>姓名不合法</message>  
  24.         </field-validator>  
  25.     </field>  
  26.     <field name="pwd">  
  27.         <field-validator type="requiredstring" short-circuit="true">  
  28.             <message>密碼是必填的</message>  
  29.         </field-validator>  
  30.     </field>  
  31.       
  32.     <!-- 非字段校驗 -->  
  33.     <validator type="fieldexpression">  
  34.         <param name="fieldName">pwd</param>  
  35.         <param name="fieldName">pwd2</param>  
  36.         <param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表達式 -->  
  37.         <message>確認密碼和密碼輸入不一致</message>  
  38.     </validator>  
  39.       
  40.     <field name="score">  
  41.         <field-validator type="double">  
  42.              <param name="minInclusive">0.0</param>  
  43.                <param name="maxInclusive">100.0</param>  
  44.                <message>成績必須在${minInclusive}和${maxInclusive}之間</message>  
  45.         </field-validator>  
  46.     </field>  
  47.     <field name="email">  
  48.         <field-validator type="regex">  
  49.              <param name="expression"><![CDATA[(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\.com)|(\.cn)|(\.net)|(\.org)|(\.info)|(\.edu)|(\.mil)|(\.gov)|(\.biz)|(\.ws)|(\.us)|(\.tv)|(\.cc)|(\.aero)|(\.arpa)|(\.coop)|(\.int)|(\.jobs)|(\.museum)|(\.name)|(\.pro)|(\.travel)|(\.nato)|(\..{2,3})|(\..{2,3}\..{2,3}))$)]]></param>  
  50.              <message>郵箱不合法</message>  
  51.         </field-validator>  
  52.     </field>  
  53.       
  54.     <field name="registed_date">  
  55.         <field-validator type="date">  
  56.              <param name="min">1970-01-01</param>  
  57.              <param name="max">2019-01-01</param>  
  58.              <message>註冊日期不合法</message>  
  59.         </field-validator>  
  60.     </field>  
  61. </validators></span>  

 

與User.java同一目錄下的User-userLoginContext-validation.xml

Xml代碼  收藏代碼
  1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC   
  3.     "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  4.     "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  5. <validators>  
  6.     <field name="name">  
  7.         <field-validator type="requiredstring" short-circuit="true">  
  8.             <message>姓名是必填的</message>  
  9.         </field-validator>  
  10.         <field-validator type="regex">  
  11.             <param name="expression"><![CDATA[(^[a-zA-Z_]\w{3,9}$)]]></param>  
  12.             <message>姓名不合法</message>  
  13.         </field-validator>  
  14.     </field>  
  15.     <field name="pwd">  
  16.         <field-validator type="requiredstring" short-circuit="true">  
  17.             <message>密碼是必填的</message>  
  18.         </field-validator>  
  19.     </field>  
  20. </validators></span> 
發佈了7 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章