類型轉(zhuǎn)換精品課件_第1頁
類型轉(zhuǎn)換精品課件_第2頁
類型轉(zhuǎn)換精品課件_第3頁
類型轉(zhuǎn)換精品課件_第4頁
類型轉(zhuǎn)換精品課件_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、類型轉(zhuǎn)換第1頁,共30頁,2022年,5月20日,8點29分,星期二3.1 類型轉(zhuǎn)換的介紹3.1.1 類型轉(zhuǎn)換的意義3.1.2 簡單的類型轉(zhuǎn)換示例 第2頁,共30頁,2022年,5月20日,8點29分,星期二3.1.1 類型轉(zhuǎn)換的意義Web應(yīng)用程序的交互都是建立在HTTP之上的,互相傳遞的都是字符串。也就是說服務(wù)器接收到的來自用戶的數(shù)據(jù)只能是字符串或者是字符數(shù)組,而在Web應(yīng)用的對象中,往往使用了多種不同的類型,如整數(shù)(int)、浮點數(shù)(float)、日期(Date)或者是自定義數(shù)據(jù)類型等。因此在服務(wù)器端必須將字符串轉(zhuǎn)換成合適的數(shù)據(jù)類型,如圖3-1所示。第3頁,共30頁,2022年,5月20日

2、,8點29分,星期二3.1.2 簡單的類型轉(zhuǎn)換示例這個示例通過用戶輸入頁來接受用戶輸入姓名、年齡、注冊日期,然后將用戶輸入頁提交到相應(yīng)的Action進行處理,最后再通過輸出頁輸出用戶的輸入信息。步驟如下。第4頁,共30頁,2022年,5月20日,8點29分,星期二3.2 Struts 2內(nèi)建的類型轉(zhuǎn)換器Sturts 2為常用的數(shù)據(jù)類型提供了內(nèi)建的類型轉(zhuǎn)換器,所以根本不用自定義轉(zhuǎn)換器。對于內(nèi)建的轉(zhuǎn)換器,Struts在遇到這些類型時,會自動去調(diào)用相應(yīng)的轉(zhuǎn)換器進行類型轉(zhuǎn)換。下面來看Struts 2提供了哪些內(nèi)建的類型轉(zhuǎn)換器,以及這些內(nèi)建類型轉(zhuǎn)換器的使用。第5頁,共30頁,2022年,5月20日,8點

3、29分,星期二3.2.1 內(nèi)建轉(zhuǎn)換器介紹從上面那個例子可以看出,Sturts 2為常用的數(shù)據(jù)類型提供了內(nèi)建的類型轉(zhuǎn)換器,所以根本不用自定義轉(zhuǎn)換器。對于內(nèi)建的轉(zhuǎn)換器,Struts在遇到這些類型時,會自動去調(diào)用相應(yīng)的轉(zhuǎn)換器。下面列舉了全部的內(nèi)建轉(zhuǎn)換器。具體如下?;緮?shù)據(jù)類型以及其封裝類。包括:boolean和Boolean、char和Character、int和Integer、long和Integer、float和Float、double和Double。完成字符串和基本數(shù)據(jù)類型或其封裝類之間的轉(zhuǎn)換。日期類型。使用當(dāng)前區(qū)域的短格式轉(zhuǎn)換,即DateFormat.getInstance(DateForm

4、at.SHORT)。完成字符串和日期類型之間的轉(zhuǎn)換。集合(Collection)類型。將request.getParameterValues(String arg)返回的字符串?dāng)?shù)據(jù)與轉(zhuǎn)換。集合元素為String類型。集合(Set)類型。與Collection的轉(zhuǎn)換相似,只是去掉了相同的值。集合元素為String類型。數(shù)組類型。將request.getParameterValues(String arg)返回的字符串?dāng)?shù)組中的每個字符串值取出組成一個數(shù)組。數(shù)組元素為String類型。第6頁,共30頁,2022年,5月20日,8點29分,星期二3.2.2 基本數(shù)據(jù)類型轉(zhuǎn)換器下面再來看下Struts

