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

Struts2講義27

系統(tǒng) 2135 0

6 ? Struts2 JSP 視圖技術(shù)

在之前的章節(jié)中,筆者的代碼示例都是用 JSP 來實現(xiàn)的。其實 Struts2 不僅僅支持 JSP 這一種視圖技術(shù)。作為 MVC 架構(gòu)中 view 層技術(shù), velocity FreeMarker 視圖技術(shù)也是很優(yōu)秀的,近年來很多 Web 系統(tǒng)項目的架構(gòu)師和開發(fā)者都開始放棄使用 JSP 作為 view 層顯示技術(shù)轉(zhuǎn)向使用 velocity FreeMarker 。因此筆者覺得有必要介紹 Struts2 框架是如何支持這兩種視圖技術(shù)的。希望本章能讓讀者作為“敲門磚”,敲開這兩種視圖技術(shù)的學(xué)習(xí)“大門”。

6.1 ? velocity 視圖技術(shù)使用介紹

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

技術(shù)要點

本節(jié)代碼說明 velocity Struts2 中使用方式。

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

模板文件 vm 介紹

Struts2 中如何使用 velocity

演示代碼

顯示數(shù)據(jù)的 vm 模板文件代碼:

Java代碼 復(fù)制代碼
  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代碼 復(fù)制代碼
  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 的配置內(nèi)容:

Java代碼 復(fù)制代碼
  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>
  

?

對支持中文字符的字符編碼集設(shè)置:

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

?

示例效果顯示如圖 6.1

Struts2講義27

?

6.1 ? velocity 顯示效果圖

代碼解釋

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

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

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

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

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

# ”標(biāo)識: velocity 語言的注釋標(biāo)識。

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

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

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

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

Struts2講義27


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 原阳县| 丽江市| 龙海市| 安化县| 新巴尔虎左旗| 淮南市| 永年县| 定结县| 乐都县| 延吉市| 蓬溪县| 宁夏| 明水县| 神农架林区| 万源市| 清水河县| 渭源县| 根河市| 正安县| 黑山县| 泌阳县| 常宁市| 油尖旺区| 北安市| 阳泉市| 偃师市| 西平县| 沂水县| 定安县| 广州市| 龙川县| 广丰县| 常熟市| 东港市| 察隅县| 云安县| 巴林右旗| 晴隆县| 建瓯市| 格尔木市| 深圳市|