Task Flow使用指南之二:传递参数给Task Flow(2)

187 篇文章 2 订阅
开发环境:JDevloper 11.1.2.1.0+ Oracle Database 10g Express Edition 10.2.0.1。

本实验实现如下场景:
在Department页面,选中一个部门后,传递DepartmentId给Employee TaskFlow,从而显示该Department下的员工。
这里使用ADF-BC方式默认创建了Department和Employee的EO和VO,然后修改EmployeeView,添加一个Where子句:WHERE Employees.DEPARTMENT_ID = :bv_departmentId。

1. 为了对比开发效果,我这里使用了两种实现方式
(1)在adfc-config.xml中分别创建两组:各自的页面+各自的TaskFlow。

(2)方式一:使用了method节点:ExecuteWithParams,这是ADF推荐的实现方式。

(3)方式二:没有使用method节点,而是在页面中调用ExecuteWithParams。


2. 方式一和方式二的页面department.jsf和department2.jsf代码完全一样。
都是点击DepartmentId链接后,传递departmentId到requestScope中,
<af:commandLink text="#{row.DepartmentId}" id="cl1" action="toEmployees">
<af:setPropertyListener from="#{row.DepartmentId}" to="#{requestScope.deptId}" type="action"/>
</af:commandLink>
使用RequestScope的原因是遵循变量范围最小够用原则。
重要说明:
这里其实还是应该设置成pageFlowScope,具体说明请参考《 使用Bounded Task Flow、Region和Router 》。

3. 方式一:实现employees-taskflow。  
(1)双击打开employees-taskflow定义,点击空白处,设置其输入参数:
在这里定义的输入参数会自动放到pageFlowScope中! 
相关的文档说明我没有找到,是在实验中发现的:增加新的变量后,所有的EL编辑框的下拉列表中的pageFlowScope节点下会出现这个变量。
重要说明:
这里其实还是应该获取来自pageFlowScope的变量,具体说明请参考《 使用Bounded Task Flow、Region和Router 》。


(2)双击打开adfc-config定义,选中employees-taskflow Call,设置其输入参数:
说明:这里的定义要与上一步保持一致。
不知道为啥要定义两次。我感觉是因为这里有其它的参数,如Pass By Value,所以需要再定义一次。

(3)设置ExecuteWithParams节点
这里我使用#{requestScope.deptId}作为参数值,之所以不使用#{pageFlowScope.ip_departmentId},是因为测试结果显示#{pageFlowScope.ip_departmentId}返回值为空。
也就是说taskFlow的inputParameter没有起到预想的作用,原因尚未查明。
没办法,只好另想办法:因为可以读取到requestScope中的变量,所以就使用了#{requestScope.deptId}。
重要说明:
原因已经查明,TaskFlow的输入参数必须使用pageFlowScope,具体说明请参考《 使用Bounded Task Flow、Region和Router 》。


(4)运行页面department.jsf,效果和预想的一样。

4. 方式二:实现employees2-taskflow。
(1)在employee2.jsf页面装载时,会调用方法ExecuteWithParams。
具体实现方式请参考《 使用ADF-BC 实现查询功能之三:如何在页面装载时自动执行查询? 》。
(2)为employee2.jsf页面设置Page Parameter:

说明:From Value来自requestScope.deptId,To Value是要在employee2-taskflow中要用到的参数pageFlowScope.departmentId。
(3)那么,在本例中,哪里使用了参数pageFlowScope.departmentId呢?
在employee2.jsf页面中Binding的ExecuteWithParams方法的参数中使用了pageFlowScope.departmentId。
当然,这里我们依然可以使用requestScope.deptId,但是为了能够让taskFlow中其它页面也使用该变量,还是将其复制到了pageFlowScope中。
也就是说,这里是通过设置TaskFlow中的默认页面的Page Parameter把参数传进来。
而不是通过taskFlow的inputParameter传递参数,因为taskFlow的inputParameter没有起到预想的作用,原因待查。

(4)运行department2.jsf,效果和方式一应该一样。

参考文献:
1. http://andrejusb.blogspot.com/2007/12/jdeveloper-11g-and-adf-task-flow.html

Project 下载:ADF_TaskFlow_InputParam.7z

http://maping930883.blogspot.com/2010/04/adf083task-flowtask-flow_25.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值