升级到7.1后为filter设置dataloader出问题

我在界面的XML里面放了一个filter,但是没有设置dataLoader,是在controller的代码里动态产生的一个dataloader然后设置给了filter,是在onBeforeShow事件里面。之前在7.1beta及前的版本都是OK的,升级到7.1后,打开界面就报错了。原因是:
FilterDelegateImpl类的方法
public void applyDataLoadingSettings(Element element) {
if (adapter.applyMaxResultsSettingsBeforeLoad()) {
applyMaxResultsSettings(element);
}
}
被调用,而adapter这个时候是null,看了下代码,发现是设置dataloader时候这个adapter才被初始化,而这个方法又在onBeforeShow事件之前就被系统调用了,导致adapter没有初始化,就空指针异常了。请问我该如何改代码?我的dataLoader只能在代码里动态产生,而Filter我希望写在XML里。谢谢!

试试将 dataloader 的设置移到 onInit(InitEvent event) 中,此时 XML 解析已经完成,但是 filter 的功能还没有初始化。看能否解决这个问题

因为我需要通过当前的entity来设置dataloader的参数,而在onInit方法里,this.getEditedEntity()返回的是null,没法把逻辑写在此处,之前beta版本代码都是没问题的,现在怎么办?

能贴一下相关的代码吗?

11

xml 中该 filter 如何定义的呢?

11

还有救吗???:joy:

看看下面这个方案是否合适?在 onInit 里先给他一个空的 dataloader,保证初始化不会出错,然后在 onAfterShow 里面取到 dataloader,设置数据。

    @Subscribe
    private void onInit(InitEvent event) {
        CollectionLoader<Customer> collectionLoader = dataComponents.createCollectionLoader();
        collectionLoader.setContainer(customersDc);
        tableFilter.setDataLoader(collectionLoader);
    }

    @Subscribe
    private void onAfterShow(AfterShowEvent event) {
//        tableFilter.getDataLoader();
    }

这个方法可以,虽然麻烦点还是可以用了!