题
我有一个AjaxPagingNavigator。基本上,在一定条件下,它的AjaxPagingNavigator页面重新加载列表。当发生这种情况我只想渲染导航器时,列表中包含超过100页。
因此,没有人知道我在哪里可以附加一个处理程序,以便我可以检查我的AjaxPagingNavigator能见度条件,这样,当导航仪通过更新启用/禁用的知名度。 AJAX是可见或不可见?
标记:
<div wicket:id="mainWrap">
<div wicket:id="navigator"/>
<div wicket:id="listWrap">
<div wicket:id="list><!-- here be content --></div>
</div>
</div>
所以我有刷新“mainWrap”,它刷新“导航器”与“列表”和包装纸沿着。一个Ajax事件
这是触发整个事情该事件。
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
List foo = null; // do work to get list
model.setFound(found); // update the model (thus updating "list")
target.addComponent(mainWrap);
}
编辑:我知道我可以写
navigator.setVisibility(list.getPageCount() > 1);
创建导航和后更新所述模型,但我希望来封装在AjaxPagingNavigator的一个子类之后。
解决方案
注意在被覆盖的isVisible
方法做昂贵的计算,作为检票会多次调用isVisible
每个请求,不算,你可能会不小心做任何来电。
典型地去对此最好的方法是重写onConfigure
和手动设置的可见性标志
@Override
void onConfigure() {
super.onConfigure();
setVisible(isVisible() && someExpensiveToCalculateCondition);
}
onConfigure
被请求处理期间调用只需一次,并要求所有组件,包括那些不可见的(而onBeforeRender
仅要求有形成分)。
其他提示
它已经有一段时间,因为我触摸检票,但如果没有记错:
您不能覆盖你的“导航”对象的可见性()方法,这样它只有你的愿望的情况下显示?
e.g。类似
.addComponent(new AjaxPagingNavigator(...) {
@Override public boolean isVisible() {
return model.getFound().size() > 25;
}
});
不隶属于 StackOverflow