场景描述
如下图,我要在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.csdn.net/detail/ygj26/4622897
参考文献
http://docs.oracle.com/cd/E23943_01/web.1111/b31974/taskflows_parameters.htm#CHDCAJIH