如果要驗證使用者的輸入,光使用客戶端驗證是不保險的,客戶端可能跳過輸入頁面,直接對伺服器發送請求不正確的請求,如果伺服端沒有驗證請求,就會導致錯誤。
要使用Validator伺服端驗證,只要繼承org.apache.struts.validator.ValidatorForm類別來撰寫ActionForm就可以了,ValidatorForm是ActionForm的子類別,它重新定義了validate()方法,使用ValidatorForm定義了類別之後,在validation.xml中的設定與前一個主題相同。
ActionServlet會呼叫validate()方法,如果驗證有誤,則會收集相關的錯誤訊息並儲存在ActionErrors中傳回,您要作的是指定struts-config.xml中ActionMapping的type屬性,提供一個訊息頁面,在當中使用<html:errors/>標籤顯示錯誤訊息,例如:
代碼: |
<action path="/LoginAction" type="onlyfun.caterpillar.LoginAction" name="userForm" validate="true" input="/pages/welcome.jsp"> <forward name="greeting" path="/pages/greeting.jsp"/> </action> |
代碼: |
<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@page contentType="text/html; charset=Big5"%> <html:html> <head> <title><bean:message key="welcome.title"/></title> <html:base/> </head> <body bgcolor="white"> <html:errors/> <html:form action="/LoginAction" 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物件,並具有驗證功能,例如:
代碼: |
<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> |