我有一个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;
  }
});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top