我有一个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>

因此,我有一个刷新“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方法中进行昂贵的计算时要小心,因为Wicket会在每个请求中多次调用isVisible-不计算您可能无意中进行的任何调用。

通常,解决此问题的最佳方法是覆盖onConfigure并手动设置可见性标志。

@Override
void onConfigure() {
    super.onConfigure();
    setVisible(isVisible() && someExpensiveToCalculateCondition);
}
onConfigure在请求处理期间仅被调用一次,并且对所有组件(包括不可见组件)进行调用(而onBeforeRender仅对可见组件进行调用)。

关于java - (选票)在ajax响应期间更改可见性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2209895/

10-12 00:13
查看更多