新聞資訊
記錄首創點滴進步 見(jiàn)證遠(yuǎn)行(xíng)
我們一(yī)直緊跟時(shí)代前沿,聚焦行(xíng)業(&αyè)實時(shí)動态,發布公司最新資訊,歡迎您的(dγ™←©e)關注

5.26日(rì)音(yīn)訊,Stru✘γ☆₹ts2必須掌握的(de)知(zhī)識

日(rì)期:2013-05-26發布:首創網絡浏覽:785次

    5.26日(rì)音(yīn)訊,Str$‌uts2必須掌握的(de)知(zhī)識。Struts2是(sh•★♠πì)在WebWork2基礎發展而來(lái)的(de)εε 。和(hé)struts1一(yī)樣,Struts2也(yě↓π✘)屬于MVC框架。一(yī)、Struts2類型轉換介紹 ✘ ‍ε類型轉換:解析HTTP請(qǐng)求參¥>數(shù),将Http請(qǐng)求參數(shù)賦值給Act♥∑‍≥i···

    本文(wén)關鍵字:5.26日(rì),音(yīn)訊,Struts2,必Ω<須,掌握,的(de),知(zhī)識,5.26日(rì),

  5.26日(rì)音(yīn)訊,Str≥§¶→uts2必須掌握的(de)知(zhī)識。Struts2是(s≤​₽ hì)在WebWork2基礎發展而來(l®'ái)的(de)。和(hé)struts♠'∑✘1一(yī)樣,Struts2也(yě)屬于→ ≠MVC框架。一(yī)、Struts2類型轉換介紹

  類型轉換:解析HTTP請(qǐng)求參數(sh₩♣Ωù),将Http請(qǐng)求參數(shù)賦值給Action的(<α™←de)屬性;比如(rú):

  

  

  

  

  

  

  此處将名為(wèi)name、password、age的≥±×(de)值賦值給Action的(de)屬性,類型轉換是(shì)指這(§₽®zhè)個(gè)賦值過程中可(kě)能(néng)出現(xiàn)的(de☆♣ )類型不(bù)一(yī)緻問(wèn)題而做(z<≤♥™uò)出的(de)轉換,因為(wèi)HTTP參數(shù)都(dōu)✘✔÷是(shì)字符串類型的(de);因此從(cóng)₩'String類型的(de)age參數(shù)傳給in​≤≤>t類型的(de)age屬性時(shí),就(jiù)需"Ω↑¥要(yào)類型轉換,當然這(zhè)些(xiē)α♦struts2框架已經做(zuò)完了(≥≠‍↔le),開(kāi)發人(rén)員(yuán)不(bù)需要(‌α'yào)自(zì)行(xíng)處理(lǐ);

  Struts2已經內(nèi)建了(le)對(duì)于₽‍δ¥String和(hé)基本類型的(de)類型轉換,比如(rú)Str§₩ing<-->int、String<-->boolean等;

  Action屬性一(yī)定要(yà↓€ε∞o)有(yǒu)getter和(hé)sett✔±er方法!

  Struts2提供了(le)強大(dà)的(de)類型轉換支持πα‍→,不(bù)僅提供了(le)內(nèi)置的(d♣α©'e)類型轉換器(qì),還(hái)可(kě)以自(zì←♣≥)定義類型轉換器(qì),以滿足自(zì)定義需求;

  Struts2類型轉換是(shì)通(tōng)過params攔截≠₹∑器(qì)進行(xíng)轉換;如(rú)果轉♣‌≥§換失敗,則conversionError攔截器(qì)攔截該異常,并封裝到(α∞♥dào)fieldError中,放(fàng)入Action≥<γ≥Context中;

  Struts2類型轉換還(hái)支持OGNL表達式,隻需 ♦要(yào)在表單控件(jiàn)的(de)name屬性使用(yòng)og♥•nl表達式即可(kě),比如(rú)表單控件(jiàn)的(de≈<λ)name屬性為(wèi)user.name,則此控件(jiàn)的(de)數¥→&(shù)據将進入賦值給Action的(de)use↕↓r屬性中的(de)name屬性;

  二、通(tōng)過一(yī)個(gè)例≤÷φ子(zǐ)初步了(le)解Struts2類型轉換

  此處的(de)類型轉換因為(wèi)是(shì)內♠$÷(nèi)建的(de),因此代碼上(shàng)和(hé)原來(lái)的₹ (de)struts2應用(yòng)沒有(yǒu)不(bù)同,st€¥∞‍ruts2框架內(nèi)部完成了(le)所有(yǒu)了(le)類型轉換,以δ<¶≠下(xià)程序是(shì)将name、age賦值給Action類的(de)₽ name、age屬性,gender、salary賦值給p.¶♣∏₩gender、p.salary屬性;struts.xml的(de)配₽•置和(hé)原來(lái)一(yī)樣,所以α€®就(jiù)不(bù)給出了(le);

  Conversion01Action.java

  packageorg.conversion.act∏♥ion;

  importorg.person.Pe​βδ×rson;

  importcom.opensymphony≠≥®.xwork2.ActionSupport;

  publicclassConversion01Actionexten₽→dsActionSupport{

  privateStringname☆£;

  privateintage;

  privatePersonp;

  publicStringexecute()thro♦≤≠λwsException{

  System.out.println(naΩ₩me);

  System.out.println(age);

  System.out.println(p.getGende÷§r());

  System.out.println(p.getSalar←£y());

  returnSUCCESS;

  }

  publicStringgetName(){

  returnname;

  }

  publicvoidsetName(Stringname){

  this.name=name;

  }

  publicintgetAge(){

  returnage;

  }

  publicvoidsetAge(intage↕δ<){

  this.age=age;

  }

  publicPersongetP(){

  returnp;

  }

  publicvoidsetP(Personp){

  this.p=p;

  }

  }

  1.jsp

  此處需要(yào)注意的(de)是(shì)性别、薪水(shuǐ≤₹₹")的(de)表單控件(jiàn)的(de)name屬性是(shì)♣↕♠ OGNL表達式;

  

  

  

  Inserttitlehere

  

  

  

  

  

  

  

  

  

  

  

  

  補充:List和(hé)Map的(deΩ©$γ)Action屬性的(de)類型轉換問(wèn)題

  前面我們将的(de)都(dōu)是(shì)基本類♠€β型和(hé)自(zì)定義類型,因此這(zhè)裡(lǐ)我≥Ω們将講述集合類型的(de)類型轉換問(w✔"èn)題;

  如(rú)果Action的(de)屬÷₹性為(wèi)List類型,Listlists,則表單控件(jiàn)的(de)命名方式為(wèi)listsλ€δ≠[i],如(rú)lists[0]表示第1個(gè)元素★φ;

  如(rú)果Action的(de)屬性為(wèi)Map類型♥♠£,Mapmaps;則表單控件(jiàn)的(de)命名方式為(wèi)↔≤maps['first'].salary,表示map中ke®↓y為(wèi)'first'的(de)value中的(de)salary₹'"屬性;

  以上(shàng)的(de)list和(hé)m"✘☆→ap類型屬性都(dōu)通(tōng)過泛型的(deΩ‍)方式說(shuō)明(míng)集合元素的(de)類型,↕&如(rú)果在JDK1.5之前,泛型沒有(yǒu)出現✘™‍&(xiàn),則需要(yào)通(tōng)過局部類型轉換βδ₹文(wén)件(jiàn)進行(xíng)表示;

  局部類型轉換文(wén)件(jiàn):對(duì)于特定A★®"&ction的(de)特定屬性有(yǒu)效,位于特定Action同一(y×♠ī)目錄下(xià),命名規則:ActionName-&δconversion.properties;

  對(duì)于List元素來(lái)說(shuō₩"),內(nèi)容如(rú):Element_©‍¶attributeName=typeName;

  對(duì)于Map元素來(lái)說(sh" ♥&uō),

  (1)如(rú)果表示key的(de)類型,則:Key☆↓‍_attributeName=typeName;

  (2)如(rú)果表示value的(de)÷∑∑類型,則為(wèi):Element_attributeπ®Name=typeName;

  比如(rú),此處沒有(yǒu)使用(yòn €g)泛型,而是(shì)使用(yòng)了(le)局部類型轉換文(♦←wén)件(jiàn):

  Conversion02Action.java

  packageorg.conversion.action; ε☆≠

  importjava.util.List;

  importjava.util.M↔φ'ap;

  importorg.person.Person;

  importcom.opensymphoα<≤ny.xwork2.ActionSupport;

  publicclassConversion02Actionexte§‍ε™ndsActionSupport{

  privateListlists;

  privateMapmaps;

  publicStringexecute()th€​≥rowsException{

  System.out.println(((Pers↕↑on)lists.get(0)).getG​ ×ender());

  System.out.println(((δ§'≈Person)lists.get(0)).getSalary());

  System.out.println✘♣↓(((Person)maps.get("one")).getGender()λβ);

  System.out.println(((Pers‌≈on)maps.get("one")).getSalary());

  returnSUCCESS;

  }

  publicListgetLists(){

  returnlists;

  }

  publicvoidsetLists(Listl¥∏÷ists){

  this.lists=lists;

  }

  publicMapgetMaps(){

  returnmaps;

  }

  publicvoidsetMaps(Mapmaps){

  this.maps=maps;

  }

  }

  Conversion02Action-conversion.p§δ$roperties

  Element_lists=org.person.Person

  Key_maps=java.lang.StrinΩ☆g

  Element_maps=org.per¥₩₩son.Person

  2.jsp

  

  

  

  Inserttitlehere

  

  

  

  

  

  

  

  

  

  

  

  

  Conversion02Action-conversion$≈.properties

  Element_lists=org.perso↑γαn.Person

  Key_maps=java.lang.String

  Element_maps=org.person.Person

  三、自(zì)定義類型轉換器(qì)

  1.繼承DefaultTypeCon ♦'€verter

  如(rú)果我們自(zì)定義一(yβ≥ī)個(gè)類型轉換器(qì),第一(yī)種方法是(sh§π←ì)繼承DefaultTypeConvert€Ω→∞er,并重寫publicObjectconvertVπ♦ alue(ActionContextcontex∞♦×t,Objectvalue,ClasstoType¥₹ ₩);

  這(zhè)個(gè)函數(shù)的≥©(de)功能(néng)是(shì)完成雙向轉換,即從(cón₽✘$σg)String數(shù)組轉到(dào)♦¶<Action屬性及Action屬性轉到(dào)String;需↓∞ 要(yào)注意的(de)是(shì)從(€÷cóng)String數(shù)組轉到(dào)Actio©‍≈λn屬性,而不(bù)是(shì)String轉到(dàoδ •)Action屬性;如(rú)果隻有(yǒu)一(yī)個(gè)字符串÷β,則取params[0]即可(kě);

  因此一(yī)般此函數(shù)的(de)模闆代★₩碼如(rú)下(xià):

  publicObjectconvertValue(Mapcontext,Objectvalue,

  ClasstoType){

  if(toType==String.claσβss){

  ......

  returnString;

  }

  elseif(toType==Action屬性.class)∞Ω{

  Stringparams[]=(Str≥₩γing[])value;//必須是(shì)字符串數(shù)組

  .......

  returnAction屬性;

  }

  returnnull;

  }

  完成自(zì)定義類型轉換器(qì)編寫後,如(rú)果需要(yào)σ♣ ☆使用(yòng)此轉換器(qì),就(jiù)需要(yào)配置,通(tōngγπ>)常有(yǒu)兩種配置方法:

  1.局部類型轉換文(wén)件(jiàn)中配置,僅對(duì)特定的(δ∞α¶de)Action的(de)特定屬性有(yǒ★Ωu)效,比如(rú)在Action1中有(yǒu)aa屬性,則僅對(duβ₹ì)Action1的(de)aa屬性有(•​$>yǒu)效;

  2.全局類型轉換文(wén)件(jiàn)中配置,對(duì)某ε₹∏σ個(gè)類型都(dōu)有(yǒu)效;比如(rú)對(duì)Pe♦®rson注冊了(le)類型轉換器(qì),•∑則對(duì)任何Person和(hé)String的(de)轉換​>σ"都(dōu)有(yǒu)效;

  全局類型轉換文(wén)件(jiàn)>∏命名為(wèi):xwork-conversio★ ₹≠n.properties,通(tōng)常放(fàng)在≠ ★♥WEB-INFclasses下(xià);

  文(wén)件(jiàn)內(nèi)£☆容如(rú):attributeName=ConvertClass,比如(rδ™∞σú)aa=org.convert.Converter★ ≈♦1

  attributeName表示屬性名稱,convertClγπ¥&ass表示轉換器(qì)的(de)實現(xiàn)類;

  局部類型轉換文(wén)件(jiàn)命名為(wèi):Actio↑∏®nName-conversion.properties,放(fànλ♦©g)在特定Action的(de)目錄下(xià);

  文(wén)件(jiàn)內(nèi)容如(rú):→ €‍typeName=ConvertClass,比如(rú)&∏≠≠org.person.Person=org.con&‌∑ vert.Converter2

  注意:typeName表示轉換類型,conver$≈'$tClass表示轉換器(qì)的(de)實現<Ω(xiàn)類;

  代碼示例:

  Conversion03Action.java

  packageorg.conversion.action;

  importorg.person.Perso‌∑n;

  importcom.opensymphony.x¥↔&work2.ActionSupport;

  publicclassConversion03A£∏ctionextendsActionSuppπ∏δort{

  privatePersonp;

  publicStringexecute(∞☆)throwsException{

  System.out.println(σ∑"p.getGender());

  System.out.println(p.getSalary♦αγ•());

  returnSUCCESS;

  }

  publicPersongetP() α{

  returnp;

  }

  publicvoidsetP(Personp){

  this.p=p;

  }

  }

  Converter01.java

  packageorg.convertσ®er;

  importjava.util.Map;

  importorg.person.Per☆φ×son;

  importcom.opensymphony.xwork2.₩∏₩conversion.impl.DefaultTypeConverε♣αter;

  publicclassConverter01extendsDefauφδ÷≤ltTypeConverter{

  @Override

  publicObjectconvertValue(Mapcontext,Objectvalue,

  ClasstoType){

  if(toType==String.class){

  Personp=(Person)value;

  returnp.getSalary()+βα↑","+p.getGender();

  }

  elseif(toType==Person.&"α£class){

  Stringparams[]=(String[])va♦•>₩lue;

  String[]values=params[0].split(",");¶β

  Personp=newPerson();

  p.setGender(values[1]);

  p.setSalary(Double.parseD≤™♣ouble(values[0]));

  returnp;

  }

  returnnull;

  }

  }

  3.jsp

  pageEncoding="utf-8"%>

  

  

  

  Inserttitlehere

  

  

  

  

  

  

  

  

  

  Conversion03Action-conversion.pro♠λperties

  p=org.convert.Conve♥←♠rter01

  2.繼承StrutsTypeConverter

  StrutsTypeConverter是 ±∞♦(shì)DefaultTypeConverter的(de)子(zǐ)類,D↓π£efaultTypeConverter的(de)類型轉換器(qì)是(shλπì)在一(yī)個(gè)函數(shù)中進行(xíng)雙向σ'>≥轉換,而繼承StrutsTypeConverter的(de)類型轉換器♠ (qì)則是(shì)将兩個(gè)方向分(fēn)别←‌÷用(yòng)兩個(gè)函數(shù)實現(xiàn):

  @Override

  publicObjectconvertFrγεomString(Mapcontext,Str₩☆ ing[]values,ClasstoClass){

  }

  @Override

  publicStringconvertToString(M↕​apcontext,Objecto){

  }

 

服務項目

高(gāo)端網站(zhàn)建設

熱(rè)門(mén)信息

+ 查看(kàn)更多(duō)我們的(de)客戶 / Our client

    24小(xiǎo)時(shí)技(jì)術(shù)™γ支持
    18931045623
    在線客服

首創簡介

    首創網絡成立于2012年(nián),是(shì&↔)一(yī)家(jiā)專業(yè)的(de)品牌網站(zhàn)設計(jì)∑×和(hé)網絡營銷推廣公司,服務領域涵蓋網∏"Ω站(zhàn)設計(jì)、市(shì)場(chǎng)策劃、企業(yè∑↓∑€)畫(huà)冊及VI視(shì)覺設計(j★ ¥ì)、網站(zhàn)域名空(kōng)間(jiān)等•&∞領域,公司擁有(yǒu)一(yī)批高(gāo)素質人₽€ ↓(rén)才,著(zhe)力打造品牌網站(zhàn)設計(jì)π★←制(zhì)作(zuò)和(hé)網上(shàng)營銷策略執行(xí©'♣ng)兩大(dà)優勢。

    十年(nián)來(lái),憑借對(duì)市(shì)場(chǎng)趨勢☆♣敏銳的(de)洞察,和(hé)對(duì)消費(fèi)者、企業(yè)形态✘§&深刻的(de)理(lǐ)解,我們服務的(de)已遍及京↓ 津冀、長(cháng)三角、珠三角等領域,行(xíng)業(y∞★↕✔è)覆蓋政府機(jī)構、企事(shì)業(y↔•$"è)單位、無線通(tōng)訊、環保、電(diàn)子(zǐ)、醫(yīβ¥®)藥、交通(tōng)、園林(lín)、地(dì)産等行(xíng)業(₩¶yè),諸多(duō)知(zhī)名企業(yè),如(r©∏ú)廣州京信集團、廣東(dōng)聯通(tōng)廣州分(≥ fēn)公司、搜狐家(jiā)居廣州站(zhà∏Ωn)、搜狐家(jiā)居邯鄲站(zhàn)等,都(dōu)鑒證↓ ±了(le)首創設計(jì)公司的(de)品牌設計(jì)λ∑思想與能(néng)力,首創設計(jì)公司也(y←★"&ě)與諸多(duō)企業(yè)勃的(de)市★∞♠​(shì)場(chǎng)經濟中互促共生(σ×shēng)。

在線客服


  • 掃描加微(wēi)信

  • 掃描加QQ

  • 掃描浏覽手機(jī)版
首創網絡邯鄲公司
邯鄲公司
服務熱(rè)線:0310-4559740 /$" 18931045623  公司地(dì)址₹★→←:邯鄲市(shì)叢台區(qū)頤高(gāo≠↔)廣場(chǎng)B座13層1304室  客戶接待:邯£₩鄲市(shì)陵園路(lù)669号康橋國(guó↓←≥•)際B06