本人很久前學struts2時遇到些問題,希望寫出來對大家有所協助。struts2的校正架構既支援伺服器端也支援客服端的校正,但更多是用在伺服器端(客服端支援太弱)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- 驗證的兩種方式 -->
<!-- <validator type="requiredstring">
<param name="fieldName">username</param>
<message>使用者名稱不可為空</message>
</validator>
<validator type="stringlength">
<param name="fieldName">username</param>
<param name="minLength">3</param>
<param name="maxLength">8</param>
<message>使用者名稱必須在${minLength}和${maxLength}之間</message>
</validator>-->
<!-- fiel表示驗證欄位層級,和上面的可以同時存在 -->
<field name="username">
<field-validator type="requiredstring" short-circuit="true">
<param name="trim">true</param>
<message>使用者名稱必須填</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>使用者名稱必須在${minLength}和${maxLength}之間</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>密碼必填</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>密碼必須在${minLength}和${maxLength}之間</message>
</field-validator>
</field>
<field name="re_password">
<field-validator type="requiredstring">
<message>重複密碼必填</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>密碼必須在${minLength}和${maxLength}之間</message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression">(re_password eq password)</param>
<message>兩次密碼不一致</message>
</field-validator>
</field>
<field name="age">
<field-validator type="required">
<message>年齡必填</message>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">100</param>
<message>年齡必須在${min}和${max}之間</message>
</field-validator>
</field>
<field name="graduation">
<field-validator type="required">
<message>畢業時間必填</message>
</field-validator>
<field-validator type="date">
<param name="min">1987-01-01</param>
<param name="max">2007-01-01</param>
<message>生日必須在${min}和${max}之間</message>
</field-validator>
<field-validator type="fieldexpression">
<param name="expression">(graduation >birthday)</param>
<message>畢業時間不能大於出生時間</message>
</field-validator>
</field>
</validators>
1.我們在寫校正檔案時最好根據它定義的DTD檔案和提供的原始碼進行編碼,可以找到default.xml檔案。他裡面列出了相應的校正方式和對應的類。在用fieldexpression這種類型來校正時表示驗證的是個運算式語言,其實是OGNL語言。下面的 <param name="expression">(graduation >birthday)</param>就說明了此道理。expression也說明你用的是運算式校正。
2.有時我們雖然定義了驗證檔案,但是有些方法不想讓它校正可以用@SkipValidation的註解方式跳過驗證(不過此註解卻對action裡定義的驗證跳不過)。
3.如果一個action定義了多個方法,校正檔案用該:XXXAction-配置的action名字-validation.xml的方式。當時第一次比較暈,把第二節配成想要調用的方法,結果老是解析不了。