4、視圖
有幾種作為視圖的技術可以使用:
l JSP:這是Java Web開發者熟悉的技術,可以作為通用選擇;本教程介紹在JSP中使用WebWork的標記庫
l Velocity:一種基于Java的模板引擎,提供簡單而強大的模板語言VTL來替代JSP,將Java代碼從Web頁面中分離
l Freemaker:對于MVC模式設計,另外一種可以替代JSP的基于Java的模板引擎,但兼容JSP標記
4.1、使用JSP作為視圖
使用JSP呈現視圖,可以使用Scriptlets或WebWork標記來訪問Action的數據。推薦使用WebWork標記庫。
(1)使用Scriptlets訪問Acition的數據
在Scriptlets中是使用Value Stack對象訪問Action的數據的,下面是使用Scriptlets實現上節中第二個例子的結果輸出頁面:
<%@ page import="com.opensymphony.xwork.util.OgnlValueStack" %>
<html>
<head>
<title>WebWork Tutorial - Lesson 4.1 - Lesson 3's example modified</title>
</head>
<body>
<%
OgnlValueStack stack = (OgnlValueStack)request.getAttribute("webwork.valueStack");
out.write("Hello, " + stack.findValue("person"));
%>
</body>
</html>
然而,推薦使用WebWork標記,就象上節中第二個例子使用<ww:property />做的那樣,具有清晰的語法,并能在Value Stack對象不存在時處理。
(2)使用WebWork標記庫
WebWork標記庫可以分為7類:
l 通用標記:最常用的基本標記;
l 組件標記:在視圖中生成組件;
l 流程控制標記:控制JSP中的流程;
l Iteration標記:遍歷訪問元素或操作可遍歷對象;
l UI標記:生成HTML表單域和控制;
l VUI標記:(需要志愿者來編寫);
l 國際化標記:使視圖具有國際化;
(1)通用標記
<ww:property />
|
獲得結果屬性值;如果值不存在,返回Value Stack 中最頂上的值
|
<ww:push />
|
將值推入Value Stack
|
<ww:param />
|
設置父標記的參數(屬性)值;該標記只能在其它標記內部使用
|
<ww:set />
|
設置Value Stack 中具有指定范圍(page, stack, application, session)的對象值;如果沒有指定值,使用Value Stack 中最頂上的值
|
<ww:url />
|
創建編碼的URL
|
(2)組件標記
<ww:action />
|
在taglib的上下文中執行一個Action ,標記體用來顯示Action 的響應結果
|
<ww:bean />
|
在ActionContext 中創建一個JavaBean,實例化它的屬性,以便以后使用
|
<ww:include />
|
包含另外一個頁面或Action
|
(3)流程控制標記
<ww:if />
|
如果條件標記的布爾表達式為true ,計算標記體的內容
|
<ww:else />
|
如果前面條件標記的布爾表達式為false,計算標記體的內容
|
<ww:elseif />
|
如果前面條件標記的布爾表達式為false,而本條件標記的布爾表達式為true,計算標記體的內容
|
(4)Iteration標記
<ww:iterator />
|
遍歷一個集合
|
<ww:generator />
|
生成遍歷對象
|
<ww:append />
|
追加遍歷對象
|
<ww:subset />
|
獲得遍歷對象的子集
|
<ww:merge />
|
合并幾個遍歷對象為一個.
|
(5)UI標記
生成HTML表單控件的UI標記和WebWork核心緊密集成,標記被設計為最小化編譯代碼邏輯的數量和使用模板系統呈現HTML的代表。UI標記覆蓋了大部分常用標記,而且提供了一個組件標記,用來創建定制組件。UI標記還提供了顯示內聯錯誤信息的內建支持。有關UI標記的詳細介紹,在下一節中講述。
(6)VUI標記
需要志愿者來編寫。
(7)國際化標記
<ww:text />
|
打印出國際化字符串
|
<ww:i18n />
|
將一個資源包放到Value Stack中, 以便<ww:text />標記使用
|