8.2 ? 利用配置文件進(jìn)行輸入校驗(yàn)方法說明
8.1 小節(jié)中說明的輸入校驗(yàn)方法會(huì)讓程序產(chǎn)生很多代碼。如果是 1 個(gè)項(xiàng)目生命周期很短的項(xiàng)目,必然對(duì)時(shí)間的要求會(huì)很高。這時(shí)候利用 Struts2 來對(duì)該項(xiàng)目進(jìn)行開發(fā),開發(fā)者勢(shì)必不喜歡 8.1 小節(jié)中介紹的輸入校驗(yàn)方法。因?yàn)榇a太多,工作量一下子就增大了不少。而且它是一種硬編碼的形式,增大了系統(tǒng)各個(gè)模塊之間的耦合度,也不利于項(xiàng)目后期的維護(hù)和實(shí)施。因此本節(jié)介紹的利用配置文件進(jìn)行輸入校驗(yàn)的方式則很好的解決了上述問題。
利用配置文件進(jìn)行校驗(yàn)主要是增加了一些 xml 文件來對(duì)具體表單中各個(gè)字段進(jìn)行輸入校驗(yàn)。當(dāng)然配置文件能做的事情不止這些。其本身的輸入校驗(yàn)規(guī)則的書寫格式也有字段和非字段兩種,下面筆者就來具體介紹這些知識(shí)點(diǎn)。
8.2.1 ? Struts2 字段校驗(yàn)的配置文件形式
技術(shù)要點(diǎn)
Struts2 輸入校驗(yàn)配置文件字段校驗(yàn)格式介紹。
輸入校驗(yàn)配置文件命名方式和相關(guān)注意點(diǎn)。
字段校驗(yàn)格式和相關(guān)注意點(diǎn)。
演示代碼
數(shù)據(jù)輸入 JSP 代碼:
- <!---------------------文件名:register.jsp----------------> ??
- ………… ??
- ??????????????????<!--?用戶信息注冊(cè)form表單?--> ??
- ?????????<s:form?action= "Register.action" ??validate= "true" > ??
- ???????????????????<table?width= "60%" ?height= "76" ?border= "0" > ??
- ?????????????????????????????????????<!--?各標(biāo)簽定義?--> ??
- ?????????????????????????????????????<s:textfield?name= "username" ?label= "用戶名" /> ??
- ?????????????????????????????????????<s:password?name= "password" ?label= "密??碼" ?/> ??
- ?????????????????????????????????????<s:password?name= "repassword" ?label= "密??碼確認(rèn)" ?/> ??
- ?????????????????????????????????????<s:textfield?name= "birthday" ?label= "生日" /> ??
- ?????????????????????????????????????<s:textfield?name= "mobile" ?label= "手機(jī)號(hào)碼" /> ??
- ?????????????????????????????????????<s:textfield?name= "age" ?label= "年齡" /> ??
- ?????????????????????????????????????<s:submit?value= "注冊(cè)" ?align= "center" />?????????????????????????????? ??
- ???????????????????</table> ??
- ?????????</s:form> ??
- …………??
<!---------------------文件名:register.jsp----------------> ………… <!-- 用戶信息注冊(cè)form表單 --> <s:form action="Register.action" validate="true"> <table width="60%" height="76" border="0"> <!-- 各標(biāo)簽定義 --> <s:textfield name="username" label="用戶名"/> <s:password name="password" label="密 碼" /> <s:password name="repassword" label="密 碼確認(rèn)" /> <s:textfield name="birthday" label="生日"/> <s:textfield name="mobile" label="手機(jī)號(hào)碼"/> <s:textfield name="age" label="年齡"/> <s:submit value="注冊(cè)" align="center"/> </table> </s:form> …………
?
輸入校驗(yàn)文件代碼:
- <!---------文件名:RegisterAction-validation.xml----------> ??
- <?xml?version= "1.0" ?encoding= "gb2312" ?> ??
- <!DOCTYPE?validators?PUBLIC ??
- "-//OpenSymphony?Group//XWork?Validator?1.0.2//EN" ??
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd" > ??
- <validators> ??
- ?????????<field?name= "username" > ??
- ???????????????????<!—檢驗(yàn)用戶名的長度?--?> ??
- ???????????????????<field-validator?type= "stringlength" > ??
- ????????????????????????????<param?name= "minLength" > 6 </param> ??
- ????????????????????????????<param?name= "maxLength" > 8 </param> ??
- ????????????????????????????<message>用戶名長度必須在${minLength}-${maxLength}位之間</message> ??
- ???????????????????</field-validator> ??
- ???????????????????<!—檢驗(yàn)用戶名是否已輸入?--?> ??
- <field-validator?type= "requiredstring" > ??
- ????????????????????????????<message>請(qǐng)輸入用戶名</message> ??
- ???????????????????</field-validator> ??
- ?????????</field> ??
- ?????????<field?name= "password" > ??
- ???????????????????<!—檢驗(yàn)密碼的長度?--?> ??
- ???????????????????<field-validator?type= "stringlength" > ??
- ????????????????????????????<param?name= "minLength" > 6 </param> ??
- ????????????????????????????<param?name= "maxLength" > 8 </param> ??
- ????????????????????????????<message>密碼長度必須在${minLength}-${maxLength}位之間</message> ??
- ???????????????????</field-validator> ??
- <!—檢驗(yàn)密碼是否已輸入?--?> ??
- ???????????????????<field-validator?type= "requiredstring" > ??
- ????????????????????????????<message>請(qǐng)輸入密碼</message> ??
- ???????????????????</field-validator> ??
- ?????????</field> ??
- ?????????<field?name= "repassword" > ??
- ?????????<!—檢驗(yàn)確認(rèn)密碼的長度?--?> ??
- ???????????????????<field-validator?type= "stringlength" > ??
- ????????????????????????????<param?name= "minLength" > 6 </param> ??
- ????????????????????????????<param?name= "maxLength" > 8 </param> ??
- ????????????????????????????<message>確認(rèn)密碼長度必須在${minLength}-${maxLength}位之間</message> ??
- ???????????????????</field-validator> ??
- <!—檢驗(yàn)確認(rèn)密碼是否已輸入?--?> ??
- ???????????????????<field-validator?type= "requiredstring" > ??
- ????????????????????????????<message>請(qǐng)輸入確認(rèn)密碼</message> ??
- ???????????????????</field-validator> ??
- ?????????<!—檢驗(yàn)密碼和確認(rèn)密碼的輸入內(nèi)容是否一致?--?> ??
- ???????????????????<field-validator?type= "fieldexpression" > ??
- ????????????????????????????<param?name= "expression" >password==repassword</param> ??
- ????????????????????????????<message>確認(rèn)密碼和密碼輸入不一致</message> ??
- ???????????????????</field-validator> ??
- ?????????</field> ??
- ?????????<field?name= "birthday" > ??
- ?????????<!—檢驗(yàn)生日是否已輸入?--?> ??
- ???????????????????<field-validator?type= "required" > ??
- ????????????????????????????<message>請(qǐng)輸入生日日期</message> ??
- ???????????????????</field-validator> ??
- <!—檢驗(yàn)輸入日期是否在一個(gè)有效日期范圍內(nèi)?--?> ??
- ???????????????????<field-validator?type= "date" > ??
- ????????????????????????????<param?name= "min" > 1928 - 01 - 01 </param> ??
- ????????????????????????????<param?name= "max" > 2004 - 01 - 01 </param> ??
- ????????????????????????????<message>輸入生日日期無效</message> ??
- ???????????????????</field-validator> ??
- ?????????</field> ??
- ?????????<field?name= "mobile" > ??
- ???????????????????<!—檢驗(yàn)手機(jī)號(hào)碼是否已輸入?--?> ??
- <field-validator?type= "requiredstring" > ??
- ????????????????????????????<message>請(qǐng)輸入手機(jī)號(hào)碼</message> ??
- ???????????????????</field-validator> ??
- ?????????<!—檢驗(yàn)輸入手機(jī)號(hào)碼長度是否是 11 位有效手機(jī)號(hào)碼--?> ??
- ???????????????????<field-validator?type= "stringlength" > ??
- ????????????????????????????<param?name= "minLength" > 11 </param> ??
- ????????????????????????????<message>請(qǐng)輸入正確的手機(jī)號(hào)碼,號(hào)碼位數(shù)必須為 11 位</message> ??
- ???????????????????</field-validator> ??
- ?????????</field> ??
- ?????????<field?name= "age" > ??
- ??????????????<!—檢驗(yàn)?zāi)挲g是否已輸入?--?> ??
- ??????????????????<field-validator?type= "required" > ??
- ????????????<message>請(qǐng)輸入年齡</message> ??
- ???????????</field-validator> ??
- <!—檢驗(yàn)輸入年齡是否符合特定年齡范圍?--?> ??
- ??????????????????<field-validator?type= "int" > ??
- ????????????????????????????<param?name= "min" > 1 </param> ??
- ????????????????????????????<param?name= "max" > 80 </param> ??
- ????????????????????????????<message>年齡必須在${min}-${max}歲之間</message> ??
- ???????????????????</field-validator> ??
- ?????????</field> ??
- </validators>??
<!---------文件名:RegisterAction-validation.xml----------> <?xml version="1.0" encoding="gb2312"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="username"> <!—檢驗(yàn)用戶名的長度 -- > <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">8</param> <message>用戶名長度必須在${minLength}-${maxLength}位之間</message> </field-validator> <!—檢驗(yàn)用戶名是否已輸入 -- > <field-validator type="requiredstring"> <message>請(qǐng)輸入用戶名</message> </field-validator> </field> <field name="password"> <!—檢驗(yàn)密碼的長度 -- > <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">8</param> <message>密碼長度必須在${minLength}-${maxLength}位之間</message> </field-validator> <!—檢驗(yàn)密碼是否已輸入 -- > <field-validator type="requiredstring"> <message>請(qǐng)輸入密碼</message> </field-validator> </field> <field name="repassword"> <!—檢驗(yàn)確認(rèn)密碼的長度 -- > <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">8</param> <message>確認(rèn)密碼長度必須在${minLength}-${maxLength}位之間</message> </field-validator> <!—檢驗(yàn)確認(rèn)密碼是否已輸入 -- > <field-validator type="requiredstring"> <message>請(qǐng)輸入確認(rèn)密碼</message> </field-validator> <!—檢驗(yàn)密碼和確認(rèn)密碼的輸入內(nèi)容是否一致 -- > <field-validator type="fieldexpression"> <param name="expression">password==repassword</param> <message>確認(rèn)密碼和密碼輸入不一致</message> </field-validator> </field> <field name="birthday"> <!—檢驗(yàn)生日是否已輸入 -- > <field-validator type="required"> <message>請(qǐng)輸入生日日期</message> </field-validator> <!—檢驗(yàn)輸入日期是否在一個(gè)有效日期范圍內(nèi) -- > <field-validator type="date"> <param name="min">1928-01-01</param> <param name="max">2004-01-01</param> <message>輸入生日日期無效</message> </field-validator> </field> <field name="mobile"> <!—檢驗(yàn)手機(jī)號(hào)碼是否已輸入 -- > <field-validator type="requiredstring"> <message>請(qǐng)輸入手機(jī)號(hào)碼</message> </field-validator> <!—檢驗(yàn)輸入手機(jī)號(hào)碼長度是否是11位有效手機(jī)號(hào)碼-- > <field-validator type="stringlength"> <param name="minLength">11</param> <message>請(qǐng)輸入正確的手機(jī)號(hào)碼,號(hào)碼位數(shù)必須為11位</message> </field-validator> </field> <field name="age"> <!—檢驗(yàn)?zāi)挲g是否已輸入 -- > <field-validator type="required"> <message>請(qǐng)輸入年齡</message> </field-validator> <!—檢驗(yàn)輸入年齡是否符合特定年齡范圍 -- > <field-validator type="int"> <param name="min">1</param> <param name="max">80</param> <message>年齡必須在${min}-${max}歲之間</message> </field-validator> </field> </validators>
?
代碼解釋
( 1 )使用配置文件來完成輸入校驗(yàn)這種方式,首先在 Action 代碼中去除所有 validate 和 validateXXX 方法的代碼。然后在和 Action 類文件同一級(jí)目錄下增加 XXX-validation.xml 配置文件。這里“ XXX ”是 Action 類文件名字,表示該 XML 文件中所有輸入校驗(yàn)的規(guī)則定義和錯(cuò)誤信息顯示方式都只針對(duì)該 Action 有效。
( 2 )該輸入校驗(yàn)的配置文件有 2 種書寫格式, 1 種是本節(jié)筆者要說的字段校驗(yàn)格式。另 1 種是下 1 小節(jié)要介紹的非字段格式。首先來說明字段校驗(yàn)格式。如代碼所示。在 <validators> 和 </validators> 之間使用 <field> 來對(duì)輸入界面表單中每 1 個(gè)字段進(jìn)行輸入校驗(yàn)規(guī)則定義和錯(cuò)誤信息定義。
<field> 中的 name 屬性就是表單中字段名字。它里面包含 <field-validator> 標(biāo)簽,它的 type 屬性表明是何種類型的輸入校驗(yàn)。這些輸入校驗(yàn)的 type 都是在 Struts2 中缺省定義的。被稱之為校驗(yàn)器。具體這些校驗(yàn)器是如何形成的以及如何生效,在之后章節(jié)還有有介紹。這里讀者只是知道一下就可以。
在 <field-validator> 標(biāo)簽內(nèi)可以有 2 種標(biāo)簽。 1 種是 <param> 標(biāo)簽,該標(biāo)簽定義了一些輸入校驗(yàn)規(guī)則需要用到的參數(shù)。這些參數(shù)更可以以“ ${ 參數(shù)名 } ”格式顯示在視圖頁面上。除此之外還有 <message> 標(biāo)簽,該標(biāo)簽定義的是輸入校驗(yàn)出錯(cuò)后的出錯(cuò)信息。這些信息是可以顯示在試圖界面上的。
( 3 )值得說的是代碼中黑體表明的參數(shù)名字。因?yàn)? Struts2 中特定的校驗(yàn)類型的參數(shù)名是已經(jīng)在 Struts2 代碼中缺省定義過的。因此如果開發(fā)者定義的參數(shù)名字和它本身缺省定義的不符合。那么輸入校驗(yàn)時(shí)候在配置文件中定義的該校驗(yàn)規(guī)則是不會(huì)生效的。比如代碼中的“ stringlength ”類型校驗(yàn),如果定義的最大長度不是“ maxLength ”而是其他的。則在輸入數(shù)據(jù)界面,如果輸入的數(shù)據(jù)超過最大長度,視圖界面不會(huì)給出特定的出錯(cuò)信息的。
( 4 )如果在輸入數(shù)據(jù)的視圖界面的表單中輸入上述 JSP 文件中的黑體“ validate="true" ”。則其實(shí)是另外 1 種輸入校驗(yàn)的方式。這種方式稱之為“客戶端輸入校驗(yàn)方式”。它會(huì)自動(dòng)在試圖頁面中生成很多 JavaScript 代碼。但是它是有其局限性的,因此這些代碼的適合程度不是對(duì) Struts2 中所有的主題都適合的(有關(guān)主題的基本概念翻閱“ Struts2 標(biāo)簽”章節(jié))。因此筆者本身不贊同這樣的輸入校驗(yàn)方式。這里只是向讀者介紹希望讀者對(duì) Struts2 的輸入校驗(yàn)有個(gè)完整的印象。
8.2.2 ? Struts2 非字段校驗(yàn)的配置文件形式
技術(shù)要點(diǎn)
Struts2 輸入校驗(yàn)配置文件非字段校驗(yàn)格式介紹。
非字段校驗(yàn)格式和相關(guān)注意點(diǎn)。
演示代碼
于上一小節(jié)代碼相比,只是輸入校驗(yàn)配置文件中內(nèi)容有所不同。代碼如下:
- <!--------文件名:RegisterAction-validation.xml-----------> ??
- <validators> ??
- ?????????<!—檢驗(yàn)輸入用戶名長度是否在一個(gè)有效范圍內(nèi)?--?> ??
- ?????????<validator?type= "stringlength" > ??
- ???????????????????<param?name= "fieldName" >username</param> ??
- ???????????????????<param?name= "minLength" > 6 </param> ??
- ???????????????????<param?name= "maxLength" > 8 </param> ??
- ???????????????????<message>用戶名長度必須在${minLength}-${maxLength}位之間</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)用戶名是否已輸入?--?> ??
- ?????????<validator?type= "requiredstring" > ??
- ???????????????????<param?name= "fieldName" >username</param> ??
- ???????????????????<message>請(qǐng)輸入用戶名</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)密碼的長度?--?> ??
- ?????????<validator?type= "stringlength" > ??
- ???????????????????<param?name= "fieldName" >password</param> ??
- ???????????????????<param?name= "minLength" > 6 </param> ??
- ???????????????????<param?name= "maxLength" > 8 </param> ??
- ???????????????????<message>密碼長度必須在${minLength}-${maxLength}位之間</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)密碼是否已輸入?--?> ??
- ?????????<validator?type= "requiredstring" > ??
- ???????????????????<param?name= "fieldName" >password</param> ??
- ???????????????????<message>請(qǐng)輸入密碼</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)確認(rèn)密碼的長度?--?> ??
- <validator?type= "stringlength" > ??
- ???????????????????<param?name= "fieldName" >repassword</param> ??
- ???????????????????<param?name= "minLength" > 6 </param> ??
- ???????????????????<param?name= "maxLength" > 8 </param> ??
- ???????????????????<message>確認(rèn)密碼長度必須在${minLength}-${maxLength}位之間</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)確認(rèn)密碼是否已輸入?--?> ??
- ?????????<validator?type= "requiredstring" > ??
- ???????????????????<param?name= "fieldName" >repassword</param> ??
- ???????????????????<message>請(qǐng)輸入確認(rèn)密碼</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)密碼和確認(rèn)密碼的輸入內(nèi)容是否一致?--?> ??
- ?????????<validator?type= "fieldexpression" > ??
- ???????????????????<param?name= "fieldName" >password</param> ??
- ???????????????????<param?name= "fieldName" >repassword</param> ??
- ???????????????????<param?name= "expression" >password==repassword</param> ??
- ???????????????????<message>確認(rèn)密碼和密碼輸入不一致</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)生日是否已輸入?--?> ??
- ?????????<validator?type= "required" > ??
- ???????????????????<param?name= "fieldName" >birthday</param> ??
- ???????????????????<message>請(qǐng)輸入生日日期</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)輸入日期是否在一個(gè)有效日期范圍內(nèi)?--?> ??
- ?????????<validator?type= "date" > ??
- ???????????????????<param?name= "fieldName" >birthday</param> ??
- ???????????????????<param?name= "min" > 1928 - 01 - 01 </param> ??
- ???????????????????<param?name= "max" > 2004 - 01 - 01 </param> ??
- ???????????????????<message>輸入生日日期無效</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)手機(jī)號(hào)碼是否已輸入?--?> ??
- ?????????<validator?type= "requiredstring" > ??
- ???????????????????<param?name= "fieldName" >mobile</param> ??
- ???????????????????<message>請(qǐng)輸入手機(jī)號(hào)碼</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)輸入手機(jī)號(hào)碼長度是否是 11 位有效手機(jī)號(hào)碼--?> ??
- ?????????<validator?type= "stringlength" > ??
- ???????????????????<param?name= "fieldName" >mobile</param> ??
- ???????????????????<message>請(qǐng)輸入正確的手機(jī)號(hào)碼,號(hào)碼位數(shù)必須為 11 位</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)?zāi)挲g是否已輸入?--?> ??
- ?????????<validator?type= "required" > ??
- ???????????????????<param?name= "fieldName" >age</param> ??
- ???????????????????<message>請(qǐng)輸入年齡</message> ??
- ?????????</validator> ??
- ?????????<!—檢驗(yàn)輸入年齡是否符合特定年齡范圍?--?> ??
- ?????????<validator?type= "int" > ??
- ???????????????????<param?name= "fieldName" >age</param> ??
- ???????????????????<param?name= "min" > 1 </param> ??
- ???????????????????<param?name= "max" > 80 </param> ??
- ???????????????????<message>年齡必須在${min}-${max}歲之間</message> ??
- ?????????</validator> ??
- </validators>??
<!--------文件名:RegisterAction-validation.xml-----------> <validators> <!—檢驗(yàn)輸入用戶名長度是否在一個(gè)有效范圍內(nèi) -- > <validator type="stringlength"> <param name="fieldName">username</param> <param name="minLength">6</param> <param name="maxLength">8</param> <message>用戶名長度必須在${minLength}-${maxLength}位之間</message> </validator> <!—檢驗(yàn)用戶名是否已輸入 -- > <validator type="requiredstring"> <param name="fieldName">username</param> <message>請(qǐng)輸入用戶名</message> </validator> <!—檢驗(yàn)密碼的長度 -- > <validator type="stringlength"> <param name="fieldName">password</param> <param name="minLength">6</param> <param name="maxLength">8</param> <message>密碼長度必須在${minLength}-${maxLength}位之間</message> </validator> <!—檢驗(yàn)密碼是否已輸入 -- > <validator type="requiredstring"> <param name="fieldName">password</param> <message>請(qǐng)輸入密碼</message> </validator> <!—檢驗(yàn)確認(rèn)密碼的長度 -- > <validator type="stringlength"> <param name="fieldName">repassword</param> <param name="minLength">6</param> <param name="maxLength">8</param> <message>確認(rèn)密碼長度必須在${minLength}-${maxLength}位之間</message> </validator> <!—檢驗(yàn)確認(rèn)密碼是否已輸入 -- > <validator type="requiredstring"> <param name="fieldName">repassword</param> <message>請(qǐng)輸入確認(rèn)密碼</message> </validator> <!—檢驗(yàn)密碼和確認(rèn)密碼的輸入內(nèi)容是否一致 -- > <validator type="fieldexpression"> <param name="fieldName">password</param> <param name="fieldName">repassword</param> <param name="expression">password==repassword</param> <message>確認(rèn)密碼和密碼輸入不一致</message> </validator> <!—檢驗(yàn)生日是否已輸入 -- > <validator type="required"> <param name="fieldName">birthday</param> <message>請(qǐng)輸入生日日期</message> </validator> <!—檢驗(yàn)輸入日期是否在一個(gè)有效日期范圍內(nèi) -- > <validator type="date"> <param name="fieldName">birthday</param> <param name="min">1928-01-01</param> <param name="max">2004-01-01</param> <message>輸入生日日期無效</message> </validator> <!—檢驗(yàn)手機(jī)號(hào)碼是否已輸入 -- > <validator type="requiredstring"> <param name="fieldName">mobile</param> <message>請(qǐng)輸入手機(jī)號(hào)碼</message> </validator> <!—檢驗(yàn)輸入手機(jī)號(hào)碼長度是否是11位有效手機(jī)號(hào)碼-- > <validator type="stringlength"> <param name="fieldName">mobile</param> <message>請(qǐng)輸入正確的手機(jī)號(hào)碼,號(hào)碼位數(shù)必須為11位</message> </validator> <!—檢驗(yàn)?zāi)挲g是否已輸入 -- > <validator type="required"> <param name="fieldName">age</param> <message>請(qǐng)輸入年齡</message> </validator> <!—檢驗(yàn)輸入年齡是否符合特定年齡范圍 -- > <validator type="int"> <param name="fieldName">age</param> <param name="min">1</param> <param name="max">80</param> <message>年齡必須在${min}-${max}歲之間</message> </validator> </validators>
?
代碼解釋
( 1 ) 非字段格式的輸入校驗(yàn)方式與上 1 小節(jié)相比主要是它的書寫格式不是像之前在 <validators> 和 </validators> 之間包含 <field> 標(biāo)簽,而是 <validator> 標(biāo)簽。每個(gè) <validator> 標(biāo)簽定義的 type 屬性還是 Struts2 自帶的輸入校驗(yàn)器的類型格式。
( 2 )在 <validator> 標(biāo)簽之內(nèi)包含的還是 <param> 和 <message> 兩種標(biāo)簽。但是在 <param> 中多定義了一個(gè) fieldName 屬性。這個(gè)屬性定義的就是輸入校驗(yàn)的表單字段名字。其他和之前字段格式都類似。
( 3 )由于所有數(shù)據(jù)輸入的校驗(yàn)出錯(cuò)的錯(cuò)誤信息和 8.1 節(jié)相同,因此所有的校驗(yàn)出錯(cuò)的信息顯示讀者可以參看圖 8.1 到圖 8.4 這幾張圖示。
8.2.3 ? Struts2 輸入校驗(yàn)出錯(cuò)信息的國際化配置形式
技術(shù)要點(diǎn)
Struts2 輸入校驗(yàn)配置文件中定義了 <message> 標(biāo)簽。該標(biāo)簽定義了很多輸入校驗(yàn)出錯(cuò)信息。之前還是使用硬編碼寫死在配置文件中。其實(shí)可以使用 Struts2 的國際化配置將這些錯(cuò)誤信息寫在屬性文件中。本小節(jié)就介紹一下如何將錯(cuò)誤信息定義在屬性文件中也為之后 Struts2 國際化章節(jié)做個(gè)基礎(chǔ)介紹。
配置文件中修改代碼介紹,介紹出錯(cuò)信息的 key 屬性定義。
使用中文的屬性文件出錯(cuò)信息定義代碼
演示代碼
配置文件代碼如下:
- <!------------文件名:RegisterAction-validation.xml-------------> ??
- <validators> ??
- ?????????<validator?type= "stringlength" > ??
- ???????????????????<param?name= "fieldName" >username</param> ??
- ???????????????????<param?name= "minLength" > 6 </param> ??
- ???????????????????<param?name= "maxLength" > 8 </param> ??
- ???????????????????<message?key= "userNameLengthRange" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "requiredstring" > ??
- ???????????????????<param?name= "fieldName" >username</param> ??
- ???????????????????<message?key= "userNameRequired" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "stringlength" > ??
- ???????????????????<param?name= "fieldName" >password</param> ??
- ???????????????????<param?name= "minLength" > 6 </param> ??
- ???????????????????<param?name= "maxLength" > 8 </param> ??
- ???????????????????<message?key= "passwordLength" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "requiredstring" > ??
- ???????????????????<param?name= "fieldName" >password</param> ??
- ???????????????????<message?key= "passwordRequired" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "stringlength" > ??
- ???????????????????<param?name= "fieldName" >repassword</param> ??
- ???????????????????<param?name= "minLength" > 6 </param> ??
- ???????????????????<param?name= "maxLength" > 8 </param> ??
- ???????????????????<message?key= "repasswordLength" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "requiredstring" > ??
- ???????????????????<param?name= "fieldName" >repassword</param> ??
- ???????????????????<message?key= "repasswordRequired" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "fieldexpression" > ??
- ???????????????????<param?name= "fieldName" >password</param> ??
- ???????????????????<param?name= "fieldName" >repassword</param> ??
- ???????????????????<param?name= "expression" >password==repassword</param> ??
- ???????????????????<message?key= "repasswordEquals" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "required" > ??
- ???????????????????<param?name= "fieldName" >birthday</param> ??
- ???????????????????<message?key= "birthdayRequired" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "date" > ??
- ???????????????????<param?name= "fieldName" >birthday</param> ??
- ???????????????????<param?name= "min" > 1928 - 01 - 01 </param> ??
- ???????????????????<param?name= "max" > 2004 - 01 - 01 </param> ??
- ???????????????????<message?key= "birthdayRange" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "requiredstring" > ??
- ???????????????????<param?name= "fieldName" >mobile</param> ??
- ???????????????????<message?key= "mobileRequired" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "stringlength" > ??
- ???????????????????<param?name= "fieldName" >mobile</param> ??
- ???????????????????<message?key= "mobileLength" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "required" > ??
- ???????????????????<param?name= "fieldName" >age</param> ??
- ???????????????????<message?key= "ageRequired" ></message> ??
- ?????????</validator> ??
- ?????????<validator?type= "int" > ??
- ???????????????????<param?name= "fieldName" >age</param> ??
- ???????????????????<param?name= "min" > 1 </param> ??
- ???????????????????<param?name= "max" > 80 </param> ??
- ???????????????????<message?key= "ageRange" ></message> ??
- ?????????</validator> ??
- </validators>??
<!------------文件名:RegisterAction-validation.xml-------------> <validators> <validator type="stringlength"> <param name="fieldName">username</param> <param name="minLength">6</param> <param name="maxLength">8</param> <message key="userNameLengthRange"></message> </validator> <validator type="requiredstring"> <param name="fieldName">username</param> <message key="userNameRequired"></message> </validator> <validator type="stringlength"> <param name="fieldName">password</param> <param name="minLength">6</param> <param name="maxLength">8</param> <message key="passwordLength"></message> </validator> <validator type="requiredstring"> <param name="fieldName">password</param> <message key="passwordRequired"></message> </validator> <validator type="stringlength"> <param name="fieldName">repassword</param> <param name="minLength">6</param> <param name="maxLength">8</param> <message key="repasswordLength"></message> </validator> <validator type="requiredstring"> <param name="fieldName">repassword</param> <message key="repasswordRequired"></message> </validator> <validator type="fieldexpression"> <param name="fieldName">password</param> <param name="fieldName">repassword</param> <param name="expression">password==repassword</param> <message key="repasswordEquals"></message> </validator> <validator type="required"> <param name="fieldName">birthday</param> <message key="birthdayRequired"></message> </validator> <validator type="date"> <param name="fieldName">birthday</param> <param name="min">1928-01-01</param> <param name="max">2004-01-01</param> <message key="birthdayRange"></message> </validator> <validator type="requiredstring"> <param name="fieldName">mobile</param> <message key="mobileRequired"></message> </validator> <validator type="stringlength"> <param name="fieldName">mobile</param> <message key="mobileLength"></message> </validator> <validator type="required"> <param name="fieldName">age</param> <message key="ageRequired"></message> </validator> <validator type="int"> <param name="fieldName">age</param> <param name="min">1</param> <param name="max">80</param> <message key="ageRange"></message> </validator> </validators>
?
支持中文的國際化配置屬性文件代碼如下:
- <!---------------文件名:messageResource.properties--------------> ??
- #配置文件中<message>的key屬性定義 ??
- userNameLengthRange=用戶名長度必須在${minLength}-${maxLength}位之間 ??
- userNameRequired=請(qǐng)輸入用戶名 ??
- passwordLength=密碼長度必須在${minLength}-${maxLength}位之間 ??
- passwordRequired=請(qǐng)輸入密碼 ??
- repasswordLength=確認(rèn)密碼長度必須在${minLength}-${maxLength}位之間 ??
- repasswordRequired=請(qǐng)輸入確認(rèn)密碼 ??
- repasswordEquals=確認(rèn)密碼和密碼輸入不一致 ??
- birthdayRequired=請(qǐng)輸入生日日期 ??
- birthdayRange=輸入生日日期無效 ??
- mobileRequired=請(qǐng)輸入手機(jī)號(hào)碼 ??
- mobileLength=請(qǐng)輸入正確的手機(jī)號(hào)碼,號(hào)碼位數(shù)必須為 11 位 ??
- ageRequired=請(qǐng)輸入年齡 ??
- ageRange=年齡必須在${min}-${max}歲之間??
<!---------------文件名:messageResource.properties--------------> #配置文件中<message>的key屬性定義 userNameLengthRange=用戶名長度必須在${minLength}-${maxLength}位之間 userNameRequired=請(qǐng)輸入用戶名 passwordLength=密碼長度必須在${minLength}-${maxLength}位之間 passwordRequired=請(qǐng)輸入密碼 repasswordLength=確認(rèn)密碼長度必須在${minLength}-${maxLength}位之間 repasswordRequired=請(qǐng)輸入確認(rèn)密碼 repasswordEquals=確認(rèn)密碼和密碼輸入不一致 birthdayRequired=請(qǐng)輸入生日日期 birthdayRange=輸入生日日期無效 mobileRequired=請(qǐng)輸入手機(jī)號(hào)碼 mobileLength=請(qǐng)輸入正確的手機(jī)號(hào)碼,號(hào)碼位數(shù)必須為11位 ageRequired=請(qǐng)輸入年齡 ageRange=年齡必須在${min}-${max}歲之間
?
代碼解釋
( 1 ) 在配置文件中筆者對(duì) <message> 標(biāo)簽做了修改。使用了 key 屬性,這些 key <
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
