我在界面的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版本代码都是没问题的,现在怎么办?
能贴一下相关的代码吗?
xml 中该 filter 如何定义的呢?
还有救吗???
看看下面这个方案是否合适?在 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();
}
这个方法可以,虽然麻烦点还是可以用了!