要通过单击复选框更新任何组件可见性,可以使用“AjaxCheckBox”,例如:
//somewhere in the class create model variable:
boolean checkBoxValue = true;
//this is your hideable component
Label someComponent;
...
//and add PropertyModel for checkbox:
AjaxCheckBox checkBox = new AjaxCheckBox("checkBox", new PropertyModel(this, "checkBoxValue")) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
//if checkbox is checked, then our component is shown
someComponent.setVisible(checkBoxValue);
target.add(someComponent);
}
};
...
//this is your component to update
someComponent = new Label("someComponent", "some text");
//this method allows you to hide/show component with ajax updates.
someComponent.setOutputMarkupPlaceholderTag ( true );
要在提交后获得checkBox值,您可以检查
checkBoxValue
价值
更新
实际上,您可以重写可隐藏的组件方法
onConfigure()
要根据“checkBoxValue”设置其可见性(这只是获取可见性的另一种方式,可能更可取):
someComponent = new Label("someComponent", "some text")
{
@Override
protected void onConfigure() {
setVisible ( checkBoxValue );
}
};
如果你这样做,那么你可以删除
someComponent.setVisible(checkBoxValue);
代码来自
AjaxCheckBox#onUpdate()
方法
更新2
组成部分
WebMarkupContainer
允许您包装一些组件。当它隐藏时,它们就会从标记中删除。但容器的标记将与样式一起存在
display:hidden
无论如何
在以下位置创建容器:
WebMarkupContainer container = new WebMarkupContainer ( "cont" );
//we will hide this container, so we can replace someComponent.setOutputMarkupPlaceholderTag ( true ); by this
container.setOutputMarkupPlaceholderTag ( true );
将容器添加到表单:
form.add(container);
添加我们的
someComponent
到此容器:
container.add(someComponent);
并且在
AjaxCheckBox#onUpdate()
使用ajax的方法更新容器:
protected void onUpdate(AjaxRequestTarget target) {
//if checkbox is checked, then our component is shown
container.setVisible(checkBoxValue);
target.add(container);
}
在html代码中
<div wicket:id="cont">
<input type="text" wicket:id="someComponent"/>
</div>
您可以向这样的容器中添加任意数量的组件,并且可以使用它来管理所有组件。