8.4 ? Struts2 輸入校驗器大全
在前幾節的輸入校驗的配置文件中讀者應該看到很多類型的 Struts2 的輸入校驗器。下面就對這些輸入校驗器做詳細介紹。
技術要點
介紹 Struts2 自帶的輸入校驗器。
演示代碼
在 xwork-2.0.4.jar 包中,請讀者在 \com\opensymphony\xwork2\validator\validators 路徑下找一個名字為“ default.xml ”的 xml 文件。在該文件中有所有 Struts2 自帶的輸入校驗器定義。具體代碼如下:
- <!-------------文件名: default .xml--------> ??
- ………… ??
- <validators> ??
- <validator?name= "required" ??
- class = "com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" /> ??
- <validator?name= "requiredstring" ??
- class = "com.opensymphony.xwork2.validator.validators.RequiredStringValidator" /> ??
- <validator?name= "int" ??
- class = "com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator" /> ??
- <validator?name= "double" ??
- class = "com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator" /> ??
- <validator?name= "date" ??
- class = "com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator" /> ??
- <validator?name= "expression" ??
- class = "com.opensymphony.xwork2.validator.validators.ExpressionValidator" /> ??
- <validator?name= "fieldexpression" ??
- class = "com.opensymphony.xwork2.validator.validators.FieldExpressionValidator" /> ??
- <validator?name= "email" ??
- class = "com.opensymphony.xwork2.validator.validators.EmailValidator" /> ??
- <validator?name= "url" ??
- class = "com.opensymphony.xwork2.validator.validators.URLValidator" /> ??
- <validator?name= "visitor" ??
- class = "com.opensymphony.xwork2.validator.validators.VisitorFieldValidator" /> ??
- <validator?name= "conversion" ??
- class = "com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator" /> ??
- <validator?name= "stringlength" ??
- class = "com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator" /> ??
- <validator?name= "regex" ??
- class = "com.opensymphony.xwork2.validator.validators.RegexFieldValidator" /> ??
- </validators>??
<!-------------文件名:default.xml--------> ………… <validators> <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> </validators>
?
以上代碼是所有 Struts2 輸入校驗器的定義,下面將這些輸入校驗器(一共有 13 個)的字段和非字段格式的校驗形式寫在如下,本例中沒有程序代碼示例,所有輸入校驗器的應用代碼都是筆者自己定義的。
- <!--?必填校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "required" > ??
- ??????<param?name= "fidleName" >field</param>????????????????? ??
- ??????<message>請輸入數據</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "required" >??????????? ??
- ??????????<message>請輸入數據</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ??
- ??<!--?必填字符串校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "requiredstring" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<param?name= "trim" > true </param>???????????????? ??
- ??????<message>請輸入數據</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "requiredstring" > ??
- ??????????<param?name= "trim" > true </param>?????????? ??
- ??????????<message>請輸入數據</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ??
- ??<!--?整數校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "int" > ??
- ??????<param?name= "fidleName" >field</param>????????????????? ??
- ??????<param?name= "min" > 1 </param> ??
- ??????<param?name= "max" > 80 </param> ??
- ??????<message>數字必須在${min}-${max}歲之間</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "int" > ??
- ??????????<param?name= "min" > 1 </param> ??
- ??????????<param?name= "max" > 80 </param> ??
- ??????????<message>數字必須在${min}-${max}歲之間</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ??
- ??<!--?浮點校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "double" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<param?name= "minExclusive" > 0.1 </param> ??
- ??????<param?name= "maxExclusive" > 10.1 </param>??????????? ??
- ??????<message>輸入浮點無效</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "double" > ??
- ??????????<param?name= "minExclusive" > 0.1 </param> ??
- ??????????<param?name= "maxExclusive" > 10.1 </param>??????????? ??
- ??????????<message>輸入浮點無效</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?日期校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "date" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<param?name= "min" > 2009 - 01 - 01 </param> ??
- ??????<param?name= "max" > 2019 - 01 - 01 </param> ??
- ??????<message>日期無效</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "date" > ??
- ?????????<param?name= "min" > 2009 - 01 - 01 </param> ??
- ?????????<param?name= "max" > 2019 - 01 - 01 </param> ??
- ?????????<message>日期無效</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ??
- ??<!--?表達式校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "expression" > ??
- ??????<param?name= "expression" >password==repassword</param> ??
- ??????????<message>兩者輸入不一致</message> ??
- ??</validator> ??
- ? ??
- ??<!--?字段表達式校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "fieldexpression" > ??
- ??????<param?name= "expression" >password==repassword</param> ??
- ??????<message>兩者輸入不一致</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "fieldexpression" > ??
- ??????????<param?name= "expression" ><![CDATA[#password==#repassword]]></param> ??
- ??????????<message>兩者輸入不一致</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ??
- ??<!--?郵件校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "email" > ??
- ??????<param?name= "fidleName" >field</param>????????????????? ??
- ??????<message>非法郵件地址</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "email" > ??
- ??????????<message>非法郵件地址</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?網址校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "url" > ??
- ??????<param?name= "fidleName" >field</param>????????????? ??
- ??????<message>無效網址</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "url" >????????????? ??
- ??????????<message>無效網址</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?visitor校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "visitor" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<param?name= "context" >fieldContext</param> ??
- ??????<param?name= "appendPrefix" > true </param>????????????? ??
- ??????<message>輸入校驗</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "visitor" >???????????? ??
- ??????????<param?name= "context" >fieldContext</param> ??
- ??????????<param?name= "appendPrefix" > true </param>????????????? ??
- ??????????<message>輸入校驗</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?類型轉換校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "conversion" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<message>類型轉換錯誤</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "conversion" > ??
- ??????????<message>類型轉換錯誤</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?字符串長度校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "stringlength" > ??
- ??????<param?name= "fidleName" >field</param> ??
- ??????<param?name= "minLength" > 1 </param> ??
- ??????<param?name= "maxLength" > 10 </param> ??
- ??????<param?name= "trim" > true </param>???????????????? ??
- ??????<message>字符串長度必須為 10 位</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "stringlength" > ??
- ??????????<param?name= "minLength" > 1 </param> ??
- ??????????<param?name= "maxLength" > 10 </param> ??
- ??????????<param?name= "trim" > true </param>????????????? ??
- ??????????<message>字符串長度必須為 10 位</message> ??
- ??????</field-validator> ??
- ??</field> ??
- ? ??
- ??<!--?正則表達式校驗?--> ??
- ??<!--?非字段校驗?--> ??
- ??<validator?type= "regex" > ??
- ??????<param?name= "fidleName" >field</param>????????????????? ??
- ??????<param?name= "expression" ><$/)]]></param> ??
- ??????<message>手機號碼必須為數字并且是 11 位</message> ??
- ??</validator> ??
- ??<!--?字段校驗?--> ??
- ??<field?name= "field" > ??
- ??????<field-validator?type= "regex" > ??
- ??????????<param?name= "expression" ><$/)]]></param> ??
- ??????????<message>手機號碼必須為數字并且是 11 位</message> ??
- ??????</field-validator> ??
- ??</field>??
<!-- 必填校驗 --> <!-- 非字段校驗 --> <validator type="required"> <param name="fidleName">field</param> <message>請輸入數據</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="required"> <message>請輸入數據</message> </field-validator> </field> <!-- 必填字符串校驗 --> <!-- 非字段校驗 --> <validator type="requiredstring"> <param name="fidleName">field</param> <param name="trim">true</param> <message>請輸入數據</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>請輸入數據</message> </field-validator> </field> <!-- 整數校驗 --> <!-- 非字段校驗 --> <validator type="int"> <param name="fidleName">field</param> <param name="min">1</param> <param name="max">80</param> <message>數字必須在${min}-${max}歲之間</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="int"> <param name="min">1</param> <param name="max">80</param> <message>數字必須在${min}-${max}歲之間</message> </field-validator> </field> <!-- 浮點校驗 --> <!-- 非字段校驗 --> <validator type="double"> <param name="fidleName">field</param> <param name="minExclusive">0.1</param> <param name="maxExclusive">10.1</param> <message>輸入浮點無效</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="double"> <param name="minExclusive">0.1</param> <param name="maxExclusive">10.1</param> <message>輸入浮點無效</message> </field-validator> </field> <!-- 日期校驗 --> <!-- 非字段校驗 --> <validator type="date"> <param name="fidleName">field</param> <param name="min">2009-01-01</param> <param name="max">2019-01-01</param> <message>日期無效</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="date"> <param name="min">2009-01-01</param> <param name="max">2019-01-01</param> <message>日期無效</message> </field-validator> </field> <!-- 表達式校驗 --> <!-- 非字段校驗 --> <validator type="expression"> <param name="expression">password==repassword</param> <message>兩者輸入不一致</message> </validator> <!-- 字段表達式校驗 --> <!-- 非字段校驗 --> <validator type="fieldexpression"> <param name="expression">password==repassword</param> <message>兩者輸入不一致</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[#password==#repassword]]></param> <message>兩者輸入不一致</message> </field-validator> </field> <!-- 郵件校驗 --> <!-- 非字段校驗 --> <validator type="email"> <param name="fidleName">field</param> <message>非法郵件地址</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="email"> <message>非法郵件地址</message> </field-validator> </field> <!-- 網址校驗 --> <!-- 非字段校驗 --> <validator type="url"> <param name="fidleName">field</param> <message>無效網址</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="url"> <message>無效網址</message> </field-validator> </field> <!-- visitor校驗 --> <!-- 非字段校驗 --> <validator type="visitor"> <param name="fidleName">field</param> <param name="context">fieldContext</param> <param name="appendPrefix">true</param> <message>輸入校驗</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="visitor"> <param name="context">fieldContext</param> <param name="appendPrefix">true</param> <message>輸入校驗</message> </field-validator> </field> <!-- 類型轉換校驗 --> <!-- 非字段校驗 --> <validator type="conversion"> <param name="fidleName">field</param> <message>類型轉換錯誤</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="conversion"> <message>類型轉換錯誤</message> </field-validator> </field> <!-- 字符串長度校驗 --> <!-- 非字段校驗 --> <validator type="stringlength"> <param name="fidleName">field</param> <param name="minLength">1</param> <param name="maxLength">10</param> <param name="trim">true</param> <message>字符串長度必須為10位</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="stringlength"> <param name="minLength">1</param> <param name="maxLength">10</param> <param name="trim">true</param> <message>字符串長度必須為10位</message> </field-validator> </field> <!-- 正則表達式校驗 --> <!-- 非字段校驗 --> <validator type="regex"> <param name="fidleName">field</param> <param name="expression"><$/)]]></param> <message>手機號碼必須為數字并且是11位</message> </validator> <!-- 字段校驗 --> <field name="field"> <field-validator type="regex"> <param name="expression"><$/)]]></param> <message>手機號碼必須為數字并且是11位</message> </field-validator> </field>
代碼解釋
( 1 )必填校驗器 required 是用來判斷輸入的字段是否為空。如果未輸入任何數據則會顯示錯誤信息。 fieldName 屬性是指定校驗的字段名。這個屬性是所有 Struts2 自帶的輸入校驗器都具有的屬性。因此介紹其他輸入校驗器時,筆者略過不談。但是讀者自己要知道該屬性是輸入校驗器共有的。該校驗器其他標簽都和前幾章節中有過介紹,筆者也略過不談。
( 2 )必填字符串校驗器 requiredstring 用來判斷輸入字段是否是 1 個非空字符串 。如果不是也顯示錯誤信息。其中的 trim 屬性是在校驗之前對字符串進行處理。默認是“ true ”。
( 3 )整數校驗器 int 判斷輸入的字段數據是在一個整數范圍內。 min 屬性是最小值, max 是最大值。 <message> 標簽內可用“ ${ 屬性名 } ”格式類表示他們具體的值。
( 4 )浮點校驗器 double 是 t 判斷輸入的字段數據是在 1 個浮點數范圍內。 minInclusive 表示這個范圍的最小值。 max Inclusive 表示這個范圍的最大值。還有 minExclusive 和 maxExclusive 兩個屬性,前者表明在浮點范圍之外的最小值,后者是在浮點范圍之外的最大值。
注意:以上四個屬性如果沒有聲明,則輸入校驗不會去檢查。
( 5 )日期校驗器 date 判斷輸入的字段的日期值是否在 1 個日期范圍內。 min 是該范圍的最小值, max 是最大值。他們兩個屬性也和浮點校驗器的四個屬性相同,如果沒有聲明則輸入校驗不檢查。
( 6 )表達式校驗器 expression 只有非字段校驗格式。不能在字段校驗中聲明。它的屬性也是 expression 。如代碼所示開發者可以使用 OGNL 表達式來定義校驗規則。
( 7 )字段表達式校驗器 fieldexpression 判斷字段是否滿足一個表達式。如代碼所示,當用來判斷輸入的密碼和確認密碼值是否一致就可以使用該校驗器。它的屬性 expression 和表達式校驗器相同。不過它可以用在字段校驗中。
( 8 )郵件校驗器 email 來判斷輸入的字段是 1 個 email 時候是否符合 email 的格式。
( 9 )網址校驗器 ur l 來判斷輸入的字段是 1 個網址時候是否符合網址的格式。
( 10 ) visitor 校驗器就是判斷集合類型的字段。前面章節有所介紹。這里在重申一下 context 屬性是可以應用的集合類型中元素對象的別名。 appendPrefix 屬性是指定在錯誤信息中前面是否加上特定前綴。該前綴內容可在 <message> 標簽中定義。另外這兩個屬性也是沒有聲明時候,校驗器不會去執行檢查。
( 11 )類型轉換校驗器 conversion 用來判斷輸入字段是否進行類型轉換。它有 1 個 repopulateField 屬性,如果為“ true ”表明如果發生類型轉換錯誤,返回到 struts.xml 中指定的 Action 的 input 視圖界面時候還是否把原來錯誤的輸入內容顯示出來。“ false ”則相反。從這也可以看出筆者一直堅持的觀點類型轉換也屬于輸入校驗的一種是有理論依據的。
( 12 )字符串長度校驗器 stringlength 用于判斷輸入的字符串長度是否是指定的長度范圍。其中 minLength 是最小字符串長度, maxLength 是最大字符串長度。 trim 屬性和上述必填字符串校驗器 requiredstring 中 trim 屬性擁有相同功能。這三者也是屬于不聲明則不執行檢查的可選屬性。
( 13 )正則表達式校驗器 regex 檢查字段輸入值是否和 1 個正則表達式匹配。 expression 屬性中內容就是該正則表達式。還有個 caseSensitive 屬性,為“ true ”則表明匹配時候對字母大小寫敏感。反之則不敏感。如代碼所示筆者用了 1 個判斷輸入的值是否是 11 位,全部由數字組成的正則表達式。對于輸入手機號碼數據的字段,該校驗規則是最適用的。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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