版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第六章Struts2類型轉(zhuǎn)換學習目標了解類型轉(zhuǎn)換的概念創(chuàng)建自定義類型轉(zhuǎn)換器什么是類型轉(zhuǎn)換所有頁面與控制器傳遞的數(shù)據(jù)均為String類型,而我們在對其進行處理時可能會用到各種數(shù)據(jù)類型,程序無法自動完成數(shù)據(jù)類型的轉(zhuǎn)換,需要我們在代碼中手動完成,這個過程稱為類型轉(zhuǎn)換。舉例電話號碼和日期轉(zhuǎn)換頁面中的生日字段,就需要相應的轉(zhuǎn)換,傳統(tǒng)的手動類型轉(zhuǎn)換如下:SimpleDateFormatsdf=newSimpleDateFormat(“yyyy-MM-dd”);Datebirthday=null;try{ birthday=sdf.parse(request.getParameter(“birthday”));}catch(ParseExceptione){ e.printStackTrace();}創(chuàng)建自定義類型轉(zhuǎn)換器Struts2有內(nèi)置的類型轉(zhuǎn)換器,如果內(nèi)置類型轉(zhuǎn)換器無法滿足你的應用需求,你可以開發(fā)自己的類型轉(zhuǎn)換器。要創(chuàng)建一個類型轉(zhuǎn)換器,你需要實現(xiàn)ognl.TypeConverter接口,該接口中只有一個方法,如下所示:publicObjectconvertValue(Mapcontext,Objecttarget,Membermember,StringpropertyName,Objectvalue,ClasstoType)該方法過于復雜,所以在OGNL中還提供了一個工具類ognl.DefaultTypeConverter,該項類實現(xiàn)了TypeConverter接口,并提供了一個簡化的converValue()方法,如下所示:publicObjectconvertValue(Mapcontext,Objecttarget,ClasstoType)參數(shù)context是表示OGNL上下文的Map對象,target是需要轉(zhuǎn)換的對象,toType是要轉(zhuǎn)換的目標類型。編寫類型轉(zhuǎn)換器編寫類型轉(zhuǎn)換器時,除了可以繼承OGNL中的DefaultTypeConverter類外,還可以繼承struts2中給出的org.apache.struts2.util.StrutsTypeConverter抽象類。StrutsTypeConverter繼承自ognl.DefaultTypeConverter類,它提供了兩個抽象的方法用于字符串和其它類型的相互轉(zhuǎn)換。這兩個方法如下所示:publicObjectconvertFromString(Mapcontext,String[]values,ClasstoClass)將一個或多個字符串值轉(zhuǎn)換為指定的類型。參數(shù)context是表示action上下文的Map對象,參數(shù)values是要轉(zhuǎn)換的字符串值,參數(shù)toClass是要轉(zhuǎn)換的目標類型。publicStringconvertToString(Mapcontext,Objectobj)將指定的對象轉(zhuǎn)換為字符串。參數(shù)context是表示action上下文的Map對象。參數(shù)obj是要轉(zhuǎn)換的對象。配置類型轉(zhuǎn)換器在struts2中提供了兩種方式來配置轉(zhuǎn)換器,一種是應用于全局范圍的類型轉(zhuǎn)換器,另一種是應用于特定類的類型轉(zhuǎn)換器。1:應用于全局范圍的類型轉(zhuǎn)換器要指定應用于全局范圍的類型轉(zhuǎn)換器,需要在CLASSPATH的根路徑下(通常是WEB-INF/classes目錄)創(chuàng)建一個名為perties的文件,并提供一個屬性定義,屬性名是要轉(zhuǎn)換的類的名稱,屬性值是類型轉(zhuǎn)換器的類名稱。例如,為所有的java.util.Date對象提供一個DateTypeConverter轉(zhuǎn)換器,你需要在perties文件中添加下列內(nèi)容:.neusoft.converter.DateTypeConverter2:應用于特定類的類型轉(zhuǎn)換器如果你的類型轉(zhuǎn)換器只是針對某個類的屬性,那么可以采用這種方式,配置針對某個特定類的類型轉(zhuǎn)換器,方法是在類所在的包中創(chuàng)建ClassNperties文件(ClassName替換為實際的類名),并提供一個屬性定義,左邊是要轉(zhuǎn)換的類的屬性名,右邊是類型轉(zhuǎn)換器的類名稱。例如:要為User類指定一個類型轉(zhuǎn)換器,你需要在該類所在的包中創(chuàng)建Uperties文件,并添加下列內(nèi)容:.neusoftconverter.DateTypeConverter日期轉(zhuǎn)換DateTypeConverter.javaLoginAction.java與login.jsp電話轉(zhuǎn)換一User.javaTel.java電話轉(zhuǎn)換二LoginAction.javalogin.jsp電話轉(zhuǎn)換三類型轉(zhuǎn)換錯誤的處理一用戶在填寫表單時,經(jīng)常會輸入一些格式不正確的數(shù)據(jù),例如,在需要int數(shù)據(jù)的地方輸入了abc,或者在需要日期格式是1983-1-2的地方,輸入了1983/1/2。格式不正確轉(zhuǎn)換的數(shù)據(jù)在類型轉(zhuǎn)換過程中會導致錯誤的發(fā)生。當發(fā)生了類型轉(zhuǎn)換錯誤后,struts2會將轉(zhuǎn)換錯誤放到ActionContext中一個名為conversionErrors的Map對象中。在出現(xiàn)類型轉(zhuǎn)換錯誤后,你可以選擇是否向用戶提示轉(zhuǎn)換錯誤。類型轉(zhuǎn)換錯誤的處理二在struts2中有兩個攔截器負責類型轉(zhuǎn)換錯誤,如下所示:erceptor.ConversionErrorInterceptor:conversionErrorInterceptor把在ActionContext的conversionErrorsMap中找到的所有錯誤都添加為action的字段錯誤(Action需要實現(xiàn)ValidationAware接口,ActionSupport基類實現(xiàn)了該接口),此外,它還把有轉(zhuǎn)換錯誤的字段的原始值保存下來,這樣之后對這個值的請求得到的就是原始值而不是action中的值。這有什么好處呢?假如你在user.age字段上輸入abc,由于類型錯誤,User對象的age屬性將是0。由于出現(xiàn)了錯誤,你把請求重新導向到輸入頁面,此時表達式user.age將會調(diào)用getUser().getAge()方法,于是在表單字段上用戶看到的是0,而不是原始的錯誤值。顯然,這很容易讓用戶迷惑,這不是一種用戶友好的提示方式。erceptor.StrutsConversionErrorInterceptorStrutsConversionErrorInterceptor繼承自ConversionErrorInterceptor類,但是它只在字段值不是null、不是“”或者不是{“”}(表示只有一個空字符串元素的字符串數(shù)組)的情況下,把轉(zhuǎn)換錯誤從ActionContext添加到action的字段錯誤。這在Web環(huán)境下是有用的。在struts-default.xml文件中定義了conversionError攔截器,類型是StrutsConversionErrorInterceptor,這個攔截器已經(jīng)包含在defaultStack攔截器棧中。當發(fā)生了轉(zhuǎn)換錯誤后,struts2會將請求導向到“input”結(jié)果代碼映射的視圖,因此要向用戶提示轉(zhuǎn)換錯誤信息,你還需要在Action的配置中添加input結(jié)果映射。類型轉(zhuǎn)換錯誤的處理總結(jié)總結(jié)一下:要向用戶報告類型錯誤,需要實現(xiàn)下面三個步驟:1、引用defaultStack攔截器棧(包含了conversionError攔截器)2、讓Action類從ActionSupport繼承(實現(xiàn)了ValidationAware接口)3、為Action配置添加input結(jié)果映射修改錯誤信息顯示內(nèi)容輸出錯誤信息可以使用fielderror標簽來輸出字段的錯誤信息。當填寫內(nèi)容格式不正確時會在頁面上出現(xiàn)Invalidfieldvalueforfield“xxx.xxx”,很顯然這不是我們想要的,我們自定義錯誤信息,步驟如下:1、在src下新建資源屬性文件夾ApplicationRperties,并添加下列內(nèi)容:xwork.default.invalid.fieldvalue=字段”{0}”的值無效。 在輸出類型轉(zhuǎn)換錯誤消息時,占位符{0}將自動被字段名所替換。2、編輯struts.xml文件,使用struts.custom.i18n.resources屬性設(shè)置默認的資源包,如下所示:<constantname=“struts.custom.i18n.resources”value=“ApplicationResources”/>I18N消息鍵xwork.default.invalid.fieldvalue對所有字段的類型轉(zhuǎn)換錯誤都適用,如果你想為某個特定字段定制錯誤消息,則可以在Action相關(guān)的資源文件中添加I18N消息鍵invalid.fieldvalue.xxx來指定錯誤消息,xxx是字段名稱。資源文件的組織和加載順序可以I18N章節(jié)。舉
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政總廚個人述職報告
- 糖尿病護理方案
- 3.3.1鹽類的水解酸堿性高二上學期化學人教版(2019)選擇性必修1
- 足跟痛的診斷與治療
- 保護牙齒小班安全教案反思
- 荷塘月色說課稿
- 安踏企業(yè)五年戰(zhàn)略規(guī)劃
- 生物物理學實驗室安全操作
- 機場租賃合同
- 健身中心土地租賃協(xié)議
- 藍色簡約世界標準日(標準體系促發(fā)展 良好行為增效益)
- 中職英語1 基礎(chǔ)模塊 Unit 3 shopping
- 2024年高壓電工操作證考試復習題庫及答案(共三套)
- 人際需求和孤獨感在青少年網(wǎng)絡游戲障礙與抑郁間的鏈式中介作用
- 醫(yī)美行業(yè)分析報告
- 廣州介紹課件
- 中國普通食物營養(yǎng)成分表(修正版)
- 2024-2025學年人教版一年級數(shù)學上冊 期中綜合測試卷
- 2024年北京市第一次普通高中學業(yè)水平合格性考試英語仿真模擬卷03(全解全析)
- 2024至2030年中國綜合能源服務行業(yè)運營動態(tài)及投資規(guī)模預測報告
- 大學介紹清華大學宣傳
評論
0/150
提交評論