XWork配置
你的应用程序的基本包(base package)应该扩展自 webwork-portlet-default 包, 例如:
<include file="webwork-default.xml" />
<package name="view" extends="webwork-portlet-default" namespace="/view">
Portlet初始化参数
下面是在 portlet.xml 中为portlet配置portlet模式(mode) -> xwork命名空间(namespace)影射的 init-param 元素. 简单的讲, 你可以把portlet模式理解为不同的子应用程序, 这样它可以为不同的portlet和portlet模式在 xowrk.xml 中配置不同的命名空间(namespace):
Key |
描述 |
默认值 |
portletNamespace |
这个portlet在xwork配置中的命名空间(namespace). 命名空间(namespace)将在查找action时被优先考虑, 从而允许在同一个portlet应用程序中建立(host)多个portlet. 如果设定了这个参数, 完整的命名空间(namespace)将会是 /portletNamespace/modeNamespace/actionName |
默认命名空间. |
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. |
默认命名空间. |
helpNamespace |
xwork配置中帮助portlet模式(help portlet mode)的命名空间(namespace). |
默认命名空间. |
defaultViewAction |
在没有指定action名称时, 视图portlet模式(view portlet mode)使用的默认action名称. |
默认值 |
defaultEditAction |
在没有指定action名称时, 编辑portlet模式(edit portlet mode)使用的默认action名称. |
默认值 |
defaultHelpAction |
在没有指定action名称时, 帮助portlet模式(help portlet mode)使用的默认action名称. |
默认值 |
例子
<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 模式下调用的默认action名称 -->
<name>defaultViewAction</name>
<value>index</value>
</init-param>
这个 portlet.xml 的片断将会建立一个命名空间为 /portletA/ 的portlet. 这意味着所有对该portlet的请求将优先在此命名空间中寻找action. 进一步说, _视图(view) portlet 模式将会影射到 /view 命名空间, 这样一个对叫 myAction 的action的请求将会被转发到一个 /portletA/view/myAction 命名空间下的action上. 这也意味着如果没有请求一个action, 那么对这个请求将会调用默认的action index.
Portlet 阶段(phases)
Portlet规范描述一个portlet请求周期将持续为两个阶段, event(活动) 阶段 和 render(渲染) 阶段. 假设这个portlet中有 event(活动) 阶段, 那么它将肯定先于 render(渲染) 阶段执行. Event(活动) 阶段一般用来改变应用程序的状态. 在一个portlet中, 典型情况是在form提交的时候. Render(渲染) 阶段将会准备和分派到视图(view). 推荐你将一个在 event(活动) 阶段执行的action的结果(result)指向到另外一个在 render(渲染) 阶段执行的action上, 后者用来负责派发到真正的视图.
Portlet 结果派发(result dispatching)
webwork-portlet-default 包定义了一个特殊的默认结果类型(result type), 它负责执行一个Action执行的结果逻辑(result logic). 一般, 这包括include一个jsp进行渲染, 或者为当前的活动 action准备一个渲染 action.
这个结果类型有三种主要执行模式.
- 如果这个Action在渲染阶段执行, 它会对配置在 location 属性下的资源执行 PortletRequestDispatcher.include(req, res) 方法.
- 如果这个Action在活动阶段执行, 并且结果是一个action影射(action mapping), 它会给ActionResponse设置一个渲染参数指定哪个Action将会在接下来的渲染阶段执行. 这符合良好的web应用程序设计, 着提促进了活动后重定向(redirect)的使用, 这样意味着一个在活动阶段执行的Action将会紧接着被重定向到一个在渲染阶段执行的Action.
- 如果这个Action在活动阶段被执行, 并且结果不是一个action影射(action mapping), 结果将会作为一种特殊的Action准备, 它被叫做 "renderDirect(直接渲染)" (在 webwork-portlet-default 包中指定), 它的唯一职责就是渲染特定的web资源 (一般是一个JSP).
在活动模式执行的action可以通过result配置中的query string给渲染模式执行的action传递渲染参数:
<result name="success">/displayCart.action?userId=${userId}</result>
这会将一个叫做 userId 的 渲染参数 值传递给将要派发到的action的 userId 属性.