文章目錄
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)所有的驗證框架都有一個最本質的問題——數據賦值之後執行。
正因爲驗證框架的執行順序有問題,,所以在實際的開發之中,它只能作爲二號驗證器使用,或者不使用。