08 05Struts 2.x驗證框架

1 驗證框架基礎使用

只要是MVC的框架,都會提供有驗證框架,但是需要擺正一個明確的態度,任何一個框架的前端驗證框架都不好用。

在之前的驗證操作之中,都使用的是validate()方法進行的手工編寫,但是這樣的手工編寫難度太高了,而且也太麻煩了,所以在開發之中可以利用驗證框架來解決此類問題。

如果有驗證框架了,那麼就沒有必要去覆寫validate()方法了,但是驗證框架依然基於validate()的操作形式使用。

1、首先需要有一個執行數據處理的Action——NewsAction;
2、爲這個Action設置一個驗證規則文件,名稱是:NewsAction-validation.xml
(1)此文件要與NewsAction保存在同一個包中;

<?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">

3、定義NewsAction-validation.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="news.nid">
		<field-validator type="required">
			<message>【驗證框架】新聞編號不允許爲空!</message>
		</field-validator>
	</field>
	<field name="news.ntitle">
		<field-validator type="requiredstring">
			<message>【驗證框架】新聞標題不允許爲空!</message>
		</field-validator>
	</field>
	<field name="news.ncontent">
		<field-validator type="requiredstring">
			<message>【驗證框架】新聞內容不允許爲空!</message>
		</field-validator>
	</field>
	<field name="news.npubdate">
		<field-validator type="date">
			<message>【驗證框架】發佈日期不允許爲空!</message>
		</field-validator>
	</field>
</validators>

此時的代碼幾乎沒有做任何的修改,而是直接使用了這樣一個配置文件實現了數據的驗證,並且橫向替代了validate()方法,從代碼的簡潔度來講,此類操作更加容易。

依然只能夠很無奈的發現,此時的驗證框架即使可以使用,也是在數據賦值成功之後。

2 驗證加強

實際上在驗證框架裏面還可以做許多的事情,例如:驗證數字的範圍是否正確,長度是否合適,以及發佈日期是否滿足、正則操作是否可用等等。
範例:編寫NewsAction-validation.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="news.nid">
		<field-validator type="int">
			<param name="min">10</param>
			<param name="max">30</param>
			<message>【驗證框架】id必須在 ${min} 和${max}之間</message>
		</field-validator>
	</field>
	<field name="news.ntitle">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<param name="minLength">4</param>
			<param name="maxLength">10</param>
			<message>【驗證框架】新聞標題長度應爲${minLength}-${maxLength}</message>
		</field-validator>
	</field>
	<field name="news.ncontent">
		<field-validator type="regex">
			<param name="expression"><![CDATA[\w+.\w+.\w+]]> </param>
			<message>【驗證框架】新聞內容應爲鏈接形式</message>
		</field-validator>
	</field>
	<field name="news.npubdate">
		<field-validator type="date">
			<message>【驗證框架】發佈日期不允許爲空!</message>
		</field-validator>
	</field>
</validators>

即便現在可以進行驗證了,那麼問題依然存在,它只是橫向替代validate()。但是如果數據類型輸入有問題,那麼依然會在後臺出現錯誤,並且此時會顯示的錯誤信息是:Invalid field value for field "news.nid".,這樣的信息是可以修改的,只需要修改Messages.properties文件即可。
範例:修改Messages.properties文件,增加錯誤顯示

invalid.fieldvalue.news.nid=輸入錯誤,新聞編號必須輸入數字!
invalid.fieldvalue.news.npubdate=輸入錯誤,發佈日期格式必須爲(yyyy-MM-dd)

以上的信息實際上是數據類型轉換的錯誤信息,這樣的錯誤信息是在出錯後自動使用的,也向fieldErrors中保存。

不管是驗證方法還是驗證框架,最爲核心的概念:
(1)所有的錯誤信息都使用fieldErrors返回,使用addFieldError()添加錯誤;
(2)所有的驗證框架都有一個最本質的問題——數據賦值之後執行。
正因爲驗證框架的執行順序有問題,,所以在實際的開發之中,它只能作爲二號驗證器使用,或者不使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章