[英]Hide/Show a Panel depending on a CheckBox in Wicket
我有這段代碼:
final WebMarkupContainer container = new WebMarkupContainer("container");
container.setVisible(aBooleanValue);
container.setOutputMarkupId(true);
container.setOutputMarkupPlaceholderTag(true);
add(container);
final CheckBox hideContainer = new CheckBox("hideContainer", new PropertyModel<Boolean>(getModel(), "hideContainer"));
container.add(hideContainer);
hideContainer.add(new AjaxFormComponentUpdatingBehavior("onchange") {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
if (Boolean.TRUE.equals(getModelObject().getHideContainer())) {
container.setVisible(false);
} else {
container.setVisible(true);
}
target.addComponent(MyForm.this.get("container"));
}
});
這將創建一個 WebMarkupContainer 和一個復選框,如果選中復選框,則應隱藏容器,如果未選中復選框,則應可見容器。
但這不起作用......我做錯了什么?
您可以嘗試使用AjaxCheckBox 。 覆蓋onUpdate(AjaxRequestTarget)
方法並從行為中移動代碼,因為它應該在所有瀏覽器上都能正常工作。
最佳 wicket 實踐是配置 wicket 組件以拉取數據而不是將數據推送給它們。 您可以嘗試覆蓋組件的 isVisible 方法,而不是設置組件的可見性。
最終的 WebMarkupContainer 容器 = new WebMarkupContainer("container"){
public boolean isVisible(){
return showContainer;//showContainer is a boolean instance variable
}
};
並在 onchange 事件中更改 showContainer 值並將組件添加到目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.