如果包含的所有Wicket组件都不可见,则隐藏HTML元素

如果包含的所有Wicket组件都不可见,则隐藏HTML元素,wicket,Wicket,我有一个HTML元素,如果它所包含的Wicket组件foo不可见,它就会被隐藏 <span class="ig" wicket:enclosure="foo"> <span class="iga"> <span wicket:id="foo"/> </span> </span> 但是怎么做呢?一个复杂的问题是,组件的可见性可能会因AJAX事

我有一个HTML元素,如果它所包含的Wicket组件
foo
不可见,它就会被隐藏

<span class="ig" wicket:enclosure="foo">
  <span class="iga">
    <span wicket:id="foo"/>
  </span>
</span>

但是怎么做呢?一个复杂的问题是,组件的可见性可能会因AJAX事件而改变。

将逻辑移到Java代码中

Component foo = ...
Component bar = ...
WebMarkupContainer wrapper = new WebMarkupContainer("wrapper") {
  @Override public void onConfigure() {
    super.onConfigure();
    foo.configure();
    bar.configure();
    setVisible(foo.isVisible() && bar.isVisible());
  }
};
wrapper.add(foo);
wrapper.add(bar);
add(wrapper);


<span class="ig" wicket:id="wrapper">
  <span class="iga">
    <span wicket:id="foo"/>
    <span wicket:id="bar"/>
  </span>
</span>
组件foo=。。。
组件栏=。。。
WebMarkupContainer包装器=新的WebMarkupContainer(“包装器”){
@覆盖配置()上的公共void{
super.onConfigure();
configure();
bar.configure();
setVisible(foo.isVisible()&bar.isVisible());
}
};
添加(foo);
添加(条);
添加(包装);

另外,我建议您在几乎所有情况下都避免使用
wicket:enclosure
!有很多拐弯处的箱子会断裂。您可以查看Wicket JIRA的示例。

谢谢,但是由于您的代码的某些原因,即使两个组件都不可见,跨度现在也始终可见。我查看了代码。组件的可见性在其onInitialize()中设置,更确切地说是在onInitialize中添加的AjaxLink的onConfigure中设置。这可能是在包装器的onConfigure()之后调用的吗?组件的可见性在onEvent()中也会发生变化。所以这并不容易。有什么东西像一个可视的听众吗?对!在设置包装器的可见性之前,需要配置foo和bar。我已经更新了答案。
Component foo = ...
Component bar = ...
WebMarkupContainer wrapper = new WebMarkupContainer("wrapper") {
  @Override public void onConfigure() {
    super.onConfigure();
    foo.configure();
    bar.configure();
    setVisible(foo.isVisible() && bar.isVisible());
  }
};
wrapper.add(foo);
wrapper.add(bar);
add(wrapper);


<span class="ig" wicket:id="wrapper">
  <span class="iga">
    <span wicket:id="foo"/>
    <span wicket:id="bar"/>
  </span>
</span>