程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts2數據輸入校驗(1) —— 函數驗證

Struts2數據輸入校驗(1) —— 函數驗證

編輯:關於JAVA

用struts2標簽庫來實現上述目的的基本原理:

錯誤消息分為field級和action級,都在ActionSupport類中預定義了,不同的是,

fieldError是通過一個Map來實現,事實上記錄了field的名字和錯誤信息,因此能在頁面上對應的 field中顯示;

而actionError是通過一個Collection實現,沒有記錄報錯的來源,只記錄了錯誤信息。

注意,下面是簡要流程:

(1)頁面提交到action之後,首先struts會嘗試對輸入的字符串信息根據Action中定義的屬性類型進行 類型匹配及轉換,如果輸入為空,它會將內容置為該類型的缺省值(0、0.0、空字符串等等),對於數據 格式不匹配的情況,比如說在age欄裡面輸入字母等等,struts會自動提示默認的錯誤,並返回input,這 一工作是struts2自動完成的。

(2)然後,驗證機制生效,調用validate()函數和XML驗證框架中的驗證邏輯(《Struts2 數據輸入校 驗(2) —— XML驗證 》會提到),檢查的同時會因為驗證錯誤調用了addFieldError()和 addActionError()。頁面提交之前,struts會調用ActionSupport(嚴格說是ValidationAware接口)的 hasErrors()方法,該方法很簡單,就是檢查fieldError的Map和actionError的Collection是否為空,如 果均為空,則調用execute()方法[*]進行業務邏輯的調度,否則返回error。

(3)最後,程序會根據返回信息執行forward操作,struts.xml中則定義了這些返回值所對應的跳轉邏 輯。

如果有錯誤返回,錯誤信息會在頁面上提示

在Action中所有addFieldError()設置的信息將在對應的field位置顯示;

在Action中所有addActionError()設置的信息將不會顯示,除非在頁面中定義了s:actionerror控件, 那麼錯誤將以ul的格式顯示。

對多驗證和跳轉邏輯的支持

對於一些Action如果需要重用,struts也提供了支持。

上述[*]處,你也可以指定其它任意的名字,這需要在struts.xml中修改對應action的method屬性

<action name="XXXAction" class="com.myspace.myname.XXXAction" 

method="newExcuteName">
<result>success.jsp</result>
</action>

同時在XXXAction中我們需要定義一個方法

public String newExcuteName(){ /*dummy code*/ }

如果同時還定義了

public void validateNewExcuteName(){ /* dummy code */ }

那麼在執行validate()之前,程序會先執行validateNewExcuteName()方法

可以考慮把所有公用的驗證邏輯放到validate()方法中

上述過程完全是靠java反射機制實現的,效率會低一些,所以除非真有必要,否則不用。

錯誤提示字符串的本地化

在validator方法中直接寫錯誤信息固然方便,但不算是一個好習慣,同時也不能支持本地化。下面簡 單說明本地化的兩種方式

1、全局國際化默認的錯誤提示,首先在struts.xml中加入常量

<struts>
<constant name="struts.custom.i18n.resources" value="message"></constant>
</struts>

然後在與struts.xml同級的位置建立message.properties中寫入

xwork.default.invalid.fieldvalue={0} error

2、針對某個Action的驗證錯誤提示

在與XXXAction同級目錄下建立與該Action同名的屬性文件

XXXAction.properties中寫入

invalid.fieldvalue.字段名=錯誤信息

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved