装载自:http://oracleseeker.com/2013/09/26/adf_query_reset_button_clear_table_result/#more-3823
需求概述
在Oracle ADF开发中,上下布局的查询面板和查询结果页面是最为典型的模式之一(即形如下图的af:query和af:table布局页面)。af:query组件默认提供了搜索、重置、保存查询等常用操作,简化了开发难度,但重置功能只能实现对于查询条件的重置/清除,却无法在重置查询条件的同时将结果Table清空,如需实现该需求,则需使用客户化af:query组件的QueryOperationListener实现,在执行原重置查询条件逻辑之后,增加对于查询结果的清空,本文将对该方法进行详细描述。
应用准备
1、应用项目准备,基于HR Schema中的Jobs表创建EO/VO,生成AM,并在AM的实现类中编写如下代码,实现对于JobsVO的空查询,完成后发布该方法为Client Interface:
/**
* 执行空查询,刷新当前JobsVO的结果集
*/
public void executeJobsVoEmptyQuery() {
this.getJobs1().executeEmptyRowSet();
}
2、在JobsVO中创建子查询,作为页面布局时的查询面板查询条件:
3、创建并如图布局main.jspx页面:
实现步骤
1、将AM中暴露的JobsVO空查询方法作为MethodAction添加到main.jspx页面的PageDef中:
2、在main.jspx页面中选择af:query组件,在属性面板中找到QueryOperationListener属性,其默认值为:#{bindings.ByJobIdAndTitleVCQuery.processQueryOperation},编辑该属性,根据向导生成backingbean及对应的Listener方法:
3、打开2步骤中创建的backingbean,修改该Listener对应的方法:
public void jobsQueryOperationListener(QueryOperationEvent queryOperationEvent) {
logger.info("queryOperationEvent.getOperation().name(): " +queryOperationEvent.getOperation().name());
//1.执行原逻辑,清空af:query组件中的查询条件
JSFUtils.resolveMethodExpression("#{bindings.ByJobIdAndTitleVCQuery.processQueryOperation}",
Object.class,new Class[] { QueryOperationEvent.class },new Object[] { queryOperationEvent });
//2.判断是否为重置动作,如是,则继续后续步骤
if ("RESET".equals(queryOperationEvent.getOperation().name())) {
//3.调用AM中的方法,为VO执行空查询,清空VO实例的值
OperationBinding methodBinding =
ADFUtils.findOperation("executeJobsVoEmptyQuery");
methodBinding.execute();
}
}
4、设置af:table的PartialTrigger为af:query:
5、运行该应用,查看效果
查看JobId开头为A的Jobs信息:
点击查询面板中的重置,实现对于查询条件和查询结果的更新: