2012年3月1日星期四

ADF_112:使用SetCurrentRowWithKeyValue

ADF_112:使用SetCurrentRowWithKeyValue

开发环境:JDevloper 11.1.2.1.0+ Oracle Database 10g Express Edition 10.2.0.1。

每个View Object都有两个个默认的Operation:setCurrentRowWithKey和setCurrentRowWithKeyValue。
关于setCurrentRowWithKey使用方法请参考《收藏带参数的编辑页面》,本文介绍如何使用SetCurrentRowWithKeyValue
该方法可以用来设置VO的当前行,参数就是主键,也就是给主键赋值。
考虑如下场景:两个页面都使用了Table,分别绑定各自的VO,点击第1个页面中的某行,导航到第2个页面。
希望能够显示第2个页面中当前选中的行。

本实验也可以作为两个页面之间如何传递参数的例子。

重点步骤说明:
1. 设置VO:DepartmentHasEmployeeView的主键
该VO选择所有有员工的部门,使用SQL语句方式创建,因此需要手工设置主键:DepartmentId。


2. 设置VO:DepartmentSalaryView的主键
该VO计算所有有员工的部门的工资总和,使用SQL语句方式创建,因此需要手工设置主键:DepartmentId。


3. 创建页面:departmentList.jsf
拖放DepartmentHasEmployeeView 生成表格,把DepartmentId列使用Link方式展现。
注意,这里要拖放DepartmentSalaryView中的SetCurrentRowWithKey生成ADF Link组件。

也就是说,点击DepartmentId列,会执行DepartmentSalaryView中的SetCurrentRowWithKey方法,即把当前行的DepartmentId,传递给下一个页面:departmentSalary.jsf。
注意,如果行数比较多,出现了滚动条,需要设置属性DisplayRow=selected。
这样,如果选中的行比较靠后,滚动条会自动滚到合适的位置,不用人工再拖。
页面代码如下:
<af:commandLink actionListener="#{bindings.setCurrentRowWithKeyValue.execute}"
text="#{row.DepartmentId}" disabled="#{!bindings.setCurrentRowWithKeyValue.enabled}"
id="cl1" action="toSalary"/>

4. 创建页面:departmentSalary.jsf
拖放DepartmentSalaryView 生成表格,把DepartmentId列使用Link方式展现。
注意,这里要拖放DepartmentHasEmployeeView中的SetCurrentRowWithKey生成ADF Link组件。

也就是说,点击DepartmentId列,会执行DepartmentSalaryView中的SetCurrentRowWithKey方法,即把当前行的DepartmentId,传递回上一个页面:departmentList.jsf。
注意,如果行数比较多,出现了滚动条,需要设置属性DisplayRow=selected。
这样,如果选中的行比较靠后,滚动条会自动滚到合适的位置,不用人工再拖。
页面代码如下:
<af:commandLink actionListener="#{bindings.setCurrentRowWithKeyValue.execute}"
text="#{row.DepartmentId}"
disabled="#{!bindings.setCurrentRowWithKeyValue.enabled}" id="cl1" action="back"/>

5. 运行效果
(1)在departmentList.jsf页面中,点击DepartmentId=110的行,

(2)导航到departmentSalary.jsf页面,发现自动选中的当前行就是DepartmentId=110的那行。

(3)在departmentSalary.jsf页面中,点击DepartmentId=70的行,

(4)导航到departmentList.jsf页面,发现自动选中的当前行就是DepartmentId=70的那行。

这就是SetCurrentRowWithKeyValue起到的作用。

Project 下载:ADF_SetCurrentRowWithKeyValue.7z

参考文献:
1. https://blogs.oracle.com/shay/entry/selecting_a_row_in_a_table_to
2. https://blogs.oracle.com/shay/entry/passing_value_between_pages_to
3. http://eleven-china.blogspot.kr/2009/03/task-flow.html

没有评论: