新聞資訊
記錄首創點滴進步 見(jiàn)證遠(yuǎn)行(xíng)
我們一(yī)直緊跟時(shí)代前沿,聚焦行(xíng)業(yè)實時&★'(shí)動态,發布公司最新資訊,歡迎您的(de)關注 ÷'
您目前的(de)位置:網站(zhàn)首頁 > 新聞資訊 > 網站(zhàn)常識 >

5.26日(rì)音(yīn)訊,Struts2必須掌握≈&φ的(de)知(zhī)識

發布日(rì)期:2013-05-26文(wén)章(zhāng)來(lái)源:首創網絡浏覽次數(shù):722次
    5.26日(rì)音(yīn)訊,Struts2必須掌∑λφ握的(de)知(zhī)識。Struts2是(shì)在WebWork2‌₩"基礎發展而來(lái)的(de)。和(hé)struts1一(yī)樣,St≤€φruts2也(yě)屬于MVC框架。一(yī)↓§ε、Struts2類型轉換介紹 類型轉換:解析HTT÷‍$≥P請(qǐng)求參數(shù),将Http請Ωφα→(qǐng)求參數(shù)賦值給Action的∑≤™β(de)屬性;比如(rú): s:formaction=valπ←≠id s:textf......
    本文(wén)關鍵字:5.26日(rì),音(yīn)訊,Stru≠≤ts2,必須,掌握,的(de),知(zhī)識,5.2™©6日(rì),
  5.26日(rì)音(yīn)訊,Struts2必須≤¶‌÷掌握的(de)知(zhī)識。Struts2是(sh♦×∑¥ì)在WebWork2基礎發展而來(lái)的(deαε)。和(hé)struts1一(yī)樣,Strut↕©s2也(yě)屬于MVC框架。一(yī)、Struts2類型轉換α£®→介紹
  類型轉換:解析HTTP請(qǐng‍πα)求參數(shù),将Http請(qǐng)求參數(shù)賦值λφ給Action的(de)屬性;比如(rúφ  ):
  <s:formaction="valid"☆&;>
  <s:textfieldlabel="用(yònγ'&±g)戶名"name="name"><≠​¶>/s:textfield>
  <s:passwordlabel=&β"密碼"name="passworβ¶×Ωd"></s:password>
  <s:textfieldlabel="年(nián)齡&±φquot;name="age"></∞±s:textfield>
  <s:submitvalue=&qu​☆ ot;提交"></s:submit>
  </s:form>
  此處将名為(wèi)name、password、age的(‌∑de)值賦值給Action的(de)屬性,類型轉換是(shì)指這(zhè¶')個(gè)賦值過程中可(kě)能(néng)出現(xiàn)的(de)類型不©≤'‍(bù)一(yī)緻問(wèn)題而做(zuò)☆&™出的(de)轉換,因為(wèi)HTTP參數(shù)都(dōu)是(s¶®€βhì)字符串類型的(de);因此從(cóng)String類型的(d±↔&©e)age參數(shù)傳給int類型的(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ú)String<-->int、Striε∑↔≠ng<-->boolean等;
  Action屬性一(yī)定要(yào)有(y↑•ǒu)getter和(hé)setter方法!
  Struts2提供了(le)強大(dà)的(de)類型轉換支持,‌ ​不(bù)僅提供了(le)內(nèi)置的(de)類型轉換器(qì§₩≈),還(hái)可(kě)以自(zì)定義類型轉換器(qì),以滿×Ω足自(zì)定義需求;
  Struts2類型轉換是(shì)通(tōng)過para•±↕‍ms攔截器(qì)進行(xíng)轉換;如(rú)果✘™≈£轉換失敗,則conversionError攔截器(qì)攔截該異常,并封裝α♣α到(dào)fieldError中,放(fàng)入ActionCo ↓¶ntext中;
  Struts2類型轉換還(hái)支持OGNL表達式,隻需要(π yào)在表單控件(jiàn)的(de)name屬性‌∏™σ使用(yòng)ognl表達式即可(kě),比↑< 如(rú)表單控件(jiàn)的(de)name屬性為(w×↕èi)user.name,則此控件(jiàn)的(de)δ$數(shù)據将進入賦值給Action的(de)user屬α≥♣性中的(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ù)同,struts2框架內(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.action;
  importorg.person.Person;
  importcom.opensymphony.xwork2.A≤₩≥£ctionSupport;
  publicclassConversion01Action₩©extendsActionSupport{
  privateStringname;
  privateintage;
  privatePersonp;
  publicStringexecute()thr→​€owsException{
  System.out.println(name);
  System.out.println(age);®≥‌
  System.out.println(p.getGender());
  System.out.println(p.getSalary()♠φ£φ);
  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表達式;
  <html>
  <head>
  <metahttp-equiv="​β;Content-Type"content="text≠∑♦£/html;charset=utf-8">
  <title>Inserttitlehere</t≈←©itle>
  </head>
  <body>
  <s:fielderror></s:fiel•↔derror>
  <s:formaction="c↑×✘onversion01">
  <s:textfieldla  ×​bel="姓名"name="name®§✔"></s:textfiel©←™d>
  <s:textfieldlabel= λ₽"年(nián)齡"name="age&< ∞quot;></s:textfiel≥‍d>
  <s:textfieldlabel="性别&€♥quot;name="p.gender"&g"€t;</s:textfield>
  <s:textfieldlabel="薪水(∑φshuǐ)"name="p.salary"&g∏×​≠t;</s:textfield>
  <s:submitvalue="提交">"→★</s:submit>
  </s:form>
  </body>
  </html>
  補充: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類型,List<String'α>lists,則表單控件(jiàn)'π↑★的(de)命名方式為(wèi)lists[i],如(rúβ&¥)lists[0]表示第1個(gè)元素;
  如(rú)果Action的(de)屬性為(wèi)Map類型,MaδΩ​Ωp<String,Person>maps;則表單控件(ji ↕>"àn)的(de)命名方式為(wèi)maps['firstα ≥♦9;].salary,表示map中key為(wèi)'firs "∑t'的(de)value中的(de)salary屬性;
  以上(shàng)的(de)list和(hé)map類型≈♠↕屬性都(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ì)于特定Action的(de)特定屬性有(yǒu)效,位于特™‍定Action同一(yī)目錄下(xià),命名規則:ActionName-Ω‍ conversion.properties;
  對(duì)于List元素來(lái)說(shu☆∑ō),內(nèi)容如(rú):Element_attributeN¥₹∑$ame=typeName;
  對(duì)于Map元素來(lái)說(shuō),
  (1)如(rú)果表示key的(de)類∞₹∏β型,則:Key_attributeName=typeNamε±e;
  (2)如(rú)果表示value的(de)類型,則為(wβ ★èi):Element_attributeName=typeName₹φ‍•;
  比如(rú),此處沒有(yǒu)使用(yòng)泛型,而是(s¥÷hì)使用(yòng)了(le)局部類型轉換文(wé¥↔÷n)件(jiàn):
  Conversion02Action.j€γava
  packageorg.conversion.action;
  importjava.util.Lis®±♠€t;
  importjava.util.Mapα±;
  importorg.person.Person;
  importcom.opensymphony.xwork2.Actio‌&nSupport;
  publicclassConversion02Actionexte ​ndsActionSupport{
  privateListlists;
  privateMapmaps;
  publicStringexecute()throwsExcep¥ ↓tion{
  System.out.println((© (Person)lists.get(0)δ≤).getGender());
  System.out.println(((Person)lis±↑ts.get(0)).getSalary()♣≥♦);
  System.out.printl☆ n(((Person)maps.get("one&α≥♦•quot;)).getGender());
  System.out.println(((Person)maps.get£φ‍≈("one")).getSalary()); ®​σ
  returnSUCCESS;
  }
  publicListgetList≠÷επs(){
  returnlists;
  }
  publicvoidsetLists(Listlists) ♣∑₹{
  this.lists=lists;
  }
  publicMapgetMaps(){
  returnmaps;
  }
  publicvoidsetMaps(Mapmaλσps){
  this.maps=maps;
  }
  }
  Conversion02Action-conversion.pr ≈↓÷operties
  Element_lists=org.per £son.Person
  Key_maps=java.lang.String
  Element_maps=org.person.Per♦<∞>son
  2.jsp
  <html>
  <head>
  <metahttp-equiv="Cπγδ↕ontent-Type"content="t≠§∏ext/html;charset=utf-8">↔γ$®;
  <title>Insert≤♥γtitlehere</title>‌ππ→;
  </head>
  <body>
  <s:fielderror><β↓;/s:fielderror>
  <s:formaction="conversi≥×on02">
  <s:textfieldlabel="list1.s<♠♠€alary"name="lis♠♦ts[0].salary"></s:textfi♥≈®↔eld>
  <s:textfieldlabel="φ♦ ↑;list1.gender"name="list≥♠s[0].gender">₹"∏</s:textfield>
  <s:textfieldlabel="map1.ge>®nder"name="maps['one&#÷≤₹39;].gender"></"₹$s:textfield>
  <s:textfieldlabel="δσmap1.salary"name="maps↑↕"['one'].salary&quo₩₹ t;></s:textfield>
  <s:submitvalue="提交&q π'₩uot;></s:submit™©₽>
  </s:form>
  </body>
  </html>
  Conversion02Action-conversion. β∞‍properties
  Element_lists=org.per≈​₽♦son.Person
  Key_maps=java.lang.S©$←λtring
  Element_maps=org.person.Person
  三、自(zì)定義類型轉換器(qì)
  1.繼承DefaultTypeConver≠↑↑βter
  如(rú)果我們自(zì)定義一(yī)個(φ♣gè)類型轉換器(qì),第一(yī)種方法是(shì)繼承De•↓↑≈faultTypeConverter,并重寫publicObjectconv‍‌σ♥ertValue(ActionContex♠§$&tcontext,Objectvalue≈σ,ClasstoType);
  這(zhè)個(gè)函數(shù'↓♥≈)的(de)功能(néng)是(shì)完成雙向轉換,即從(cóng ∑)String數(shù)組轉到(dào×λ)Action屬性及Action屬性轉到(dào)Str©φ✘∑ing;需要(yào)注意的(de)是(shì)從Ω₩✘(cóng)String數(shù)組轉到(dào)Action屬★‍<性,而不(bù)是(shì)String轉到(dào)Action屬性σ±•;如(rú)果隻有(yǒu)一(yī)個(gè)字符串,則取paramΩ♣ s[0]即可(kě);
  因此一(yī)般此函數(shù)的(₩"∏de)模闆代碼如(rú)下(xià):
  publicObjectconvertValue€★ →(Map<String,Object>∏>context,Objectvalue,
  ClasstoType){
  if(toType==String.clasπ☆ πs){
  ......
  returnString;
  }
  elseif(toType==Action屬性.class) ✘{
  Stringparams[]=(String[])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ì♥ )Person注冊了(le)類型轉換器(qì₽ ),則對(duì)任何Person和(hφ✔>é)String的(de)轉換都(dōu)有(yǒu)效;
  全局類型轉換文(wén)件(jiàn)命名為(wèiγ÷ ☆):xwork-conversion.propertπ®∞ies,通(tōng)常放(fàng)在WEB-INF\clas∏♥•ses下(xià);
  文(wén)件(jiàn)內(nèi)容如(r≠φγ ú):attributeName=Con™≤&vertClass,比如(rú)aa=org.convert.Conveδ÷₽rter1
  attributeName表示屬性名稱,c ←"φonvertClass表示轉換器(qì)的(de)實現(x ✔iàn)類;
  局部類型轉換文(wén)件(jiàn)命名為(wèi)φ​φ:ActionName-conversion§∑✔.properties,放(fàng)在特定Action的(de)目γ♣'錄下(xià);
  文(wén)件(jiàn)內(nèi)容如(÷¥' rú):typeName=ConvertClas>♠βs,比如(rú)org.person.Person&δ≤€=org.convert.Converter2
  注意:typeName表示轉換類型↔γ♥,convertClass表示轉換器(qì)的($Ωde)實現(xiàn)類;
  代碼示例:
  Conversion03Action.java↓♦₽
  packageorg.conversioγ≥←n.action;
  importorg.person.Person; ★₩
  importcom.opensymphon∞™y.xwork2.ActionSupport;
  publicclassConversion0♣∞γ3ActionextendsActionSupport{
  privatePersonp;
  publicStringexecute()δ£throwsException{
  System.out.println(p.getGender())×'‍÷;
  System.out.println(p.getπγα™Salary());
  returnSUCCESS;
  }
  publicPersongetP(){
  returnp;
  }
  publicvoidsetP(Personp$&©){
  this.p=p;
  }
  }
  Converter01.java
  packageorg.converter;
  importjava.util.Map;
  importorg.person.Person;
  importcom.opensymphony.xwork2.conve↔≈×rsion.impl.DefaultTypeConvλβε₽erter;
  publicclassConverter01extendsD±∞efaultTypeConverter{₽'↕"
  @Override
  publicObjectconvertValue(Ma¥₹Ωεp<String,Object>co‌£✘λntext,Objectvalue,
  ClasstoType){
  if(toType==String≠'‍.class){
  Personp=(Person)value;
  returnp.getSalary()+","+±×♦p.getGender();
  }
  elseif(toType==Person.class){
  Stringparams[]=(St§Ω‍ring[])value;
  String[]values=params[0].split(&♣©quot;\\,");
  Personp=newPerson();
  p.setGender(values®ε[1]);
  p.setSalary(Double.parseDouble(value&>s[0]));
  returnp;
  }
  returnnull;
  }
  }
  3.jsp
  pageEncoding="utf-8"%>Ω↑→γ
  <html>
  <head>
  <metahttp-equiv="Conten•₹​≤t-Type"content="text​©∞ε/html;charset=utf-8">♦<™;
  <title>Inserttitlehere</ti£γtle>
  </head>
  <body>
  <s:fielderror></s:f< ielderror>
  <s:formaction="conversion0✘®3">
  <s:textfieldlabel="↑δ≥₩薪水(shuǐ),性别"nam₩ e="p"></s:textfield&g​♠φ≈t;
  <s:submitvalue="提交"&↑&gt;</s:submit>
  </s:form>
  </body>
  </html>
  Conversion03Action-convβ✔ ersion.properties
  p=org.convert.Converter01
  2.繼承StrutsTypeConverte÷ ≠r
  StrutsTypeConverter是(shì)¥∏♦‍DefaultTypeConverter的(de)子(zǐ)類,☆'₽✔DefaultTypeConverter的(de)類型轉換器(qì)是(sπ≠<hì)在一(yī)個(gè)函數(shù)中進行(xíng)雙向轉換,而繼承Sδ>trutsTypeConverter的(de)‌‍ &類型轉換器(qì)則是(shì)将兩個(↑≠→gè)方向分(fēn)别用(yòng)兩₩¥個(gè)函數(shù)實現(xiàn):
  @Override
  publicObjectconvertFromStrin ♣₩g(Mapcontext,String[]values,&¥ClasstoClass){
  }
  @Override
  publicStringconvertToString('βλMapcontext,Objecto){
  }
 
    本文(wén)由邯鄲網絡公司首創網絡整理(lǐ)編輯‍↑ ‍發布,請(qǐng)勿轉載、複制(zhì)、摘抄等!

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

0310-4559740
400-990-1661
    24小(xiǎo)時(shí)報(bào)務熱(rè)線¥€γ
    18931045623
在線客服
首創網絡邯鄲公司
邯鄲公司
電(diàn)話(huà):0310-4¶≠δ559740 / 18931045623  地→ (dì)址:邯鄲市(shì)叢台區(qū)頤高(gā↑¥₩'o)廣場(chǎng)B座13層1304室