【问题标题】:Hide/Show a Panel depending on a CheckBox in Wicket根据 Wicket 中的复选框隐藏/显示面板
【发布时间】:2014-03-25 15:04:31
【问题描述】:

我有这段代码:

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 和一个 Checkbox,如果复选框被选中,那么容器应该被隐藏,如果复选框没有被选中,那么容器应该是可见的。

但这不起作用......我做错了什么?

【问题讨论】:

  • 您确认勾选时是否调用onUpdate(AjaxRequestTarget target)
  • 调用target.add(container); 应该足够了
  • 对于复选框,您应该使用“点击”事件,在 IE 上“更改”将不会触发,直到复选框失去焦点。
  • 使用“onchange”事件肯定会调用 onUpdate。我已经尝试使用“onclick”,但它也不起作用。关于IE,没关系,我们用火狐和我们webapp的用户。

标签: java checkbox wicket


【解决方案1】:

您可以尝试使用AjaxCheckBox。覆盖 onUpdate(AjaxRequestTarget) 方法并从行为中移动代码,因为它应该在所有浏览器上都能正常工作。

【讨论】:

    【解决方案2】:

    最佳 wicket 实践是配置 wicket 组件以提取数据而不是向其推送数据。您可以尝试覆盖组件的 isVisible 方法,而不是设置组件的可见性。

    最终的 WebMarkupContainer 容器 = new WebMarkupContainer("container"){

       public boolean isVisible(){
          return showContainer;//showContainer is a boolean instance variable
       }            
    

    };

    并在 onchange 事件中更改 showContainer 值并将组件添加到目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多