亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Struts2講義27

系統 2124 0

6 ? Struts2 JSP 視圖技術

在之前的章節中,筆者的代碼示例都是用 JSP 來實現的。其實 Struts2 不僅僅支持 JSP 這一種視圖技術。作為 MVC 架構中 view 層技術, velocity FreeMarker 視圖技術也是很優秀的,近年來很多 Web 系統項目的架構師和開發者都開始放棄使用 JSP 作為 view 層顯示技術轉向使用 velocity FreeMarker 。因此筆者覺得有必要介紹 Struts2 框架是如何支持這兩種視圖技術的。希望本章能讓讀者作為“敲門磚”,敲開這兩種視圖技術的學習“大門”。

6.1 ? velocity 視圖技術使用介紹

velocity 翻譯成中文就是“速度”的意思,它的縮寫“ v ”就是物理學中代表速度的符號。由它的名字可以想象出它的設計者對它有什么期望吧。畢竟有時候使用 JSP 來實現 view 層對于開發者來說是件很麻煩又費時的事情。 velocity 就是為開發者節約大量 view 層開發時間而準備的視圖技術。它使用模板文件來顯示視圖界面。除了它自身的書寫格式外,模板文件中其他代碼就是普通的 html 代碼。因此它也是實現松耦合,讓美工和開發人員各司其職進行 view 層開發。下面通過示例來介紹它在 Struts2 中的使用方式。

技術要點

本節代碼說明 velocity Struts2 中使用方式。

velocity 基本語義和書寫格式說明。

模板文件 vm 介紹 。

Struts2 中如何使用 velocity 。

演示代碼

顯示數據的 vm 模板文件代碼:

Java代碼 復制代碼
  1. <!---------------文件名:?show.vm---------> ??
  2. <html> ??
  3. ????<head> ??
  4. ????<title>Velocity使用范例</title> ??
  5. ????<meta?http-equiv= "content-type" ?content= "text/html;?charset=GB2312" /> ??
  6. ????</head> ??
  7. ?????<body> ??
  8. ???????<h3?align= "left" > ??
  9. ????????????Velocity使用范例 ??
  10. ????????</h3> ??
  11. ???????<h1>裝修材料信息列表</h1> ??
  12. ?<table?border> ??
  13. ????????<tr?align= "center" > ??
  14. ??????????<td>材料名</td> ??
  15. ??????????<td>材料價格(單位:元)</td> ??
  16. ??????????<td>材料庫存量(單位:個)</td> ??
  17. ????????</tr> ??
  18. ????????#foreach($Material?in?$mList) ??
  19. ??????????????<tr?align= "center" > ??
  20. ??????????????????<td>$Material.material</td> ??
  21. ??????????????????<td>$Material.bid</td> ??
  22. ??????????????????<td>$Material.mount</td> ??
  23. ?????????????</tr> ??
  24. ???????#end ??
  25. ???????</table> ??
  26. ????</body> ??
  27. </html>??
    <!---------------文件名: show.vm--------->
<html>
    <head>
    <title>Velocity使用范例</title>
    <meta http-equiv="content-type" content="text/html; charset=GB2312"/>
    </head>
     <body>
       <h3 align="left">
            Velocity使用范例
        </h3>
       <h1>裝修材料信息列表</h1>
 <table border>
        <tr align="center">
          <td>材料名</td>
          <td>材料價格(單位:元)</td>
          <td>材料庫存量(單位:個)</td>
        </tr>
        #foreach($Material in $mList)
              <tr align="center">
                  <td>$Material.material</td>
                  <td>$Material.bid</td>
                  <td>$Material.mount</td>
             </tr>
       #end
       </table>
    </body>
</html>
  

?

Struts2 的使用 velocity Action 代碼:

Java代碼 復制代碼
  1. <!----------文件名:VelocityAction.java-------> ??
  2. public ? class ?VelocityAction? extends ?ActionSupport{ ??
  3. ????????? private ?List?mList; ??
  4. ……… ??
  5. ????????? public ?String?execute()? throws ?Exception{ ??
  6. ???????????????????mList?=? new ?ArrayList(); ??
  7. ??????????????????? for ( int ?i= 0 ;i< 4 ;i++){ ??
  8. ????????????????????????????Material?m?=? new ?Material(); ??
  9. ????????????????????????????m.setMaterial( "材料" +(i+ 1 )); ??
  10. ????????????????????????????m.setMount( 10 *(i+ 1 )); ??
  11. ????????????????????????????m.setBid( 1.0 +(i+ 1 )); ??
  12. ????????????????????????????mList.add(m);???????????????????? ??
  13. ???????????????????} ??
  14. ??????????????? return ?SUCCESS;????????????? ??
  15. ?????????} ??
  16. }??
    <!----------文件名:VelocityAction.java------->
public class VelocityAction extends ActionSupport{
         private List mList;
………
         public String execute() throws Exception{
                   mList = new ArrayList();
                   for(int i=0;i<4;i++){
                            Material m = new Material();
                            m.setMaterial("材料"+(i+1));
                            m.setMount(10*(i+1));
                            m.setBid(1.0+(i+1));
                            mList.add(m);                    
                   }
               return SUCCESS;             
         }
}
  

?

配置文件對 Action 的配置內容:

Java代碼 復制代碼
  1. <!--------------文件名:struts.xml-------------> ??
  2. ……… ??
  3. < package ?name= "C06.1" ? extends = "struts-default" > ??
  4. ???????????????????<action?name= "velocity" ??
  5. ???????????????????????????? class = "action.VelocityAction" > ??
  6. ????????????????????????????<result?name= "success" ?type= "velocity" >/velocity/show.vm</result> ??
  7. ???????????????????</action> ??
  8. </ package >??
    <!--------------文件名:struts.xml------------->
