针对页面<af:table>组件数据的延迟加载,除设置table的contentDelivery="lazy"属性,还可以在数据层面控制。
同样,在实际应用中,table对应的数据默认不带任何条件查询的SQL执行比较慢,而且结果集很大,尤其时需要排序的情况下,对大结果集数据的SQL执行效率更差,导致页面加载时间很长。即使设置contentDelivery="lazy"属性,也没有太大帮助,因为这还是需要加载数据。同时大结果集对用户来说没有什么实际意义。用户总不可能对上万甚至几十万条记录去逐一找自己想要的数据行吧。这情况下,适合一开始就不显示任何数据行,当用户输入过滤条件,点击查询时才开始查询数据。因为有过滤条件,可能返回的结果集就很少,而且SQL还可能走索引,因此SQL的执行效率会相当高很多。那么ADF的table,使用VO绑定时可以通过下面方式实现这效果。
实现的方法也很简单,就是在展示包含table的页面前是先执行table对应的VO的executeEmptyRowSet()方法。
实现具体步骤:
1、在table对应的VO里生成一个VO的具体实现类,在类里添加一个noResultSearch()方法,在里面添加一句:
this.executeEmptyRowSet();
如下图:
2、为在页面显示之前执行这个方法,简单的做法就是使用一个有界的taskflow,先把这个方法拖拽到taskflow上进行调用,如下图:
3、新建好显示table的页面,效果运行如下: