日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Struts2講義30

系統(tǒng) 2217 0

7 ? Struts2 類型轉(zhuǎn)換技術(shù)

Web 項(xiàng)目開(kāi)發(fā)中由于很多數(shù)據(jù)在頁(yè)面上顯示時(shí)候都是以字符串類型來(lái)顯示。而在控制層或者 model 層中開(kāi)發(fā)人員使用 Java 開(kāi)發(fā)時(shí)候,對(duì)于這些從頁(yè)面上傳入或者需要傳到頁(yè)面上顯示的數(shù)據(jù)開(kāi)發(fā)的類型不一定都是字符串類型。因此常常需要在視圖和非視圖之間進(jìn)行類型轉(zhuǎn)換。最明顯的例子就是顯示當(dāng)前日期??墒沁@些開(kāi)發(fā)工作往往是無(wú)關(guān)緊要或者說(shuō)是猶如“雞肋”,而很多開(kāi)發(fā)時(shí)間卻都白白浪費(fèi)在這上面。有感于此, Struts2 的設(shè)計(jì)者提供了類型轉(zhuǎn)換的功能。其實(shí)讀者如果是從本書第一章看到這里,應(yīng)該也估計(jì)的出類型轉(zhuǎn)換也是用攔截器來(lái)實(shí)現(xiàn)的。這里筆者使用 Struts2 類型轉(zhuǎn)換功能,看看在 Struts2 中到底是如何實(shí)現(xiàn)或者說(shuō)如何實(shí)現(xiàn)類型轉(zhuǎn)換。

7.1 ? Struts2 類型轉(zhuǎn)換使用介紹

Struts2 的類型轉(zhuǎn)換幾乎支持 Java 中各種數(shù)據(jù)類型的轉(zhuǎn)換。甚至開(kāi)發(fā)者還可以自定義自己的類型轉(zhuǎn)換功能。不過(guò)在筆者看來(lái),不推薦開(kāi)發(fā)人員開(kāi)發(fā)自定義的類型轉(zhuǎn)換功能。原因有二。一是遵循 IT 界著名名言“不重復(fù)發(fā)明輪子”,不在前人的成果上再次浪費(fèi)時(shí)間。二是類型轉(zhuǎn)換本身在開(kāi)發(fā)工作中就不應(yīng)該占用大量時(shí)間和人力。況且自定義自己的類型轉(zhuǎn)換,項(xiàng)目風(fēng)險(xiǎn)也有可能增加。從項(xiàng)目管理角度對(duì)時(shí)間、成本、風(fēng)險(xiǎn)的管理都存在負(fù)面效應(yīng)。

因此在本節(jié)中筆者具體介紹 Struts2 本身所具有的類型轉(zhuǎn)換功能。大致分為以下:

int boolean double Java 基本類型轉(zhuǎn)換。

Date 類型轉(zhuǎn)換。

List 類型轉(zhuǎn)換。

Set 類型轉(zhuǎn)換。

數(shù)組類型轉(zhuǎn)換。

除了數(shù)組的類型轉(zhuǎn)換不大實(shí)用以外,其他幾種類型轉(zhuǎn)換都是比較常用的。而且筆者認(rèn)為 Date 類型轉(zhuǎn)換也是屬于單個(gè) Java 變量的轉(zhuǎn)換。而 List 、 Set 可以算作集合類型的轉(zhuǎn)換即多個(gè) Java 變量封裝成單個(gè)集合的類型轉(zhuǎn)換。下面就依次介紹有關(guān)知識(shí)點(diǎn)和一些需要注意的細(xì)節(jié)問(wèn)題。

7.1.1 ? 基本數(shù)據(jù)類型轉(zhuǎn)換功能

技術(shù)要點(diǎn)

本節(jié)代碼具體介紹 Java 基本數(shù)據(jù)類型和 Date 類型轉(zhuǎn)換的使用方式介紹。

基本類型轉(zhuǎn)換 Action 中使用方式。

基本類型轉(zhuǎn)換在視圖界面的使用方式。

演示代碼

使用的 Action 文件:

?

Java代碼 復(fù)制代碼
  1. <!------------------------文件名:AddMaterialAction.java----------------> ??
  2. public ? class ?AddMaterialAction? extends ?ActionSupport?{ ??
  3. ????????? //屬性類型需要類型轉(zhuǎn)換的對(duì)象 ??
  4. ????????? private ?Material?material; ??
  5. ??
  6. ????????? public ?Material?getMaterial()?{ ??
  7. ??????????????????? return ?material; ??
  8. ?????????} ??
  9. ??
  10. ????????? public ? void ?setMaterial(Material?material)?{ ??
  11. ??????????????????? this .material?=?material; ??
  12. ?????????} ??
  13. ??
  14. ????????? public ?String?execute()? throws ?Exception?{ ??
  15. ??????????????????? return ?SUCCESS; ??
  16. ?????????} ??
  17. }??
    <!------------------------文件名:AddMaterialAction.java---------------->
