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

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

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


jspx中自动产生如下代码:

[html]

filterModel="#{bindings.DeptView1Query.queryDescriptor}"  

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

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


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



如果希望在managed bean中使用程序控制QBE的逻辑,可以参考Steve Muench的Sample:#146

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

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


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

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



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

部分Java代码片段:

[java]

public String onProgrammaticallySetFilterCriteriaAndReexecuteQuery() {       getTableFilterCriteria().clear();       getTableFilterCriteria().put("Dname","%N%");       getTableFilterCriteria().put("Loc","%O%");       queueTableQueryEvent();       return null;   }  

当然,也可以使用Java代码调用EL表达式关联的method,下面的代码执行Query table操作:

[java]

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

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


卢玉双 2012/01/11 @上海

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyjwjy.html