Validator 框架是 Struts 官方外掛,以 XML 宣告驗證規則,取代在 ActionForm.validate() 撰寫程式碼。優點:維護集中、標準化、避免重複造輪子(如 Email 驗證)、支援客戶端/伺服端自動切換、可擴充自訂驗證器。
package actionform;
import org.apache.struts.validator.ValidatorForm;
public class FirstValidatorForm extends ValidatorForm {
private String name, age, email;
// getter/setter 略
}
關鍵:必須繼承 ValidatorForm(已覆寫 validate() 自動觸發 XML 驗證),而非 ActionForm。
package action;
public class ValidatorAction extends Action {
public ActionForward execute(...) {
response.setCharacterEncoding("GBK");
response.getWriter().println("驗證成功!");
return null;
}
}
<form-bean name="firstValidatorForm" type="actionform.FirstValidatorForm" />
<action name="firstValidatorForm" path="/firstValidator" scope="request"
type="action.ValidatorAction" input="/firstValidator.jsp" />
<%@ taglib uri="https://struts.apache.org/tags-html" prefix="html" %>
<html:form action="firstValidator">
姓名:<html:text property="name" /> <font color="red"><html:errors property="name"/></font><br>
年齡:<html:text property="age" /> <font color="red"><html:errors property="age"/></font><br>
Email:<html:text property="email" /> <font color="red"><html:errors property="email"/></font><br>
<html:submit value="提交" />
</html:form>
<html:errors property="..."/> 顯示對應欄位錯誤。
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"https://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<formset>
<form name="firstValidatorForm">
<field property="name" depends="required,maxlength,minlength,mask">
<msg name="required" key="error.name.blank" />
<msg name="minlength" key="error.name.minLength" />
<msg name="maxlength" key="error.name.maxLength" />
<msg name="mask" key="error.name.alphanum" />
<arg name="minlength" key="${var:minlength}" position="0" resource="false" />
<arg name="maxlength" key="${var:maxlength}" position="0" resource="false" />
<var><var-name>minlength</var-name><var-value>5</var-value></var>
<var><var-name>maxlength</var-name><var-value>10</var-value></var>
<var><var-name>mask</var-name><var-value>^[a-zA-Z0-9]*$</var-value></var>
</field>
<field property="age" depends="required,integer,intRange">
<msg name="required" key="error.age.blank" />
<msg name="integer" key="error.age.integer" />
<msg name="intRange" key="error.age.intRange" />
<arg name="intRange" key="${var:min}" position="0" resource="false" />
<arg name="intRange" key="${var:max}" position="1" resource="false" />
<var><var-name>min</var-name><var-value>18</var-value></var>
<var><var-name>max</var-name><var-value>60</var-value></var>
</field>
<field property="email" depends="required,email">
<msg name="required" key="error.email.blank" />
<msg name="email" key="error.email.invalid" />
</field>
</form>
</formset>
</form-validation>
ErrorDescription.propertieserror.name.blank=姓名不能為空
error.name.minLength=姓名的長度不能小於{0}
error.name.maxLength=姓名的長度不能大於{0}
error.name.alphanum=姓名必須由字母和數字組成
error.age.blank=年齡不能為空
error.age.integer=年齡必須為數字
error.age.intRange=年齡必須在{0}和{1}之間
於 struts-config.xml:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml" />
</plug-in>
validator-rules.xml:框架內建驗證器定義(Struts 發行包 lib 目錄或 MyEclipse 自動複製至 WEB-INF)。validator.xml:專案自訂驗證規則(可多檔,逗號分隔)。訪問 https://localhost:8080/samples/firstValidator.jsp,輸入錯誤資料送出,畫面顯示紅字錯誤訊息。
Validator 框架將驗證邏輯外部化為 XML,配合 ValidatorForm 自動整合,實現「零驗證程式碼、集中維護、標準化驗證、客戶端/伺服端雙模」的現代表單驗證架構。