public class AddMaterialAction extends ActionSupport {
         //屬性類型需要類型轉(zhuǎn)換的對(duì)象
         private Material material;

         public Material getMaterial() {
                   return material;
         }

         public void setMaterial(Material material) {
                   this.material = material;
         }

         public String execute() throws Exception {
                   return SUCCESS;
         }
}
  

?

配置文件中的導(dǎo)航定義:

?

Java代碼 復(fù)制代碼
  1. <!--------------------文件名:struts.xml---------------------> ??
  2. <!--?Action所在包定義?--> ??
  3. ?????????< package ?name= "C07.1.1" ? extends = "struts-default" >??????????????? ??
  4. ???????????????????<action?name= "addMaterial" ??
  5. ???????????????????????????? class = "com.action.AddMaterialAction" > ??
  6. ????????????????????????????<result?name= "input" >/jsp/addMaterial.jsp</result> ??
  7. ????????????????????????????<result?name= "success" >/jsp/showMaterial.jsp</result> ??
  8. ???????????????????</action> ??
  9. ?????????</ package >??
    <!--------------------文件名:struts.xml--------------------->
<!-- Action所在包定義 -->
         <package name="C07.1.1" extends="struts-default">               
                   <action name="addMaterial"
                            class="com.action.AddMaterialAction">
                            <result name="input">/jsp/addMaterial.jsp</result>
                            <result name="success">/jsp/showMaterial.jsp</result>
                   </action>
         </package>
  

?

類型轉(zhuǎn)換的數(shù)據(jù)輸入 JSP 文件:

?

Java代碼 復(fù)制代碼
  1. <!---------------------文件名:addMaterial.jsp-------------> ??
  2. ………… ??
  3. ?????????<!--?材料輸入表單?--> ??
  4. ????<table> ??
  5. ???????<s:form?id= "materialForm" ?action= "addMaterial" > ??
  6. ???????????<s:textfield?name= "material.material" ?label= "材料名" ></s:textfield> ??
  7. ???????????<s:textfield?name?= "material.bid" ?label= "價(jià)格" ></s:textfield> ??
  8. ???????????<s:textfield?name?= "material.mount" ?label= "庫(kù)存量" ></s:textfield> ??
  9. ???????????<s:datetimepicker?name?= "material.expireDate" ?label= "過(guò)期日期" ></s:datetimepicker> ??
  10. ???????????<s:submit?value= "提交" ></s:submit> ??
  11. ???????</s:form> ??
  12. ????</table>?? ??
  13. …………??
    <!---------------------文件名:addMaterial.jsp------------->
…………
         <!-- 材料輸入表單 -->
    <table>
       <s:form id="materialForm" action="addMaterial">
           <s:textfield name="material.material" label="材料名"></s:textfield>
           <s:textfield name ="material.bid" label="價(jià)格"></s:textfield>
           <s:textfield name ="material.mount" label="庫(kù)存量"></s:textfield>
           <s:datetimepicker name ="material.expireDate" label="過(guò)期日期"></s:datetimepicker>
           <s:submit value="提交"></s:submit>
       </s:form>
    </table>  
…………
  

?

類型轉(zhuǎn)換的顯示數(shù)據(jù) JSP 文件:

?

Java代碼 復(fù)制代碼
  1. <!----------------------文件名:showMaterial.jsp--------------> ??
  2. ………… ??
  3. ????????????????<!--?材料數(shù)據(jù)顯示?--> ??
  4. ????????????<table>??????????? ??
  5. ????????????????材料名:?<s:property?value= "material.material" ?></s:property> ??
  6. ????????????????價(jià)格:???<s:property?value= "material.bid" ?></s:property> ??
  7. ????????????????庫(kù)存量:??<s:property?value= "material.mount" ?></s:property> ??
  8. ????????????????過(guò)期日期:?<s:property?value= "material.expireDate" ?></s:property>???????? ??
  9. ????????????</table>???????????? ??
  10. …………??
    <!----------------------文件名:showMaterial.jsp-------------->
…………
                <!-- 材料數(shù)據(jù)顯示 -->
            <table>           
                材料名: <s:property value="material.material" ></s:property>
                價(jià)格:   <s:property value="material.bid" ></s:property>
                庫(kù)存量:  <s:property value="material.mount" ></s:property>
                過(guò)期日期: <s:property value="material.expireDate" ></s:property>        
            </table>            
