簡體   English   中英

根據 Wicket 中的復選框隱藏/顯示面板

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM