ITEEDU

Struts Gossip: 自订验证器

看一下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的原始码档案。