场景描述
如下图,我要在Department页面选中一个DepartmentId,然后把这个值传入到另一个Taskflow中(见图一),然后在这个Taskflow中选中一个Employee,将他的名字返回给Department页面。这里我没有用Master-Detail功能,Employee和Department两个VO是独立的,没有建立View Link关系,仅仅为了讲述Taskflow中是如何传递参数的。
图一
图二
图三
图四
一、在Department页面中的Command Link中,设置setActionListener或者setPropertyListener把当前DepartmentId传入到pageFlowScope中(图一)。
<af:column sortProperty="DepartmentId" sortable="false"
headerText="#{bindings.DepartmentsView1.hints.DepartmentId.label}"
id="c4">
<af:commandLink id="ot4" text="#{row.DepartmentId}" action="employee">
<af:setActionListener from="#{row.DepartmentId}"
to="#{pageFlowScope.deptId}"/>
</af:commandLink>
</af:column>
说明:此处定义了一个pageFlowScope的deptId,并且将当前选中的DepartmentId设置到这个变量中。
另外,在Department所在的TaskFlow中拖入Employee页面的TaskFlow,并且选中这个TaskFlow,如下图
图中的departmentId即是下一步中定义的departmentId,并且给它赋值#{pageFlowScope.deptId}(页面上传过来的),图中EmployeeName也是下一步中定义的Return Value,将Return Value中的值放入pageFlowScope范围的empName变量中,在Employee页面中使用这个变量,如图四中红框中显示的部分。
二、在Taskflow中定义Input Parameters和Return Value Definitions
在Employee页面所在Taskflow中定义Input Parameters,和Return Value Definitions,如下图和源代码。
<input-parameter-definition id="__3">
<name id="__2">departmentId</name>
<value>#{pageFlowScope.departmentId}</value>
</input-parameter-definition>
<return-value-definition id="__16">
<name id="__17">EmployeeName</name>
<value>#{pageFlowScope.employeeName}</value>
</return-value-definition>
说明:这里定义了一个接收传入的参数departmentId和接收返回参数的EmployeeName。上图中1处是在定义时自动生成的,我想应该是个默认值,实际上经测试去掉这个也没有关系,可以在这里定义一个常量,试着不给departmentId传参,看是否能根据指定的departmentId查询出对应的Employees结果。上图2处是界面上定义的变量,目的是在界面上通过Command组件将选中的Employee Name传到这个变量中,在设置到Return Value中,继续看以下步骤。
三、进入Employee页面前执行以departmentId为参数的查询,在Employee页面中的CommandLink中设置setActionListener或者setPropertyListener把当前DepartmentId传入到pageFlowScope中(图三),类似第一步。Employee页面的TaskFlow如下图:
四、详细内容参见源代码
http://download.youkuaiyun.com/detail/ygj26/4622897
参考文献
http://docs.oracle.com/cd/E23943_01/web.1111/b31974/taskflows_parameters.htm#CHDCAJIH