看一下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) {
........
}
}
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的原始碼檔案。