5、2提供的內(nèi)建類型轉(zhuǎn)換器,是如何完成字符串和基本數(shù)據(jù)類型之間的轉(zhuǎn)換的。第7頁,共30頁,2022年,5月20日,8點29分,星期二3.2.3 基本數(shù)據(jù)類型的封裝類轉(zhuǎn)換器Struts 2不但提供了基本數(shù)據(jù)類型轉(zhuǎn)換器,同時也提供了基本數(shù)據(jù)類型封裝類的轉(zhuǎn)換器。其用法和基本數(shù)據(jù)類型基本一樣,只需修改業(yè)務(wù)控制器中的屬性為對應(yīng)的封裝類就可以了。第8頁,共30頁,2022年,5月20日,8點29分,星期二3.2.4 數(shù)組類型轉(zhuǎn)換器Struts 2還提供了一個數(shù)組類型的轉(zhuǎn)換器。這個轉(zhuǎn)換器非常有用,比如多個表單元素的name屬性相同,那么提交的參數(shù)就不再是字符串而是一個字符串?dāng)?shù)組。通過Sturts 2提供的數(shù)組類

6、型的轉(zhuǎn)換器就能很方便的將多個相同name屬性的表單元素的值封裝到Action中的一個數(shù)組中。第9頁,共30頁,2022年,5月20日,8點29分,星期二3.2.5 集合類型轉(zhuǎn)換器上面介紹的是通過字符串?dāng)?shù)組來接受參數(shù)值,同樣也可以通過集合類型來接受參數(shù)值。Struts 2提供的集合類型轉(zhuǎn)換器,會將參數(shù)值自動賦值到集合類型屬性中。第10頁,共30頁,2022年,5月20日,8點29分,星期二3.3 OGNL表達式語言Struts 2已經(jīng)實現(xiàn)了一些常用的類型轉(zhuǎn)換器,但是這些類型轉(zhuǎn)換器畢竟還是有限的。如果是開發(fā)者自己定義的數(shù)據(jù)類型,就必須自定義類型轉(zhuǎn)換器來進行轉(zhuǎn)換。在Struts 2中自定義類型轉(zhuǎn)化器

7、是非常方便和簡單。因為Struts 2的類型轉(zhuǎn)換是基于OGNL來實現(xiàn)的,所以在介紹自定義類型轉(zhuǎn)換器之前先簡單介紹OGNL。第11頁,共30頁,2022年,5月20日,8點29分,星期二3.3.1 簡單介紹OGNL以及如何下載OGNL源代碼OGNL(Object Graph Navigation Language)是一種強大的表達式語言。可以通過OGNL提供的TypeConvert接口以及實現(xiàn)了TypeConvert的DefaultTypeConvert類來實現(xiàn)自定義的類型轉(zhuǎn)換器。OGNL提供的類和接口全部包含在這個庫文件中,這些庫文件中都是已經(jīng)編譯好的class文件,為了能查看這些類的源代碼必

8、須先下載OGNL的源代碼。以前下載的Struts 2源代碼中只包含struts2-core庫文件中的代碼,其他的源代碼必須自行下載。第12頁,共30頁,2022年,5月20日,8點29分,星期二3.3.2 在Eclipse中查看OGNL類文件因為導(dǎo)入的庫文件都是已經(jīng)編譯好的class文件,而不是源文件。必須把這些class文件和下載好的源代碼進行關(guān)聯(lián),這樣就能在Eclipse中查看這些庫文件中的類了。具體步驟如下。第13頁,共30頁,2022年,5月20日,8點29分,星期二3.4 自定義類型轉(zhuǎn)換器Struts 2已經(jīng)實現(xiàn)了一些常用的類型轉(zhuǎn)換器,但是這畢竟這些類型轉(zhuǎn)換器畢竟還是有限的。如果是開

9、發(fā)者自己定義的數(shù)據(jù)類型,就必須自定義類型轉(zhuǎn)換器來進行轉(zhuǎn)換。第14頁,共30頁,2022年,5月20日,8點29分,星期二3.4.1 項目需求前面介紹的都是Sturts 2內(nèi)建的類型轉(zhuǎn)換器,下面來看如何創(chuàng)建自定義的類型轉(zhuǎn)換器。加入現(xiàn)在項目要求有如下一個輸入頁面,如圖3-23所示。在該輸入頁中的name文本框中輸入“firstName lasNamet”模式的字符串,注意中間使用空格隔開。單擊“input”按鈕提交,將該字符串轉(zhuǎn)換成一個Name對象。第15頁,共30頁,2022年,5月20日,8點29分,星期二3.4.2 實現(xiàn)自定義類型轉(zhuǎn)換器前面提到過,Struts 2的類型轉(zhuǎn)換器是基于OGNL實

