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

Java (Wicket)在ajax响应期间更改可见性,java,wicket,Java,Wicket,我有一个AjaxPagingNavigator。基本上,在特定条件下,AjaxPagingNavigator页面的列表会被重新加载。当这种情况发生时,我只想在列表包含超过1页时呈现导航器 那么,是否有人知道我可以在何处附加处理程序,以便我可以在AjaxPagingNavigator中检查可见性条件,并启用/禁用可见性,以便在通过更新导航器时。它是可见的还是不可见的 标记: <div wicket:id="mainWrap"> <div wicket:id="naviga

我有一个AjaxPagingNavigator。基本上,在特定条件下,AjaxPagingNavigator页面的列表会被重新加载。当这种情况发生时,我只想在列表包含超过1页时呈现导航器

那么,是否有人知道我可以在何处附加处理程序,以便我可以在AjaxPagingNavigator中检查可见性条件,并启用/禁用可见性,以便在通过更新导航器时。它是可见的还是不可见的

标记:

<div wicket:id="mainWrap">
    <div wicket:id="navigator"/>
    <div wicket:id="listWrap">
        <div wicket:id="list><!-- here be content --></div>
    </div>
</div>

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

我已经有一段时间没有接触Wicket了,但是如果内存可用:

您能否覆盖“navigator”对象的isVisible()方法,使其仅在您希望的条件下显示

e、 差不多

.addComponent(new AjaxPagingNavigator(...) {
  @Override public boolean isVisible() { 
    return model.getFound().size() > 25;
  }
});

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

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

@Override
void onConfigure() {
    super.onConfigure();
    setVisible(isVisible() && someExpensiveToCalculateCondition);
}

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

Ha!我觉得自己很愚蠢。在这里,我通过各种疯狂的行为来附加和设置可见性。哎呀!顺便说一句,“return super.isVisible()&&this.getPageable().getPageCount()>1;”可能更好,因为我们希望确保如果其他人将我们设置为不可见,我们尊重它。不要觉得愚蠢。。。当我开发Wicket应用程序时,我通常会花很多时间寻找各种问题的解决方案,当我发现它们时,它们几乎总是比我预期的简单得多。我支持这一点。我认为Wicket开发人员做得很好,因为通常当我研究一个问题时,我意识到解决/修复它是多么容易,而且比我想象的更直观。应该总是在onConfigure()中设置可见,原因在答案中列出。确实如此。正如@Sarhanis所提到的,Wicket gurus可以覆盖
isVisible
。相反,覆盖
onConfigure
并从那里控制可见性。我非常喜欢这个答案。感谢你在未来再次提出这个问题:)+1-这是一个救命恩人(应该得到两张选票:)。但为什么要在“onConfigure”上调用“isVisible”?以Dmitry为例,如果第一个ajax返回“false”表示“someExpensiveToCalculateCondition”,第二个返回“true”,我相信“isVisible”将使整个表达式变假。人们通常调用isVisible()来考虑onConfigure链上某个位置的可见性更改。
.addComponent(new AjaxPagingNavigator(...) {
  @Override public boolean isVisible() { 
    return model.getFound().size() > 25;
  }
});
@Override
void onConfigure() {
    super.onConfigure();
    setVisible(isVisible() && someExpensiveToCalculateCondition);
}