使用Java代码控制ADF table列进行QBE方式的过滤


在ADF中,使用af: table的时候,可以非常简单地设置Table是否使用QBE filter fields;如下图,只要选中Filtering就可以。


jspx中自动产生如下代码:

[html]
  1. filterModel="#{bindings.DeptView1Query.queryDescriptor}"  

运行应用后,所有记录显示如下:


类似Oracle form中的操作,在列中输入值,点击回车过滤数据:



如果希望在managed bean中使用程序控制QBE的逻辑,可以参考Steve Muench的Sample:http://blogs.oracle.com/smuenchadf/resource/examples#146

运行后的效果如下图,过滤部门编号:


点击[Set Dname,Loc Search fields & Reexecute Query],重置filter fields,并执行查询:



被ADF封装后的框架,FilterableQueryDescriptor对应table.getFilterModel(),也就是jspx页面中af: table绑定的filterMoel属性;为了使用Java代码控制filter的逻辑,需要使用FilterableQueryDescriptor的getFilterCriteria()方法;getTableFilterCriteria().clear()可以清空所有的绑定参数,getTableFilterCriteria().put("Dname","%N%")给Dname设置绑定值。

部分Java代码片段:

[java]
  1. public String onProgrammaticallySetFilterCriteriaAndReexecuteQuery() {  
  2.     getTableFilterCriteria().clear();  
  3.     getTableFilterCriteria().put("Dname","%N%");  
  4.     getTableFilterCriteria().put("Loc","%O%");  
  5.     queueTableQueryEvent();  
  6.     return null;  
  7. }  
当然,也可以使用Java代码调用EL表达式关联的method,下面的代码执行Query table操作:

[java]
  1. EL.invokeMethod("#{bindings.DeptView1Query.processQuery}",QueryEvent.class,queryEvent);  

使用QBE filter field的方式进行数据过滤十分简单方便,页面不需要设置查询区域,布局也容易控制;不过,国内的客户似乎更习惯在查询区域输入条件进行数据过滤,让客户接受我们的设计方案似乎更加有挑战。


卢玉双 2012/01/11 @上海

相关内容