如果要驗證使用者的輸入,光使用客戶端驗證是不保險的,客戶端可能跳過輸入頁面,直接對伺服器發送請求不正確的請 求,如果伺服端沒有驗證請求,就會導致錯誤。
要使用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>
...