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