如果要驗證使用者的輸入,光使用客戶端驗證是不保險的,客戶端可能跳過輸入頁面,直接對伺服器發送請求不正確的請 求,如果伺服端沒有驗證請求,就會導致錯誤。
要使用Validator伺服端驗證,只要繼承org.apache.struts.validator.ValidatorForm類別來撰寫 ActionForm客戶端驗證器 相同。
RequestProcessor 會呼叫validate()方法,如果驗證有誤,則會收集相關的錯誤訊息並儲存在ActionErrors中傳回,您要作的是指定struts- config.xml中ActionMapping的type屬性,提供一個訊息頁面,在當中使用<html:messages>標籤顯示錯 誤訊息,例如:
- struts-config.xml
... 
 <action 
     path="/login" 
     type="onlyfun.caterpillar.LoginAction" 
     name="userForm" 
     validate="true" 
     input="/WEB-INF/pages/form.jsp"> 
     <forward 
         name="greeting" 
         path="/WEB-INF/pages/greeting.jsp"/> 
 </action>
... 
- form.jsp
<%@ taglib uri="/tags/struts-bean" prefix="bean" %> 
<%@ taglib uri="/tags/struts-html" prefix="html" %> 
<%@page contentType="text/html; charset=Big5"%> 
<html:html> 
 <head> 
 <title>Login</title> 
 <html:base/> 
 </head> 
 <body bgcolor="white"> 
 
 <html:messages id="error"> 
     <bean:write name="error"/> 
 </html:messages>
 
 <html:form action="/login" focus="name"> 
    名稱:<html:text property="name" size="20"/><br> 
    郵件:<html:text property="email" size="20"/><br> 
    <html:submit/> <html:reset/> 
 </html:form>
 
</body> 
</html:html> 
Validator也提供了DynaActionForm的子類別DynaValidatorForm,您只要在struct-config.xml中設 定好相關的設定,就可以自動生成ActionForm物件,並具有驗證功能,例如:
- struts-config.xml
... 
 <form-beans> 
     <form-bean 
        name="userForm" 
        type="org.apache.struts.validator.DynaValidatorForm"> 
        <form-property 
            name="name" 
            type="java.lang.String" 
            initial="nobody"/> 
        <form-property 
            name="email" 
            type="java.lang.String" 
            initial="nobody@mail.com"/> 
    </form-bean> 
 </form-beans>
... 
