ADF 查询面板 关联LOV



ADF查询面板提供了快速创建查询的功能,本文主题为在ADF查询面板中使用关联LOV,即B LOV的结果依赖于A LOV的选择值,A LOV选择值变动时自动清空B LOV中的值。

示例使用Oracle HR数据库中的Employees, Locations, Departments三张数据表,Departments外键关联至Locations数据表,Employees数据表外键关联于Locations数据表。

使用2009年11月11日发布的Oracle JDeveloper 11.1.1.2.0作为开发环境,经实践其前一版本11.1.1.1.0在查询面板选择时清空LOV存在BUG。

首先从数据库反向创建相关EO、VO
修改DepartmentsView,在Query标签页为其创建Bind Variable,名称为locationId,类型为String。注意将其属性中的Display Hints设为Hide

并修改相应SQL语句,添加where条件如下
WHERE Departments.LOCATION_ID=nvl(:locationId, Departments.LOCATION_ID)

修改EmployeesView,在Query标签页修改SQL语句如下
SELECT Employees.EMPLOYEE_ID,
Employees.FIRST_NAME,
Employees.LAST_NAME,
Employees.EMAIL,
Employees.PHONE_NUMBER,
Employees.HIRE_DATE,
Employees.JOB_ID,
Employees.SALARY,
Employees.COMMISSION_PCT,
Employees.MANAGER_ID,
Employees.DEPARTMENT_ID,
Locations.LOCATION_ID
FROM EMPLOYEES Employees,
DEPARTMENTS Departments,
LOCATIONS Locations
WHERE Employees.DEPARTMENT_ID = Departments.DEPARTMENT_ID
AND Departments.LOCATION_ID = Locations.LOCATION_ID

在ViewAccessors页面添加ViewAccessor,分别指向DepartmentsView及LocationsView。

修改DepartmentsView1,将其绑定变量的Value设定为LocationId(这里的LocationId即为上一步修改SQL后EmployeesView中新添加的Attribute名称)。

在Attributes标签页为DepartmentId及LocationId分别添加LOV。

DepartmentId添加LOV,设定DataSource为上一步创建的ViewAccessor
DepartmentsView1,Attribute为DepartmentId,并添加返回值为DepartmentId,修改UI
Hints标签页中的Default List Type为Input Text With List of Values


同样为LocationId添加LOV,设定DataSource为上一步创建的ViewAccessor LocationsView1,Attribute为LocationId,并添加返回值为LocationId,修改UI
Hints标签页中的Default List Type为Input Text With List of Values。

在Attribute标签页为DepartmentId设置属性,在其Dependencise中选择LocationId


最后,创建页面,将Data Controls中EmployeesView的All Queriable Attributes拖入界面,选择Query -> ADF Query Panel with Table。执行测试。