struts2類型轉換和驗證

struts2類型轉換

null屬性的處理

當屬性是一個javaBean時,將由對象工廠創建所需的對象,
當屬性是聲明爲一個Collection或者是List,那麼將構建一個ArrayList
當屬性聲明爲一個Map 時將構建一個HashMap,

jsp頁面爲List,Map,Set賦值

javaBean
javaBean變量名.屬性 的方式爲javaBean的屬性賦值
List
變量名[index].屬性 index是裏list的索引  
可以使用泛型或是配置文件指定List存儲的類型
配置文件
Element_list變量=存儲類型的全類名
Map
和List一樣 ,只不過索引可以不是整形,例如字符串啊
變量名[索引名].屬性 或 變量名.索引名.屬性
迭代Map其實是迭代Map返回的entrySet集合
可以使用泛型或是配置文件指定Map存儲的類型
配置文件
指定value: Element_Map變量=存儲類型的全類名
指定key: Key_Map變量=存儲類型的全類名
Set
當set存在的唯一標識有效時
變量名(唯一標識的值).屬性
當set存在的唯一標識無效時
變量名.setNew[index].屬性
這裏是新建一個對象併爲它的屬性賦值。
注意:這裏的index只是區別你要創建的對象,不代表你創建對象的唯一標識的值,
唯一標識可以是字符串,

因爲Set是不維護存儲對象的順序,所以Struts2提供了用set存儲對象
的一個屬性作爲唯一識別即索引,來查找對象的方法,這就要求set不爲空,在我的版本2.3中,

會默認創建set,當set爲空時。


並且要指定唯一標識,通過 類名-conversion.properties 文件指定唯一標識
KeyProperty_要轉化的變量名=唯一標識名。
Element_Set變量=存儲的全類名 ,當然這裏也可以通過泛型指出
配置文件還可以指定是否當屬性爲空時要自動創建對象。
CreateIfNull=true

全局類型轉換器

在類路徑下配置一個xwork-conversion。properties文件
裏面指定要轉化的類型
java.lang.Date=com.xiaoming.struts.DateConversion

通過註解配置類型轉化


類型轉化出錯的處理

錯誤保存在裏ActionContext的ConversionErrors裏面
對於某個類的字段單獨指定,在 類的國際化資源 文件中,
invalid.fieldvalue.xxx=message的方式指定
對於轉換錯誤默認在I18N鍵xwork.default.invalid.fieldvalue裏面定義
可以在國際化資源文件裏面覆蓋,這也就是全局類型轉化配置錯誤消息的配置
鍵就是xwork.default.invalid.fieldvalue值自定義,國際化資源文件就是
在struts中配置的默認的資源文件key=struts.custom.i18n.resources 值是默認的資源文件名,
這裏的配置請參考國際化配置。
這些錯誤在ActionContext被添加到了conversionErrors的一個map中 

struts2數據驗證

手動驗證

Action中編程驗證不推薦

在validateXxx()方法中驗證
Xxx是方法名第一個字符大寫,
攔截器還會檢測validateDoXxx方法
在validate()中驗證
所有的validateXxx()方法之後調用

通過框架驗證

字段驗證
驗證錯誤別寫在fieldErrors裏面
ActionContext裏面提供了方法
普通驗證(非字段驗證)
例如說兩次輸入的密碼要相等
普通驗證優先於字段驗證,普通驗證的執行順序安裝配置順序決定
驗證錯誤寫在actionErrors裏面
錯誤顯示
com.opensymphony.xwork2.ValidationAware裏面定義了錯誤消息保存的方法
短路驗證
在驗證器上配置一個short-circuit="true",這樣當出現錯誤時就不會
向下執行後面的驗證器了
自定義驗證器
在類路徑下建立文件validators.xml
strut2內置的驗證器
在xwork-core-2.3.30.jar包下的default.xml文件中
配置驗證規則
Action類名-validation.xml
爲Action下的所有方法都配置驗證規則
Action類名-請求名-validation.xml
爲Action下的某個請求配置驗證規則
驗證文件的查找
Action類名-validation.xml所有的請求都會默認查找這個文件,
先於Action類名-請求名-validation.xml文件被查找
文件的配置規則是疊加的,不是覆蓋
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章