10、現(xiàn)的。首先在導(dǎo)入的OGNL類庫中找到TypeConverter類,代碼如下所示。package ognl;import java.lang.reflect.Member;import java.util.Map;public interface TypeConverter public Object convertValue(Map context, Object target, Member member, String propertyName, Object value, Class toType);第16頁,共30頁,2022年,5月20日,8點29分,星期二3.4.3 注冊自定義類型

11、轉(zhuǎn)換器要想使自定義的類型轉(zhuǎn)換器起作用還必須將其在Web應(yīng)用中注冊。類型轉(zhuǎn)換器的注冊分為兩種,一種是局部類型轉(zhuǎn)換器,一種是全局類型轉(zhuǎn)換器。局部類型轉(zhuǎn)換器和全局類型轉(zhuǎn)換器從字面上來看,就是說一個可以進行全局的類型轉(zhuǎn)換,一個只能進行局部的類型轉(zhuǎn)換。注冊局部類型轉(zhuǎn)換器非常簡單,只需要在相應(yīng)的Action目錄下新建一個資源文件。該資源文件名格式如下。ActionNperties其中ActionName表示需要進行轉(zhuǎn)換的Action的類名,“-perties”字符串則是固定格式的。該文件也是一個典型資源文件,文件由鍵值對組成。如下所示。第17頁,共30頁,2022年,5月20日,8點29分,星期二3.4.

12、4 新建顯示頁測試程序自定義類型轉(zhuǎn)換器也注冊好了,現(xiàn)在來創(chuàng)建一個顯示頁類進行輸出。測試程序是否能完成類型轉(zhuǎn)換。步驟如下所示。第18頁,共30頁,2022年,5月20日,8點29分,星期二3.4.5 程序執(zhí)行流程項目成功的完成了預(yù)定的功能。為了加深印象,下面講一下程序執(zhí)行的流程。程序執(zhí)行中有兩個重要的步驟。從字符串轉(zhuǎn)換為自定義類型,其執(zhí)行流程圖如圖3-26所示。從自定義類型轉(zhuǎn)換為字符串類型,其執(zhí)行流程圖如圖3-27所示。第19頁,共30頁,2022年,5月20日,8點29分,星期二3.4.6 使用Struts 2提供的StrutsTypeConverter前面介紹了TypeConverter接口

13、以及實現(xiàn)TypeConverter接口的DefaultTypeConverter類。但是大家有沒有發(fā)現(xiàn)通過繼承DefaultTypeConverter類來實現(xiàn)自定義類型轉(zhuǎn)換器比較麻煩。其實Struts 2提供了一個StrutsTypeConverter的抽象類,開發(fā)時可以直接繼承這個類來進行轉(zhuǎn)換器的構(gòu)建。通過繼承該類來構(gòu)建類型轉(zhuǎn)換器,可以不用對轉(zhuǎn)換的類型進行判斷。這樣又可以省去不少的時間和代碼。StrutsTypeConverter類在導(dǎo)入的庫文件中。和關(guān)聯(lián)OGNL源代碼類型一樣,可以把class文件和源代碼進行關(guān)聯(lián)。在單擊“External Folder”按鈕后選擇Struts 2的解壓目錄

14、,這里分別選擇“src”、“core”、“src”、“main”、“java”目錄。單擊“ok”按鈕完成關(guān)聯(lián)。StrutsTypeConverter. class代碼如下所示。第20頁,共30頁,2022年,5月20日,8點29分,星期二3.5 局部類型轉(zhuǎn)換器和全局類型轉(zhuǎn)換器Struts 2注冊類型轉(zhuǎn)換器有兩種方式,一種是注冊局部類型轉(zhuǎn)換器,另一種是注冊全局類型轉(zhuǎn)換器。下面將分別介紹如何注冊局部類型轉(zhuǎn)換器和注冊全局類型轉(zhuǎn)換器,以及介紹兩種注冊方式的區(qū)別。第21頁,共30頁,2022年,5月20日,8點29分,星期二3.5.1 局部類型轉(zhuǎn)換器假設(shè)現(xiàn)在項目需要增加需求,需要在用戶輸入頁中增加一個文

