开发环境:JDeveloper 11.1.2.1.0。
完成《 Examining ADF Business Components New Features 》之 Cascading List of Values 。
在实际应用中,经常会使用两个级联式下拉列表的情况,比如先选择国家列表,再根据选择的国家显示城市列表。
也就是说城市下拉列表“依赖于”国家下拉列表。
你可以把View Object 某个Attribute定义成LOVs。这样,由于是定义在模型层上,UI界面无需做任何改动。
1. 定义 List of Values
一般来说,某个Attribute的取值范围是某个LOVs,一般来自某个View Object。
如果没有合适的View Object,就需要新定义一个View Object,专门获取这个LOVs。
这里我们专门为Mgr (manager) attribute创建一个VO作为LOV使用,
能够当某个employee的Manager候选范围是和该employee同一个部门的其它employee,或者是其他部门的没有Manager的employee。
Where条件语句如下:(DEPARTMENT_ID = :CurrentDept OR MANAGER_ID IS NULL) AND EMPLOYEE_ID ! = :CurrentEmp
创建View Object时,根据需要选择是否可以修改Entity Object。
2. 配置 List of Values
打开要设置的View Object的Attributes面板,选择Attribute,如DepartmentId。然后在“List of Values:DepartmentId”点击“+”,增加LOVs,名称为LOV_<Attribute_Name>。
注意,List Return Values 表明返回值可以是多个Attributes。比如,产品改变时,产品ID和产品单价都要改变。
而在UI界面上的样子则由UI Hints来决定。
两个级联式下拉列表之所以能够关联上,关键的原因是这里:ManagerListForDepartment1的两个参数CurrentDept和CurrentEmp 分别指向了EmpView中的DepartmentId和EmployeeId。
以此类推,你可以推广到多个级联式下拉列表。
注意返回值ManagerId指向EmployeeId。
在最终的界面上,会知道哪些Attributes是下拉列表,从而用相应的UI组件展示。
思考问题1:完成实验后,在网页上,当部门列表变化时,经理列表并没有变化。这是为什么?如何修改?
把部门列表组件的autoSubmit=true,并把经理列表组件的PPR指向部门列表组件的ID。
思考问题2:其它用户持有锁的问题。
当把Web界面和应用模型界面都打开时,操作应用模型界面的用户改变部门列表时会报如下错误:
右键点击application module,选择 Configurations,选择 Edit,选择Properties tab,选择Property:jbo.locking.mode,把pessimistic 改成optimistic。
重现该问题的另一个办法:在某个页面添加记录,添加未完成,切换到其他页面,然后再切换到这个页面,这时候再编辑记录,会提示“其他用户持有该锁”。
思考问题3:如果忘记为ManagerListForDepartment1的两个参数赋值,如何事后修改?
这个问题经常出现在Workshop中,一些用户忘了给ManagerListForDepartment1的两个参数赋值,想事后添加,却怎么也找不到添加的地方。
我开始在AM的Data Model中找,发现EmployeeView下面并没有ManagerListForDepartment1,见下图:
困惑了好久,只好去LOV的地方找,终于发现就是点击绿色的“+”,会弹出修改界面,见下图:
感觉这里少了一个修改按钮,新增和修改功能都是点击这个绿色的“+”。
选中ManagerListForDepartment1,点击Edit,会弹出参数设置界面,见下图:
完成《 Examining ADF Business Components New Features 》之 Cascading List of Values 。
在实际应用中,经常会使用两个级联式下拉列表的情况,比如先选择国家列表,再根据选择的国家显示城市列表。
也就是说城市下拉列表“依赖于”国家下拉列表。
你可以把View Object 某个Attribute定义成LOVs。这样,由于是定义在模型层上,UI界面无需做任何改动。
1. 定义 List of Values
一般来说,某个Attribute的取值范围是某个LOVs,一般来自某个View Object。
如果没有合适的View Object,就需要新定义一个View Object,专门获取这个LOVs。
这里我们专门为Mgr (manager) attribute创建一个VO作为LOV使用,
能够当某个employee的Manager候选范围是和该employee同一个部门的其它employee,或者是其他部门的没有Manager的employee。
Where条件语句如下:(DEPARTMENT_ID = :CurrentDept OR MANAGER_ID IS NULL) AND EMPLOYEE_ID ! = :CurrentEmp

创建View Object时,根据需要选择是否可以修改Entity Object。
2. 配置 List of Values
打开要设置的View Object的Attributes面板,选择Attribute,如DepartmentId。然后在“List of Values:DepartmentId”点击“+”,增加LOVs,名称为LOV_<Attribute_Name>。


注意,List Return Values 表明返回值可以是多个Attributes。比如,产品改变时,产品ID和产品单价都要改变。
而在UI界面上的样子则由UI Hints来决定。

两个级联式下拉列表之所以能够关联上,关键的原因是这里:ManagerListForDepartment1的两个参数CurrentDept和CurrentEmp 分别指向了EmpView中的DepartmentId和EmployeeId。
以此类推,你可以推广到多个级联式下拉列表。
注意返回值ManagerId指向EmployeeId。

在最终的界面上,会知道哪些Attributes是下拉列表,从而用相应的UI组件展示。
思考问题1:完成实验后,在网页上,当部门列表变化时,经理列表并没有变化。这是为什么?如何修改?
把部门列表组件的autoSubmit=true,并把经理列表组件的PPR指向部门列表组件的ID。
思考问题2:其它用户持有锁的问题。
当把Web界面和应用模型界面都打开时,操作应用模型界面的用户改变部门列表时会报如下错误:
右键点击application module,选择 Configurations,选择 Edit,选择Properties tab,选择Property:jbo.locking.mode,把pessimistic 改成optimistic。
重现该问题的另一个办法:在某个页面添加记录,添加未完成,切换到其他页面,然后再切换到这个页面,这时候再编辑记录,会提示“其他用户持有该锁”。
思考问题3:如果忘记为ManagerListForDepartment1的两个参数赋值,如何事后修改?
这个问题经常出现在Workshop中,一些用户忘了给ManagerListForDepartment1的两个参数赋值,想事后添加,却怎么也找不到添加的地方。
我开始在AM的Data Model中找,发现EmployeeView下面并没有ManagerListForDepartment1,见下图:
困惑了好久,只好去LOV的地方找,终于发现就是点击绿色的“+”,会弹出修改界面,见下图:
感觉这里少了一个修改按钮,新增和修改功能都是点击这个绿色的“+”。
选中ManagerListForDepartment1,点击Edit,会弹出参数设置界面,见下图:
也就是说,LOV是定义在VO上的,所以应该在VO的定义中找,而不是在AM的定义中找。
http://maping930883.blogspot.com/2009/09/adf013adf-bc_12.html