(Wicket)在ajax响应期间更改可见性

Dmi*_*ten 8 java wicket

我有一个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>
Run Code Online (Sandbox Code Playgroud)

所以我有一个ajax事件刷新"mainWrap",刷新"导航器"以及"列表"和包装.

这是触发整个事件的事件.

 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);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我知道我可以写

navigator.setVisibility(list.getPageCount() > 1);
Run Code Online (Sandbox Code Playgroud)

在创建导航器之后和更新模型之后,我希望将其封装在AjaxPagingNavigator的子类中.

Mar*_*rst 16

在重写isVisible方法中进行昂贵的计算要小心,因为Wicket会在isVisible每个请求中多次调用- 不计算您可能无意中执行的任何调用.

通常,最好的方法是onConfigure手动覆盖和设置可见性标志.

@Override
void onConfigure() {
    super.onConfigure();
    setVisible(isVisible() && someExpensiveToCalculateCondition);
}
Run Code Online (Sandbox Code Playgroud)

onConfigure在请求处理期间只调用一次,并调用所有组件,包括那些不onBeforeRender可见的组件(同时仅调用可见组件).