…………
  

?

數(shù)據(jù)輸入如圖 7.1 。

Struts2講義30

7.1 ? 各種基本類型數(shù)據(jù)輸入

顯示數(shù)據(jù)如圖 7.2 。請(qǐng)注意各種 Java 類型數(shù)據(jù)在顯示頁(yè)面和輸入頁(yè)面的格式和顯示不同之處。

Struts2講義30

7.2 ? 各種基本類型數(shù)據(jù)顯示

代碼解釋

1 在本示例中,筆者在頁(yè)面上輸入一個(gè) Material 對(duì)象的所有屬性值,并將它的屬性值顯示在頁(yè)面上。由于之前很多示例中已經(jīng)有過(guò) Material 這個(gè) JavaBean 對(duì)象代碼。這里就沒(méi)有寫出給讀者參閱。由以顯示的示例代碼也可知, Material 對(duì)象由材料名、價(jià)格、庫(kù)存量和材料過(guò)期日期四個(gè)屬性組成。恰好這四個(gè)屬性的數(shù)據(jù)類型分別是 String 、 double 、 int 、 date 四個(gè) Java 類型,因此由該示例可以明白 Struts2 的類型轉(zhuǎn)換是如何轉(zhuǎn)換這些 Java 類型。由于 Struts2 也是使用攔截器來(lái)進(jìn)行類型轉(zhuǎn)換,因此對(duì)這些基本的 Java 類型轉(zhuǎn)換根本不需要開(kāi)發(fā)人員編寫任何類型轉(zhuǎn)換代碼。

2 )在輸入數(shù)據(jù)的頁(yè)面,筆者使用 OGNL Struts2 標(biāo)簽來(lái)建立一個(gè)數(shù)據(jù)輸入的表單。使用的 material 對(duì)象在 Action 中已定義完成,并建立 getter setter 方法。這樣在 JSP 頁(yè)面可以設(shè)置該對(duì)象。在頁(yè)面中按“提交”按鈕后,就相當(dāng)于“ setMaterial () ”方法。在系統(tǒng)根據(jù) struts.xml 配置文件執(zhí)行 Action 之前, Struts2 自帶的類型轉(zhuǎn)換攔截器就已經(jīng)將 Material 對(duì)象中幾個(gè)屬性變量的類型由頁(yè)面上輸入時(shí)候的 String 類型轉(zhuǎn)換為 Material 對(duì)象屬性變量被定義的數(shù)據(jù)類型。

3 )在數(shù)據(jù)顯示頁(yè)面上顯示數(shù)據(jù)時(shí)候,實(shí)際上做的事情是上述操作的一個(gè)逆向操作。 Material 對(duì)象中每個(gè)屬性變量的數(shù)據(jù)類型又都轉(zhuǎn)換為頁(yè)面上需要顯示的 String 類型。

4 )實(shí)際上在開(kāi)發(fā)工作中,除非有根據(jù)特殊需求需要類型轉(zhuǎn)換之外。在 Struts2 中絕大部分類型轉(zhuǎn)換都已經(jīng)由 Struts2 自己完成。因此給開(kāi)發(fā)者節(jié)省了大量開(kāi)發(fā)時(shí)間。有時(shí)候根本沒(méi)有意識(shí)到數(shù)據(jù)類型已經(jīng)被轉(zhuǎn)換。除了 Java 基本類型轉(zhuǎn)換之外,有時(shí)候在頁(yè)面上需要批量輸入一些數(shù)據(jù),如果這些數(shù)據(jù)也像本示例的 Material 對(duì)象一樣,那么可以使用 Struts2 自帶的對(duì)集合類型的轉(zhuǎn)換功能來(lái)完成類型轉(zhuǎn)換,下面先介紹 List 類型集合的類型轉(zhuǎn)換。

Struts2講義30


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 连平县| 阿坝| 沙雅县| 吉木乃县| 新密市| 宁海县| 泰顺县| 屏东县| 宁夏| 广宁县| 安乡县| 双鸭山市| 隆德县| 辽中县| 施秉县| 庐江县| 习水县| 磐安县| 神木县| 永顺县| 石景山区| 新建县| 万州区| 九台市| 惠东县| 红安县| 通道| 镇宁| 高雄市| 杂多县| 武清区| 景洪市| 长治市| 苗栗县| 平果县| 临颍县| 高碑店市| 家居| 高雄县| 铜鼓县| 大名县|