15、本框用來輸入othername值。這時只要在Action中添加一個Name類型的屬性,然后再注冊自定義類型轉(zhuǎn)換器就可以了。下面針對該需求編寫項目步驟。編寫項目步驟如下。第22頁,共30頁,2022年,5月20日,8點29分,星期二3.5.2 全局類型轉(zhuǎn)換器輸入頁面中,name參數(shù)值和othername參數(shù)值都需要進行類型轉(zhuǎn)換為Name類型。在LoginAction中添加name和othername兩個屬性,兩個屬性的類型都為Name類型。這時在注冊類型轉(zhuǎn)換器時,就必須配置這兩個屬性對應(yīng)的類型轉(zhuǎn)換器。如果在輸入頁面再添加一個文本框,其參數(shù)值也是要轉(zhuǎn)換成Name類型,這樣的話就必須再在資源文件中注

16、冊嗎?這樣會不會很麻煩?這樣確實很麻煩,這種注冊方式注冊的是局部類型轉(zhuǎn)換器。不過不用擔(dān)心,Sturts 2提供了注冊全局類型轉(zhuǎn)換器的方式,這樣就不用這么麻煩了。Sturts 2中提供了注冊全局類型轉(zhuǎn)換器的方式。通過這種方式就就不必重復(fù)指定Action中的屬性以及對應(yīng)的轉(zhuǎn)換器類。即使系統(tǒng)中多個Action都包含了Name類型的屬性,也可以通過定義全局類型器來一次實現(xiàn),而無需多次注冊。要實現(xiàn)全局類型轉(zhuǎn)換器,必須提供一個perties文件,該文件必須保存在classes目錄下。該資源文件名格式如下。要進行轉(zhuǎn)換的類=對應(yīng)的類型轉(zhuǎn)換器可以通過注冊全局類型轉(zhuǎn)換器來完成上一個實例,注冊文件代碼如下。如果注冊

17、了全局類型轉(zhuǎn)換器,那么對于所有的Name類型屬性都能起作用。第23頁,共30頁,2022年,5月20日,8點29分,星期二3.6 實現(xiàn)集合類型轉(zhuǎn)換器通過自定義類型轉(zhuǎn)換器,可以將用戶請求參數(shù)設(shè)置到集合類型的屬性中。下面將分別介紹如何定義數(shù)組屬性的類型轉(zhuǎn)換器以及集合屬性的類型轉(zhuǎn)換器。第24頁,共30頁,2022年,5月20日,8點29分,星期二3.6.1 數(shù)組屬性的類型轉(zhuǎn)換器假如現(xiàn)在項目需求改變了,在用戶輸入頁中使用兩個name屬性同為“name”的文本框。這樣的話這兩個請求參數(shù)的名稱都為name,在服務(wù)器端接受到的參數(shù)不再是單一的字符串而是一個字符串?dāng)?shù)組??梢栽贏ction中定義一個Name類型

18、的數(shù)組來存放多個Name類型的值。Action類代碼如下。第25頁,共30頁,2022年,5月20日,8點29分,星期二3.6.2 集合屬性的類型轉(zhuǎn)換器假如現(xiàn)在Action中的name屬性不使用Name類型的數(shù)組,能想出其他的方法來封裝用戶信息嗎?這時可以使用集合來封裝用戶的信息。下面修改Action中的name屬性,不再使用Name類型的數(shù)組,而是使用集合來儲存用戶信息。第26頁,共30頁,2022年,5月20日,8點29分,星期二3.7 類型轉(zhuǎn)換中錯誤處理在進行類型轉(zhuǎn)換中,如果出現(xiàn)錯誤將會提示錯誤信息。Struts 2默認提供了錯誤信息提示,但是這些錯誤信息提示不夠友好,下面將介紹如何自定義錯誤信息來取代Struts 2的默認錯誤信息。第27頁,共30頁,2022年,5月20日,8點29分,星期二3.7.1 定義全局類型轉(zhuǎn)換錯誤處理信息前面輸入的用戶信息,都是按照轉(zhuǎn)換要求來輸入的。假如不按照要求輸入,都會出現(xiàn)轉(zhuǎn)換錯誤提示信息,如圖3-31所示。第28頁,共30頁,2022年,5月20日,8點29分,星期二3.7.2 定義局部類型轉(zhuǎn)換錯誤處理信息局部類型轉(zhuǎn)換錯誤處理信息就是對每個屬性進行類型轉(zhuǎn)換時出現(xiàn)的錯誤信息進行定義。這樣的錯誤對用戶更加友好

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論