我有一个AjaxPagingNavigator。基本上在某种情况下,重新加载AjaxPagingNavigator页面的列表。发生这种情况时,我只想在列表包含多个页面时呈现导航器。
所以有人知道我可以在哪里附加处理程序,以便我可以在我的AjaxPagingNavigator中检查可见性条件并启用/禁用可见性,以便在导航器通过时更新。 ajax是否可见?
标记:
<div wicket:id="mainWrap">
<div wicket:id="navigator"/>
<div wicket:id="listWrap">
<div wicket:id="list><!-- here be content --></div>
</div>
</div>
所以我有一个ajax事件刷新“mainWrap”,刷新“navigator”以及“list”和包装。
这是触发整个事件的事件。
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的子类中。
答案 0 :(得分:16)
在覆盖的isVisible
方法中进行昂贵的计算要小心,因为Wicket会在每次请求时多次调用isVisible
- 不计算您可能无意中执行的任何调用。
通常,最好的方法是覆盖onConfigure
并手动设置可见性标记。
@Override
void onConfigure() {
super.onConfigure();
setVisible(isVisible() && someExpensiveToCalculateCondition);
}
onConfigure
在请求处理期间只调用一次,并调用所有组件,包括那些不可见的组件(而onBeforeRender
仅调用可见组件)。
答案 1 :(得分:1)
自从我触及Wicket以来已经有一段时间了,但是如果记忆有效:
你能否覆盖“导航器”对象的isVisible()方法,以便它只在你想要的条件下显示?
e.g。
之类的东西.addComponent(new AjaxPagingNavigator(...) {
@Override public boolean isVisible() {
return model.getFound().size() > 25;
}
});