XWork配置
你的應(yīng)用程序的基本包(base package)應(yīng)該擴(kuò)展自 webwork-portlet-default 包, 例如:
<include file="webwork-default.xml" />
<package name="view" extends="webwork-portlet-default" namespace="/view">
Portlet初始化參數(shù)
下面是在 portlet.xml 中為portlet配置portlet模式(mode) -> xwork命名空間(namespace)影射的 init-param 元素. 簡單的講, 你可以把portlet模式理解為不同的子應(yīng)用程序, 這樣它可以為不同的portlet和portlet模式在 xowrk.xml 中配置不同的命名空間(namespace):
Key |
描述 |
默認(rèn)值 |
portletNamespace |
這個(gè)portlet在xwork配置中的命名空間(namespace). 命名空間(namespace)將在查找action時(shí)被優(yōu)先考慮, 從而允許在同一個(gè)portlet應(yīng)用程序中建立(host)多個(gè)portlet. 如果設(shè)定了這個(gè)參數(shù), 完整的命名空間(namespace)將會是 /portletNamespace/modeNamespace/actionName |
默認(rèn)命名空間. |
viewNamespace |
xwork配置中視圖portlet模式(view portlet mode)的命名空間(namespace). |
The default namespace. |
editNamespace |
xwork配置中編輯portlet模式(edit portlet mode)的命名空間(namespace). The namespace in the xwork config for the edit portlet mode. |
默認(rèn)命名空間. |
helpNamespace |
xwork配置中幫助portlet模式(help portlet mode)的命名空間(namespace). |
默認(rèn)命名空間. |
defaultViewAction |
在沒有指定action名稱時(shí), 視圖portlet模式(view portlet mode)使用的默認(rèn)action名稱. |
默認(rèn)值 |
defaultEditAction |
在沒有指定action名稱時(shí), 編輯portlet模式(edit portlet mode)使用的默認(rèn)action名稱. |
默認(rèn)值 |
defaultHelpAction |
在沒有指定action名稱時(shí), 幫助portlet模式(help portlet mode)使用的默認(rèn)action名稱. |
默認(rèn)值 |
例子
<init-param>
<!-- Portlet 命名空間 -->
<name>portletNamespace</name>
<value>/portletA</value>
</init-param>
<init-param>
<!-- view portlet 的基本命名空間 -->
<name>viewNamespace</name>
<value>/view</value>
</init-param>
<init-param>
<!-- 在view portlet 模式下調(diào)用的默認(rèn)action名稱 -->
<name>defaultViewAction</name>
<value>index</value>
</init-param>
這個(gè) portlet.xml 的片斷將會建立一個(gè)命名空間為 /portletA/ 的portlet. 這意味著所有對該portlet的請求將優(yōu)先在此命名空間中尋找action. 進(jìn)一步說, _視圖(view) portlet 模式將會影射到 /view 命名空間, 這樣一個(gè)對叫 myAction 的action的請求將會被轉(zhuǎn)發(fā)到一個(gè) /portletA/view/myAction 命名空間下的action上. 這也意味著如果沒有請求一個(gè)action, 那么對這個(gè)請求將會調(diào)用默認(rèn)的action index.
Portlet 階段(phases)
Portlet規(guī)范描述一個(gè)portlet請求周期將持續(xù)為兩個(gè)階段, event(活動) 階段 和 render(渲染) 階段. 假設(shè)這個(gè)portlet中有 event(活動) 階段, 那么它將肯定先于 render(渲染) 階段執(zhí)行. Event(活動) 階段一般用來改變應(yīng)用程序的狀態(tài). 在一個(gè)portlet中, 典型情況是在form提交的時(shí)候. Render(渲染) 階段將會準(zhǔn)備和分派到視圖(view). 推薦你將一個(gè)在 event(活動) 階段執(zhí)行的action的結(jié)果(result)指向到另外一個(gè)在 render(渲染) 階段執(zhí)行的action上, 后者用來負(fù)責(zé)派發(fā)到真正的視圖.
Portlet 結(jié)果派發(fā)(result dispatching)
webwork-portlet-default 包定義了一個(gè)特殊的默認(rèn)結(jié)果類型(result type), 它負(fù)責(zé)執(zhí)行一個(gè)Action執(zhí)行的結(jié)果邏輯(result logic). 一般, 這包括include一個(gè)jsp進(jìn)行渲染, 或者為當(dāng)前的活動 action準(zhǔn)備一個(gè)渲染 action.
這個(gè)結(jié)果類型有三種主要執(zhí)行模式.
- 如果這個(gè)Action在渲染階段執(zhí)行, 它會對配置在 location 屬性下的資源執(zhí)行 PortletRequestDispatcher.include(req, res) 方法.
- 如果這個(gè)Action在活動階段執(zhí)行, 并且結(jié)果是一個(gè)action影射(action mapping), 它會給ActionResponse設(shè)置一個(gè)渲染參數(shù)指定哪個(gè)Action將會在接下來的渲染階段執(zhí)行. 這符合良好的web應(yīng)用程序設(shè)計(jì), 著提促進(jìn)了活動后重定向(redirect)的使用, 這樣意味著一個(gè)在活動階段執(zhí)行的Action將會緊接著被重定向到一個(gè)在渲染階段執(zhí)行的Action.
- 如果這個(gè)Action在活動階段被執(zhí)行, 并且結(jié)果不是一個(gè)action影射(action mapping), 結(jié)果將會作為一種特殊的Action準(zhǔn)備, 它被叫做 "renderDirect(直接渲染)" (在 webwork-portlet-default 包中指定), 它的唯一職責(zé)就是渲染特定的web資源 (一般是一個(gè)JSP).
在活動模式執(zhí)行的action可以通過result配置中的query string給渲染模式執(zhí)行的action傳遞渲染參數(shù):
<result name="success">/displayCart.action?userId=${userId}</result>
這會將一個(gè)叫做 userId 的 渲染參數(shù) 值傳遞給將要派發(fā)到的action的 userId 屬性.