ADF(UI)--<af:table>数据的延迟加载(三)

在本人的 ADF(UI)--<af:table>数据的延迟加载(二)中描述使用Vo的executeEmptyRowSet()可以使首次进入页面时不执行SQL,返回结果集,可以加快页面响应速度,而在ADF(BC)--当使用绑定VO的<af:table>时可能会导致的内存问题则谈到在使用<af:table>为避免内存问题,需要在大结果集的VO使用分页模式,即设置VO的AccessModel 为Range Paging或Range Paging incremental,但有一个问题是,当我们设置VO的分页访问模式时,也需要想在第一次进入页面不执行查询而使用VO的executeEmptyRowSet()时,则会存在冲突,VO还是会一开始执行查询。(这可能是ADF的bug或者设计者出于其他原因的考虑)。

   为实现上述目标,可以通过动态改变VO的AccessModel实现,注意AccessModel可以在运行时有默认的Scrollable模式改为Range Paging或Range Paging incremental,但反之则不行。但这没关系,我们并不想从分页的模式改成非分页模式。实现方法是:1、不改变VO的默认访问模式,即在VO定义文件保留默认设置AccessModel=Scrollable,2、根据 ADF(UI)--<af:table>数据的延迟加载(二)例子实现,3、为动态改变VO的AccessModel,可生产VO的实现类,重新executeQuery()方法,如下图:


   运行起来,符合想要的效果,一切OK。当初我也这样想,但后面发现一旦VO发生钝化和激活时,在激活过程中会报“索引中丢失 IN 或 OUT 参数::1”,如下图:

  经调试发现,动态设置的AccessModel在钝化时会丢失,而激活后VO的访问模式会恢复默认。知道原因则好不,实现思路是重新VO的激活状态方法,在这里重新设置AccessModel为分页模式。如下图:

 现在终于可以松一口气了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值