自訂驗證器


看一下validator-rules.xml的內容可以幫助您瞭解如何自訂驗證器,以下擷取一個片斷作為參考:
  • validator-rules.xml
...
      <validator
          name="required"
          classname="org.apache.struts.validator.FieldChecks"
          method="validateRequired"
          methodParams="java.lang.Object,
             org.apache.commons.validator.ValidatorAction,
             org.apache.commons.validator.Field,
             org.apache.struts.action.ActionErrors,
             javax.servlet.http.HttpServletRequest"
             msg="errors.required">

         <javascript><![CDATA[
            function validateRequired(form) {
             ........
            }
            ]]>
         </javascript>
      </validator>
....
 
在<javascript>標籤之間的,是用來撰寫自訂客戶端驗證的JavaScript時使用,要使用它必須在JSP頁面的表單提交按鈕上增加onsubmit事件處理,例如:
 <html:form action="Login" onsubmit="return validateLoginForm(this);">

然後在JSP頁面中使用<html:javascript/>標籤將所需的JavaScript寫出:
<html:javascript formName="loginForm"/>

<javascript>會自動生成JavaScript validateXXXX()方法,其中XXXX是ActionForm名稱,在客戶端當按下按鈕時,validateXXXX()方法會被呼叫並執行客戶端的JavaScript驗證工作。

在伺服端,您要撰寫一個驗證類別,該類別必須包括static的validateXXX()方法,並必須包括指定的參數,最後傳回true或false表明驗證成功或失敗,例如:
public class MyValidator implements Serializable {
    public static boolean validateSomeProperty(
                              Object object,
                              ValidatorAction action,
                              Field field,
                              ActionErrors errors,
                              HttpServletRequest request) {
        ........
    }
}
 

如果驗證失敗,errors可以讓您將一些驗證失敗訊息加入其中,最後可使用<html:messages>顯示在指定的頁面上。

自訂Validator時,預設都是找尋application.properties中的key-value對應,如果需要額外的訊息,可以在該檔案中加入。

有關更多自訂驗證器的方式,可以參考validator-rules.xml與Validator的原始碼檔案。