2012年8月1日星期三

ADF_182:使用Input Text with LOV 实现LOV

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

使用ADF BC建立模型层时,可以在VO上为某个字段设置LOV。
比如,员工VO中的JobId字段来自于工作VO,这样在界面上会自动生成下拉列表。
在本实验中,我使用Input Text with List of Values来实现LOV。

重点步骤说明:

1. 创建ADF BC from tables
(1)选择Employees 和Jobs,生成ADF BC。
(2)为Employees VO 增加View Accessors:Job VO。

2. 为EmployeesView的JobId字段定义LOV
(1)设置LOV的数据源和返回值
从设置界面可以看出,返回值可以有多个。

(2)选择List Type:Input Text with List of Values;选择显示全部的字段:JobId,JobTitle,MaxSalary,MinSalary。


3. 创建页面
(1)拖放EmployeesView1 Data Control到页面上
发现JobId字段自动选择了List of Values Input组件:


4. 运行效果
(1)点击JobId旁边的“放大镜”按钮,弹出查询窗口,默认不显示任何记录。

(2)点击搜索按钮,显示出所有符合条件的记录。

(3)如果勾上“Query List Automatically”,弹出查询窗口时,会显示出所有符合条件的记录。

(4)如果选择“No Search",弹出查询窗口时,将没有查询条件,比较适合记录比较少的List。

(5)同时选择(3)和(4),运行效果如下:

(6)如果设置inputListOfValues属性editMode="select",输入框变成只读模式,不能输入,只能从下拉列表选择。

(7)如果设置inputListOfValues属性readOnly="true",输入框变成只读模式,下拉列表也没有了。

(8)如果设置inputListOfValues属性autoSubmit="true",则输入时,按下Tab键,会自动执行查询。
当输入AD_,按下Tab键,会弹出所有以 AD_开头的JobId选项,如下图:

当输入AD_V,按下Tab键,会直接补全为AD_VP,不会弹出查询窗口,因为只有一个值满足条件。
(9)在(8)的基础上,我们希望随着用户的输入,会自动下拉显示匹配的结果。
可以为inputListOfValues组件增加autoSuggestBehavior操作:<af:autoSuggestBehavior suggestedItems="#{bindings.JobId.suggestedItems}"/>。
经过测试,中文也支持自动匹配。


5. 重新新建一个页面,把LOV字段重新绑定Select One Choice组件
使用Input Text with LOV方式实现的LOV,页面上显示和保存的都是JobId,不太符合一般设计要求。
一个折中的办法是把LOV字段重新绑定到Select One Choice组件上。
这样下拉列表中显示的是JobTitle,实际保存的是JobId。
实现方式如下:
(1)拖放EmployeesView中的JobId到页面,选择Single Selection,选择ADF Select One Choice。
(2)Base Data Source选择EmployeesView1,选择Dynamic List,List Data Source选择JobsView1(如果没有,就创建一个)。
(3)返回值选择JobId,显示值选择JobTitle。

当然,这只是一个折中的办法,如何使用Input Text with LOV实现显示名称而保存ID,请见下一篇文章。

Project 下载:ADF_LOV_InputText.7z

参考文献:
1. http://docs.oracle.com/cd/E16162_01/web.1112/e16181/af_lov.htm
2. http://blogs.oracle.com/adf/entry/getting_selected_value_from_selectonechoice
3. http://husaindalal.blogspot.com/2010/03/lov-displaying-name-and-storing-value.html
4. https://blogs.oracle.com/adf/entry/combo_lov_how_to_display
5. http://cn.geekool.net/2011/11/14/how-to-restrict-the-list-of-values-retrieved-by-a-model-driven-lov/

没有评论: