ブロックレベルの要素であるコンテナがあります。これは、すべての子Wicket要素(ボタン)が非表示になっているときに非表示にする必要があります。つまり、子ボタンが表示されている場合は、コンテナが表示されている必要があります。
以前のボタンの1つは、ボタンがある場合は常に表示されていたので、そのボタンを使用しての表示を制御し、<wicket:enclosure>
これらすべてを純粋にHTML側で処理しました。
現在、仕様が変更され、ボタンを個別に非表示/表示できるようになっているため、単純なエンクロージャーは機能しなくなりました(私は思います)。
私はそれを次のようなもので動作させました:
HTML:
<wicket:container wicket:id="downloadButtons">
<wicket:message key="download.foo.bar"/>:
<input type="button" wicket:id="excelDownloadButton" wicket:message="value:download.excel"/>
<input type="button" wicket:id="textDownloadButton" wicket:message="value:download.text"/>
<!-- etc ... -->
</wicket:container>
Java:
WebMarkupContainer container = new WebMarkupContainer("downloadButtons");
// ... add buttons to container ...
boolean showContainer = false;
Iterator<? extends Component> it = container.iterator();
while (it.hasNext()) {
if (it.next().isVisible()) {
showContainer = true;
break;
}
}
addOrReplace(container.setVisible(showContainer));
しかし、Java側は今や冗長で醜いものになっており、同じことを行うためのよりクリーンな方法があるのではないかと思っていました。ある?子コンポーネントが表示されていないときに、どういうわけか「自動的に」コンテナを(すべての追加のマークアップとともに)非表示にできますか?
(重要な場合は、Wicket 1.4です。)