如果要驗證使用者的輸入,光使用客戶端驗證是不保險的,客戶端可能跳過輸入頁面,直接對伺服器發送請求不正確的請
求,如果伺服端沒有驗證請求,就會導致錯誤。
要使用Validator伺服端驗證,只要繼承org.apache.struts.validator.ValidatorForm類別來撰寫 ActionForm客戶端驗證器 相同。
RequestProcessor
會呼叫validate()方法,如果驗證有誤,則會收集相關的錯誤訊息並儲存在ActionErrors中傳回,您要作的是指定struts-
config.xml中ActionMapping的type屬性,提供一個訊息頁面,在當中使用<html:messages>標籤顯示錯
誤訊息,例如:
... <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> ...
<%@ 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物件,並具有驗證功能,例如:
... <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> ...
|