6.2 ? freemarker 視圖技術使用介紹
freemarker 和 velocity 一樣也是一種可以替代 JSP 的視圖技術。而且 Struts2 中對它的支持要比對 velocity 也強大的多。下面就對它進行介紹。
技術要點
本節代碼說明 freemarker 在 Struts2 中使用方式。
freemarker 基本語義和書寫格式說明。
模板文件 ftl 介紹 。
Struts2 中如何使用 freemarker 。
演示代碼
顯示數據的 ftl 模板文件代碼:
- <!-------------------文件名:show.ftl-------------> ??
- <html> ??
- ????<head> ??
- ????<title>FreeMarker使用范例</title> ??
- ????<meta?http-equiv= "content-type" ?content= "text/html;?charset=GB2312" /> ??
- ????</head> ??
- ? ??
- ????<body> ??
- ???????<h3?align= "left" > ??
- ????????????FreeMarker使用范例 ??
- ????????</h3> ??
- ???????<h1>裝修材料信息列表</h1> ??
- ??????? ??
- ????????<table?border> ??
- ????????<tr?align= "center" > ??
- ??????????<td>材料名</td> ??
- ??????????<td>材料價格(單位:元)</td> ??
- ??????????<td>材料庫存量(單位:個)</td> ??
- ????????</tr> ??
- ????????<#list?mList?as?Material> ??
- ??????????????<tr?align= "center" > ??
- ??????????????????<td>${Material.material}</td> ??
- ??????????????????<td>${Material.bid}</td> ??
- ??????????????????<td>${Material.mount}</td> ??
- ?????????????</tr> ??
- ????????</#list> ??
- ???????</table> ??
- ????</body> ??
- </html>??
<!-------------------文件名:show.ftl-------------> <html> <head> <title>FreeMarker使用范例</title> <meta http-equiv="content-type" content="text/html; charset=GB2312"/> </head> <body> <h3 align="left"> FreeMarker使用范例 </h3> <h1>裝修材料信息列表</h1> <table border> <tr align="center"> <td>材料名</td> <td>材料價格(單位:元)</td> <td>材料庫存量(單位:個)</td> </tr> <#list mList as Material> <tr align="center"> <td>${Material.material}</td> <td>${Material.bid}</td> <td>${Material.mount}</td> </tr> </#list> </table> </body> </html>
?
Action 代碼同 velocity 示例中 Action 代碼,這里就不顯示了。讀者自行閱讀。
配置文件對 Action 的配置內容:
- <!-----------文件名:struts.xml-----------> ??
- ……… ??
- < package ?name= "C06.1" ? extends = "struts-default" > ??
- ???????????????????<action?name= "velocity" ??
- ???????????????????????????? class = "action.VelocityAction" > ??
- ????????????????????????????<result?name= "success" ?type= "freemarker" >/velocity/show.vm</result> ??
- ???????????????????</action> ??
- </ package >??
<!-----------文件名:struts.xml-----------> ……… <package name="C06.1" extends="struts-default"> <action name="velocity" class="action.VelocityAction"> <result name="success" type="freemarker">/velocity/show.vm</result> </action> </package>
?
對支持中文字符的字符編碼集設置也如 velocity 示例。示例效果顯示如圖 6.2 。
圖 6.2 ? freemarker 顯示效果圖
代碼解釋
( 1 )本節示例也是將一些裝修材料用 list 形式顯示在頁面上。只不過現在使用的是 freemarker 。它其實是將 JAVA 代碼中定義好的類,在底層使用 map 類型顯示在頁面上。因此在 ftl 模板中看見的“ # ”標識除了表明控制轉向之外,其他都是 map 的 key 值,而每個 key 值對應的 value 就是 JAVA 中定義的類,這些類有可能是 JavaBean 也有可能像本示例中的材料列表一樣是 list 和其他數據集合類。“ $ ”標識和 velocity 中“ $ ”標識類似是用來標識具體對象或變量。
( 2 ) freemarker 模板文件后綴名都是“ ftl ”結尾。它也可以在文件中定義各種各樣的 html 標簽和代碼。不過它要調用 Struts2 的標簽則調用方法要比 vm 文件調用 Struts2 標簽要稍微復雜點。
首先在它的文件頭部使用 assign 來導入 Struts2 的標簽定義。代碼如下:
- <#assign?s=JspTagLibs[“/WEB-INF/struts-tags.tld”]/>??
<#assign s=JspTagLibs[“/WEB-INF/struts-tags.tld”]/>
?
另外在每次調用 Struts2 標簽時候前面要加上“ @ ”。
( 3 )在 Struts2 中使用 freemarker 技術,首先要在項目中導入 freemarker 的 jar 包。 struts.xml 文件中,同樣筆者用黑體注明了 result 的返回類型必須是“ freemarker ”,這樣才可以調用 ftl 模板文件。關于中文字符支持問題的解決方法也如筆者介紹 velocity 的小節中相同。
注意: ftl 文件中對英文字符的大小寫是很敏感的,因此對某些對象和變量的定義時候,請讀者注意大小寫問題。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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