2009年9月19日星期六

ADF_030:使用ADF Controller 之四:收藏带参数的编辑页面

本文最后一次修改时间:2012-03-15。
开发环境:JDevloper 11.1.2.1.0+ Oracle Database 10g Express Edition 10.2.0.1。

所谓收藏,就是可以使用浏览器收藏某个页面URL。浏览器一般只能收藏静态页面,如果要是收藏带参数的页面需要自己手工传递参数。
ADF 支持浏览器收藏带参数的ADF页面,无需人工传递参数。
本文介绍了如何使用手工添加action Binding,并且介绍了如何使用setCurrentRowWithKey。

1. 原始项目(尚未支持收藏)介绍
(1)browseDepartments.jsf显示部门列表信息,选中某个部门后,导航到editDepartment.jsf显示选中的部门的详细信息。

(2)“Edit Selected Department”按钮上没有传递任何参数,因为这两个页面使用的是同一个Data Control,同一个iterator。
<af:commandButton text="Edit Selected Department" id="cb1" action="edit"/>

(3)editDepartment.jsf页面,点击Submit按钮返回。

(4)如果使用浏览器收藏editDepartment.jsf页面,访问时会依然显示browseDepartments.jsf页面,说明显示的页面不对,同时参数也未传递。

2. 为按钮增加参数
这是使用的是参数是bindings.DepartmentsView1Iterator.currentRowKeyString。
注意RowKeyString不是数据库表中的主键字段,而是标识该行的一串数字,不具有实际意义。


修改后的“Edit Selected Department”按钮代码如下:
<af:commandButton text="Edit Selected Department" id="cb1" action="edit">
<af:setActionListener from="#bindings.DepartmentsView1Iterator.currentRowKeyString}" to="#{pageFlowScope.rowKey}"/>
</af:commandButton>

3. 设置editDepartment页面的收藏属性
设置editDepartment页面的收藏属性之前,需要做一些前期准备工作。
(1)为editDepartment页面增加一个action Binding:setCurrentRowWithKey。
其参数值设置为#{pageFlowScope.rowKey}。

点击确定后,定义完成如下:

(2)创建一个Managed Bean,通过代码执行setCurrentRowWithKey Operation。
public void handleBookMarkRequest() {
OperationBinding operb = ADFUtils.findOperation("setCurrentRowWithKey");
operb.execute();
}
(3)设置editDepartment页面的收藏属性。
在adfc-config.xml中,选中editDepartment,设置如下:
Bookmark=True。
Method=#{pageFlowScope.myBackingBean.handleBookMarkRequest},这是在Bookmark时执行的方法。
设置URL中传递的参数:rowKey=#{pageFLowScope.rowKey}。


4. 运行browseDepartment,收藏editDepartment.jsf页面
比如,如果选择了departmentId=80的部门,然后收藏editDepartment.jsf页面。
然后使用收藏夹直接访问editDepartment.jsf页面,发现正确显示了departmentId=80的部门信息。

其中,你会发现浏览器中的URL包含rowKey参数,完整的URL如下:
http://127.0.0.1:7101/ADF_Bookmarkable-ViewController-context-root/faces/editDepartment?Adf-Window-Id=w1&rowKey=00010000000AACED00057704000000500000000800000136152756A4&_afrWindowMode=0&_afrRedirect=21162454962493&_afrLoop=21162296483310&_adf.ctrl-state=12jufcc84a_7

进一步思考,rowKey的值很难参考,能不能使用数据库表的主键值来作为URL参数呢?
这样的话,可以手工修改URL参数,看其它部门的详细信息。

Project 下载:ADF_Bookmarkable.7z

没有评论: