Struts2 輸入校驗
Struts2 的表單輸入校驗有多種方法。
- 重寫 ActionSupport 類的 validate() 方法。
將需要驗證的邏輯寫在該方法中,那么當執行該Action的時候會先執行該方法再執行execute()方法。但這個方法有一個缺陷,就是一個表單只能對應一個Action. - 重寫 validateXxx 方法。
比如在 LoginAction 類中,我們想有驗證login表單和regist表單的兩個驗證方法,則分別定義validateLogin()
和validateRegist()
方法,然后在配置 struts.xml 時指定 action=login 時執行 login() 方法,action=regist 時執行 regist() 方法,這樣就會先執行 validateLogin 或者 validateRegist, 校驗成功時再執行login()
和regist()
。這個方法的邏輯比較清晰,相對第一個方法要好。 - 使用 Struts2 驗證框架,利用
***-validation.xml
配置文件
比如執行 login 表單邏輯的 LoginAction.java 中定義了正常的 getter 和 setter 方法,就是一個正常的Action類。那么驗證 login 表單就可以用LoginAction-validation.xml
來驗證,而且兩個文件要放在同一個目錄中。這個xml文件配置舉例如下:
<?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>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="username.required"></message>
</field-validator>
</field>
<field name="psd">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="psd.required"></message>
</field-validator>
</field>
</validators>
上面的代碼是分別對用戶名和密碼字段進行驗證。
先說一下<field-validator>標簽,type屬性確定了校驗器的名稱。struts2中有很多可用的校驗器。如:
(1)必填校驗器 required
(2)必填字符串校驗器 requiredstring
(3)整數校驗器 int
(4)日期校驗器 date
(5)字段表達式校驗器 fieldexpression
(6)郵件地址校驗器 email
(7)網址校驗器 url
(8)字符串長度校驗器 stringlength
(9)正則表達式校驗器 regex
用的時候可以具體查一下有哪些param.
再說一下 <message
>標簽,這是當驗證不通過時返回給前端的提示信息,可以寫在<message></message>
標簽中間,但為了實現國際化,最好是使用上面 key 的方式。至于這個 key 在哪里呢,我們可以定義一個 errormsg.properties 文件放在 src 目錄下,里面都是key-value對,一般都是key 用英文,value用中文,實驗國際化。并不是這樣就完事兒了的,還要把這個properties文件部署到struts.xml才可以。具體部署如下:
1 <struts>
2 <!-- 下面這行是為了實現國際化 -->
3 <constant name="struts.custom.i18n.resources" value="errormsg"></constant>
5 <package name="default" extends="struts-default">