Tree组件使用指南之九:使用ViewCriteria过滤Tree子节点
来源:互联网 发布:burpsuite下载ubuntu 编辑:程序博客网 时间:2024/06/08 14:38
运行环境:JDeveloper 11.1.2.2.0 + Oracle Database 10g Express Edition 10.2.0.1。
ADF Tree组件可以帮助我们轻松创建“一棵树”,但有时我们需要在子节点上设置一些过滤条件。
比如,显示Department/Employee树,希望能够按照Salary范围显示Employee。
重要步骤说明:
1. 创建Model Project,选择Departments和Employees表
2. 在EmployeesView上增加一个ViewCriteria:EmployeesViewCriteria。
根据参数bv_lowSalary和bv_highSalary获取Employees。
3. 在Application Module中,修改DepartmentView1下的EmployeeView3,选中EmployeesViewCriteria。
为了马上能看到效果,我这里直接给参数bv_lowSalary和bv_highSalary赋值。
4. 创建页面,并运行。
创建页面中的Tree的步骤和《点击树节点刷新表单》相同,这里不再赘述。
运行效果如下:
发现并没有按照Salary范围显示Employees,这是为什么呢?
原来,ADF Tree组件访问字节点的方法是通过Accessor,而不是通过VO,因此在VO上设置的ViewCriteria也不会起作用,那么该如何解决呢?
为了更清楚的说明问题,我首先把在Application Module中的DepartmentView1下的EmployeeView3的EmployeesViewCriteria设置为不选中状态,并去掉参数值。
5. 为DepartmentsView生成Java实现类,并Override方法createViewLinkAccessorRS。
DepartmentsView就是通过这个方法来访问其子节点的,因此我在这里通过代码让其“找到并使用”EmployeesViewCriteria,并为参数赋值。
这里直接给参数赋了常量值,实际中你可以从其它地方获取参数值,后面我将给出了另外一个实现方法。
6. 重新运行页面,发现ViewCriteria过滤起作用了。
7. 在页面上暴露ViewCriteria参数,由用户输入。
上面实现的方法是给给参数赋了常量值,如果你希望由用户输入参数值,可以考虑在DepartmentsViewImpl.java中写一个公有方法,并通过Data Control暴露出来。
(1)公有方法filterEmployeesBySalary
(2)为DepartmentsView生成Client Interface,并选中方法filterEmployeesBySalary。
刷新Data Control,会发现DepartmentView1下面出现了一个方法:filterEmployeesBySalary。
(3)创建一个新页面,拖放filterEmployeesBySalary生成Form,拖放DepartmentView1生成Tree。
运行效果如下:
注意,使用此方法要注释掉原来重写的方法:createViewLinkAccessorRS。
实际使用时,根据情况可以选择不同的解决方法,如果不需要用户输入,选择方法一;如果需要用户输入,选择方法二。
Project 下载:ADF_Filter_Tree.7z
参考文献:
1. http://jobinesh.blogspot.jp/2010/01/search-by-child-attributes-on-tree.html
ADF Tree组件可以帮助我们轻松创建“一棵树”,但有时我们需要在子节点上设置一些过滤条件。
比如,显示Department/Employee树,希望能够按照Salary范围显示Employee。
重要步骤说明:
1. 创建Model Project,选择Departments和Employees表
2. 在EmployeesView上增加一个ViewCriteria:EmployeesViewCriteria。
根据参数bv_lowSalary和bv_highSalary获取Employees。
3. 在Application Module中,修改DepartmentView1下的EmployeeView3,选中EmployeesViewCriteria。
为了马上能看到效果,我这里直接给参数bv_lowSalary和bv_highSalary赋值。
4. 创建页面,并运行。
创建页面中的Tree的步骤和《点击树节点刷新表单》相同,这里不再赘述。
运行效果如下:
发现并没有按照Salary范围显示Employees,这是为什么呢?
原来,ADF Tree组件访问字节点的方法是通过Accessor,而不是通过VO,因此在VO上设置的ViewCriteria也不会起作用,那么该如何解决呢?
为了更清楚的说明问题,我首先把在Application Module中的DepartmentView1下的EmployeeView3的EmployeesViewCriteria设置为不选中状态,并去掉参数值。
5. 为DepartmentsView生成Java实现类,并Override方法createViewLinkAccessorRS。
protected ViewRowSetImpl createViewLinkAccessorRS(AssociationDefImpl associationDefImpl, ViewObjectImpl viewObjectImpl, Row row, Object[] object) { ViewRowSetImpl viewRowSetImpl = super.createViewLinkAccessorRS(associationDefImpl, viewObjectImpl, row, object); ViewObject vo = viewObjectImpl.getViewObject(); ViewCriteriaManager vcm = viewObjectImpl.getViewCriteriaManager(); ViewCriteria vc = vcm.getViewCriteria("EmployeesViewCriteria"); VariableValueManager vvm = vc.ensureVariableManager(); vvm.setVariableValue("bv_lowSalary", 10000); vvm.setVariableValue("bv_highSalary", 20000); viewObjectImpl.applyViewCriteria(vc); return viewRowSetImpl; }
DepartmentsView就是通过这个方法来访问其子节点的,因此我在这里通过代码让其“找到并使用”EmployeesViewCriteria,并为参数赋值。
这里直接给参数赋了常量值,实际中你可以从其它地方获取参数值,后面我将给出了另外一个实现方法。
6. 重新运行页面,发现ViewCriteria过滤起作用了。
7. 在页面上暴露ViewCriteria参数,由用户输入。
上面实现的方法是给给参数赋了常量值,如果你希望由用户输入参数值,可以考虑在DepartmentsViewImpl.java中写一个公有方法,并通过Data Control暴露出来。
(1)公有方法filterEmployeesBySalary
public void filterEmployeesBySalary(Number lowSalary, Number highSalary) { Row row = getCurrentRow(); if (row != null) { RowSet rs = (RowSet)row.getAttribute("EmployeesView"); if (rs != null) { ViewObject employeesVO = rs.getViewObject(); employeesVO.ensureVariableManager(); employeesVO.getVariableManager().setVariableValue("bv_lowSalary", lowSalary); employeesVO.getVariableManager().setVariableValue("bv_highSalary", highSalary); ViewCriteriaManager vcm = employeesVO.getViewCriteriaManager(); ViewCriteria vc = vcm.getViewCriteria("EmployeesViewCriteria"); employeesVO.applyViewCriteria(vc); } executeQuery(); } }
(2)为DepartmentsView生成Client Interface,并选中方法filterEmployeesBySalary。
刷新Data Control,会发现DepartmentView1下面出现了一个方法:filterEmployeesBySalary。
(3)创建一个新页面,拖放filterEmployeesBySalary生成Form,拖放DepartmentView1生成Tree。
运行效果如下:
注意,使用此方法要注释掉原来重写的方法:createViewLinkAccessorRS。
实际使用时,根据情况可以选择不同的解决方法,如果不需要用户输入,选择方法一;如果需要用户输入,选择方法二。
Project 下载:ADF_Filter_Tree.7z
参考文献:
1. http://jobinesh.blogspot.jp/2010/01/search-by-child-attributes-on-tree.html
2. http://www.oracle.com/technetwork/developer-tools/adf/learnmore/feb2011-otn-harvest-328207.pdf
http://maping930883.blogspot.com/2012/06/adf139treeviewcriteriatree.html
0 0
- Tree组件使用指南之九:使用ViewCriteria过滤Tree子节点
- Tree组件使用指南之五:点击树节点文字展开或收缩其子节点
- Tree组件使用指南之十:获取选中的Tree节点
- Tree组件使用指南之二:点击树节点刷新表单
- Tree组件使用指南之三:定制SelectionListener
- Tree组件使用指南之四:点击不同的树节点显示不同的表单
- Tree组件使用指南之六:不同的树节点显示不同的图标
- Tree组件使用指南之七:让树节点支持mouseOver事件
- Tree组件使用指南之八:使用Self-Referencing VO创建Tree
- Tree组件使用指南之一:创建
- 使用extjs的Tree组件时,节点ID设置问题
- Extjs4中tree组件子节点和父节点的级联操作
- Extjs4中tree组件查找所有父节点和查找所有子节点的递归方法
- 使用easyui的Tree 实现无限子节点绑定
- (转)EasyUI组件tree只展开根节点下的一级子节点或二级子节点
- flex基础之tree组件的使用
- JSF Tree 组件之 rich:tree
- tree组件点击标签展开、关闭节点
- Tree组件使用指南之八:使用Self-Referencing VO创建Tree
- 1408202033-hd-最小公倍数.cpp
- 对暑期行程的一个简单总结
- Libgdx的使用(14)——基于RoboVM对IOS平台的支持
- 汇编语言10——标志寄存器
- Tree组件使用指南之九:使用ViewCriteria过滤Tree子节点
- PPTP VPN 链接错误: GRE: Bad checksum from pppd
- 树的重心
- Tree组件使用指南之十:获取选中的Tree节点
- 九度OJ 题目1082:代理服务器
- 软件运行过程中日志文件的书写
- (18)HTML杂记
- Table 组件使用指南之十一:列字段过滤功能
- Table 组件使用指南之十二:定制列字段过滤组件