………
<package name="C06.1" extends="struts-default">
                   <action name="velocity"
                            class="action.VelocityAction">
                            <result name="success" type="velocity">/velocity/show.vm</result>
                   </action>
</package>
  

?

對支持中文字符的字符編碼集設置:

Java代碼 復制代碼
  1. <!---------------文件名:struts.properties-------> ??
  2. #支持本地化的資源文件名定義 ??
  3. struts.i18n.encoding=gb2312??
    <!---------------文件名:struts.properties------->
#支持本地化的資源文件名定義
struts.i18n.encoding=gb2312
  

?

示例效果顯示如圖 6.1 。

Struts2講義27

?

6.1 ? velocity 顯示效果圖

代碼解釋

1 )本節示例是將一些裝修材料用 list 形式顯示在頁面上。如之前筆者講述的實例完全可以由 JSP 來完成。而該示例是使用 velocity 技術來實現。讀者也可以將其理解為一種和 JavaScript 相同的腳本語言。它的語義和語法中有以下幾個注意點。

# ”標識:該標識用來表明 velocity 中的控制語句。比如“ #if ”、“ #foreach ”等,都是用來控制流程轉向的。

$ ”標識:該標識來表示對象或變量。比如示例中的“ $Material ”。如果這些對象還有自己的屬性,則可以在其后面再加“ . , 如示例中的“ $Material .material ”。

{} ”標識:該標識用來為某對象或變量賦具體的值。比如“ {frank}

“!”標識:假設某變量值為 null 或者還沒被定義。則在該變量前加上“!”,這樣在頁面上調用該變量之處一律顯示為空白即“ ”。

# ”標識: velocity 語言的注釋標識。

2 velocity 模板文件后綴名都是“ vm ”結尾。該類型文件中除了可以書寫 velocity 自己的語言代碼之外,也可以使用 HTMl 語言的標簽。在本示例中查看 show.vm 文件就可以知道它和 JSP 文件還是很相像的。而且 Struts2 的標簽也可以在 vm 文件中使用, 只需要在原有標簽前加“ #s ”就可以了,參數之間使用 “” 分隔。如果讀者需要在 vm 文件中引入其他文件,這些被引入文件是 JSP 或者 vm 類型的話,將會顯示文件中的定義的各種動態數據。如果是其他類型的文件被引入的話,只是顯示這些文件的文本即靜態引入。一般是使用“ #inclue (“文件名”)”格式進行 引入。如果需要引入多個文件則在“()”中以“,”相隔。還有個引入文件的書寫代碼格式是“ #parse ”,這個只能引入 vm 類型文件,而且只能引入一個。不過這樣引入也有一個好處,那就是被引入 vm 文件中不僅可以使用它自己定義的變量也可以使用引入它的 vm 文件中的變量。這樣引入文件和被引入文件關系有點像 JAVA 中父類和子類關系。還有如果想讓界面中顯示 velocity 中這些標識,而不被 velocity 解析,那可以在它們前面加上“ \ ”。比如想顯示“ $ ”,則可以寫成“ \$ ”,這樣在“ $ ”后面的內容, velocity 不會將其解析成 velocity 的變量而只是普通文本。

另外需要注意的時候, velocity 只會按照 gettXXX() 解析變量,例如 Material.material 實際上找到的 Material.getMaterial() 方法,讀者可以試著在 Action 寫一個變量而不使用 getXXX() 方法,看看會不會在 vm 中取到值,答案是變量照樣會被輸出。

3 )在 Struts2 中使用 velocity 技術,首先要在項目中導入 velocity jar 包,具體 jar 包名請讀者參考項目示例。在該示例中 Action 無需過多說明。值得說的是 struts.xml 文件,比如在示例代碼中筆者用黑體注明了 result 的返回類型必須是“ velocity ”,這樣才可以調用 vm 模板文件。然后就可以像使用 JSP 一樣使用 vm 文件顯示 Action 的定義的材料 list 數據。

注意:由于 velocity 缺省顯示中文字符用的字符編碼集合是“ ISO-88591 ”。如果開發中使用的項目字符編碼集合不是“ ISO-88591 ”,則需要在 struts.properties 中定義“ struts.i18n.encoding ”為開發中使用的字符編碼集。比如在本示例中筆者就定義為“ gb2312 ”。

Struts2講義27


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本一片免费观看高清完整 | 国产91精品久久久久999 | 欧美白人猛性xxxxx交69 | 国产精品无码久久综合网 | 欧美一级视频免费观看 | 亚洲精品一区二区久久 | 爱我久久国产精品 | 婷婷综合 | 国产51自产区 | 国内成人免费视频 | 九月激情网 | 国产一区二区三区在线观看视频 | 一级欧美在线的视频 | 久久久久国产精品免费 | 国产在线成人精品 | 免费在线观看黄色毛片 | 久久综合狠狠综合久久 | 亚洲美女亚洲精品久久久久 | 香蕉国产人午夜视频在线观看 | 性欧美高清久久久久久久 | 久久机热这里只有精品无需 | 欧美日韩视频一区二区 | 亚洲精品国产福利在线观看 | 在线成人免费观看国产精品 | 久久免费精品 | 日本不卡中文字幕 | 中文字幕第一区 | 精品一区二区三区的国产在线观看 | 高清亚洲| 日韩亚洲一区二区三区 | 777精品视频| 日本免费在线一区 | 四虎影院永久免费观看 | 久久99亚洲精品久久频 | 欧美19综合中文字幕 | 亚洲国产一区二区三区 | 成人免费播放视频777777 | 久久日本精品国产精品白 | 亚洲欧美中文字幕 | 久久97精品久久久久久清纯 | 99精品视频在线播放2 |