版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第11章類型轉(zhuǎn)換和格式化主要內(nèi)容
ConverterFormatter11.1類型轉(zhuǎn)換的意義
開發(fā)者需要自己在Servlet中進(jìn)行類型轉(zhuǎn)換,并將其封裝成值對(duì)象。這些類型轉(zhuǎn)換操作全部手工完成,異常繁瑣。
對(duì)于SpringMVC框架而言,它必須將請(qǐng)求參數(shù)轉(zhuǎn)換成值對(duì)象類里各屬性對(duì)應(yīng)的數(shù)據(jù)類型——這就是類型轉(zhuǎn)換的意義。11.2ConverterSpringMVC框架的Converter<S,T>是一個(gè)可以將一種數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型的接口,這里S表示源類型,T表示目標(biāo)類型。開發(fā)者在實(shí)際應(yīng)用中,使用框架內(nèi)置的類型轉(zhuǎn)換器基本就夠了,但有時(shí)需要編寫具有特定功能的類型轉(zhuǎn)換器。11.2.1內(nèi)置的類型轉(zhuǎn)換器
在SpringMVC框架中,對(duì)于常用的數(shù)據(jù)類型,開發(fā)者無需創(chuàng)建自己的類型轉(zhuǎn)換器,因?yàn)镾pringMVC框架有許多內(nèi)置的類型轉(zhuǎn)換器完成常用的類型轉(zhuǎn)換。
注意:內(nèi)置類型轉(zhuǎn)換器使用時(shí),請(qǐng)求參數(shù)輸入值與接收參數(shù)類型要兼容,否則報(bào)400錯(cuò)誤。請(qǐng)求參數(shù)類型與接收參數(shù)類型不兼容問題,需要學(xué)習(xí)輸入校驗(yàn)后才可解決。11.2.2自定義類型轉(zhuǎn)換器
當(dāng)SpringMVC框架內(nèi)置的類型轉(zhuǎn)換器不能滿足需求時(shí),開發(fā)者可以開發(fā)自己的類型轉(zhuǎn)換器。例如有個(gè)應(yīng)用ch11a希望用戶在頁面表單中輸入信息來創(chuàng)建商品信息。當(dāng)輸入“apple,10.58,200”時(shí),表示在程序中自動(dòng)創(chuàng)建一個(gè)newGoods,并將“apple”值自動(dòng)賦值給goodsname屬性,將“10.58”值自動(dòng)賦值給goodsprice屬性,將“200”值自動(dòng)賦值給goodsnumber屬性。想實(shí)現(xiàn)上述應(yīng)用需要做以下5件事:創(chuàng)建實(shí)體類創(chuàng)建控制器類創(chuàng)建自定義類型轉(zhuǎn)換器注冊(cè)類型轉(zhuǎn)換器創(chuàng)建相關(guān)視圖第1步
創(chuàng)建實(shí)體類在ch11a的src目錄下創(chuàng)建包pojo,并在該包中創(chuàng)建名為GoodsModel的實(shí)體類,代碼如下:packagepojo;publicclassGoodsModel{ privateStringgoodsname; privatedoublegoodsprice; privateintgoodsnumber; //省略setter和getter方法}第2步
創(chuàng)建控制器類@Controller@RequestMapping("/my")publicclassConverterController{
@RequestMapping("/converter") /*使用@RequestParam("goods")接收請(qǐng)求參數(shù),
然后調(diào)用自定義類型轉(zhuǎn)換器GoodsConverter將字符串值轉(zhuǎn)換為GoodsModel的對(duì)象gm */ publicStringmyConverter(@RequestParam("goods")GoodsModelgm,Modelmodel){ model.addAttribute("goods",gm); return"showGoods"; }}第3步
創(chuàng)建自定義類型轉(zhuǎn)換器
自定義類型轉(zhuǎn)換器類需要實(shí)現(xiàn)Converter<S,T>接口,重寫convert(S)接口方法。convert(S)方法功能是將源數(shù)據(jù)類型S轉(zhuǎn)換成目標(biāo)數(shù)據(jù)類型T。在ch11a的src目錄下創(chuàng)建包c(diǎn)onverter,并在該包中創(chuàng)建名為GoodsConverter的自定義類型轉(zhuǎn)換器類。第4步
注冊(cè)類型轉(zhuǎn)換器
在ch11a的WEB-INF目錄下創(chuàng)建配置文件springmvc-servlet.xml,并在配置文件中注冊(cè)自定義類型轉(zhuǎn)換器,配置文件代碼如下:
<!--注冊(cè)類型轉(zhuǎn)換器GoodsConverter--><beanid="conversionService"class="org.springframework.context.support.ConversionServiceFactoryBean"> <propertyname="converters"> <list> <beanclass="converter.GoodsConverter"/> </list> </property></bean>第5步
創(chuàng)建相關(guān)視圖在ch11a應(yīng)用的WebContent目錄下,創(chuàng)建信息采集頁面input.jsp,核心代碼如下:<formaction="${pageContext.request.contextPath}/my/converter"method="post">
請(qǐng)輸入商品信息(格式為:apple,10.58,200): <inputtype="text"name="goods"/><br> <inputtype="submit"value="提交"/></form>在ch11a應(yīng)用的/WEB-INF/jsp/目錄下,創(chuàng)建信息顯示頁面showGoods.jsp,核心代碼如下:<body>
您創(chuàng)建的商品信息如下:<br><!--使用EL表達(dá)式取出model中g(shù)oods的信息-->
商品名為:${goods.goodsname},
商品價(jià)格為:${goods.goodsprice},
商品數(shù)量為:${goods.goodsnumber}。</body>最后,使用地址http://localhost:8080/ch11a/input.jsp測(cè)試應(yīng)用。11.3FormatterSpringMVC框架的Formatter<T>與Converter<S,T>一樣,也是一個(gè)可以將一種數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型的接口。但不同的是,F(xiàn)ormatter<T>的源數(shù)據(jù)類型必須是String類型,而Converter<S,T>的源數(shù)據(jù)類型是任意數(shù)據(jù)類型。
在Web應(yīng)用中,由HTTP發(fā)送的請(qǐng)求數(shù)據(jù)到控制器中都是以String類型獲取。因此,在Web應(yīng)用中選擇Formatter<T>比選擇Converter<S,T>更加合理。11.3.1內(nèi)置的格式化轉(zhuǎn)換器SpringMVC提供幾個(gè)內(nèi)置的格式化轉(zhuǎn)換器,具體如下:NumberFormatter:實(shí)現(xiàn)Number與String之間的解析與格式化。CurrencyFormatter:實(shí)現(xiàn)Number與String之間的解析與格式化(帶貨幣符號(hào))。PercentFormatter:實(shí)現(xiàn)Number與String之間的解析與格式化(帶百分?jǐn)?shù)符號(hào))。DateFormatter:實(shí)現(xiàn)Date與String之間的解析與格式化。11.3.2自定義格式化轉(zhuǎn)換器
自定義格式化轉(zhuǎn)換器,就是編寫一個(gè)實(shí)現(xiàn)org.springframework.format.Formatter接口的Java類。該接口聲明如下:
publicinterfaceFormatter<T>
這里的T表示由字符串轉(zhuǎn)換的目標(biāo)數(shù)據(jù)類型。該接口有parse和print兩個(gè)接口方法,自定義格式化轉(zhuǎn)換器類必須覆蓋它們。
publicTparse(Strings,java.util.Localelocale) publicStringprint(Tobject,java.util.Localelocale)parse方法的功能是利用指定的Locale將一個(gè)String類型轉(zhuǎn)換成目標(biāo)類型,print方法與之相反,返回目標(biāo)對(duì)象的字符串表示。
下面通過具體應(yīng)用ch11b講解自定義格式化轉(zhuǎn)換器的用法。ch11b應(yīng)用與ch11a應(yīng)用,具有相同的JAR包、web.xml。想實(shí)現(xiàn)上述應(yīng)用ch11b的需求,需要做以下5件事:創(chuàng)建實(shí)體類創(chuàng)建控制器類創(chuàng)建自定義格式化轉(zhuǎn)換器注冊(cè)格式化轉(zhuǎn)換器創(chuàng)建相關(guān)視圖
商品名稱、價(jià)格和數(shù)量使用內(nèi)置的類型轉(zhuǎn)換器完成轉(zhuǎn)換;商品日期需要自定義的格式化轉(zhuǎn)換器完成。第1步
創(chuàng)建實(shí)體類
在ch11b的src目錄下創(chuàng)建包pojo,并在該包中創(chuàng)建名為GoodsModelb的實(shí)體類,代碼如下:packagepojo;importjava.util.Date;publicclassGoodsModelb{ privateStringgoodsname; privatedoublegoodsprice; privateintgoodsnumber; privateDategoodsdate; //省略setter和getter方法}第2步
創(chuàng)建控制器類@Controller@RequestMapping("/my")publicclassFormatterController{ @RequestMapping("/formatter") publicStringmyConverter(GoodsModelbgm,Modelmodel){ model.addAttribute("goods",gm); return"showGoodsb"; }}第3步
創(chuàng)建格式化轉(zhuǎn)換器類publicclassMyFormatterimplementsFormatter<Date>{
SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd"); @Override publicStringprint(Dateobject,Localearg1){ returndateFormat.format(object); } @Override publicDateparse(Stringsource,Localearg1)throwsParseException{ returndateFormat.parse(source);//Formatter只能對(duì)字符串轉(zhuǎn)換 }}第4步
注冊(cè)格式化轉(zhuǎn)換器<!--注冊(cè)MyFormatter--><beanid="conversionService"class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<propertyname="formatters"> <set> <beanclass="f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高效節(jié)能電動(dòng)機(jī)產(chǎn)品市場(chǎng)環(huán)境與對(duì)策分析
- 線切割機(jī)床市場(chǎng)發(fā)展預(yù)測(cè)和趨勢(shì)分析
- 質(zhì)子交換膜燃料電池發(fā)電裝置產(chǎn)品原材料供應(yīng)與需求分析
- 鋰電池精密結(jié)構(gòu)件市場(chǎng)需求與消費(fèi)特點(diǎn)分析
- 網(wǎng)絡(luò)線產(chǎn)品原材料供應(yīng)與需求分析
- 草制品市場(chǎng)需求與消費(fèi)特點(diǎn)分析
- 耐熱環(huán)氧樹指產(chǎn)品市場(chǎng)環(huán)境與對(duì)策分析
- 高端白酒產(chǎn)品市場(chǎng)需求分析報(bào)告
- 踏步機(jī)產(chǎn)品市場(chǎng)環(huán)境與對(duì)策分析
- 電流保險(xiǎn)絲產(chǎn)品原材料供應(yīng)與需求分析
- 12 故宮博物院 教學(xué)設(shè)計(jì) 2024-2025學(xué)年 統(tǒng)編版六年級(jí)上冊(cè)語文
- 八年級(jí)生物上冊(cè) 7.21.1《人的生殖》教案 (新版)蘇科版
- 2024中移鐵通限公司春季校園招聘高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 憲法衛(wèi)士 2024 第九屆學(xué)憲法講憲法活動(dòng)大學(xué)級(jí)綜合評(píng)價(jià)答案
- 民族團(tuán)結(jié)鑄牢中華民族共同體意識(shí)課程課件
- 人教版五年級(jí)上冊(cè)數(shù)學(xué)計(jì)算題專項(xiàng)練習(xí)1000道帶答案
- 2024年江蘇省常州市武進(jìn)區(qū)湖塘鎮(zhèn)招聘鎮(zhèn)自聘人員25人歷年(高頻重點(diǎn)復(fù)習(xí)提升訓(xùn)練)共500題附帶答案詳解
- 2024年燃?xì)廨啓C(jī)值班員技能鑒定理論知識(shí)考試題庫-上(單選題)
- Starter Unit 2 Section A(Pronunciation)課件人教版2024新教材七年級(jí)上冊(cè)英語
- 吉他產(chǎn)品商業(yè)計(jì)劃書
- 2024-2030年中國垃圾處理行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
評(píng)論
0/150
提交評(píng)論