在ADF中,使用af: table的时候,可以非常简单地设置Table是否使用QBE filter fields;如下图,只要选中Filtering就可以。
jspx中自动产生如下代码:
[html]
filterModel="#{bindings.DeptView1Query.queryDescriptor}"运行应用后,所有记录显示如下:
类似Oracle form中的操作,在列中输入值,点击回车过滤数据:
运行后的效果如下图,过滤部门编号:
点击[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]
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 @上海