Java 根据Wicket中的复选框隐藏/显示面板

Java 根据Wicket中的复选框隐藏/显示面板,java,checkbox,wicket,Java,Checkbox,Wicket,我有一段代码: final WebMarkupContainer container = new WebMarkupContainer("container"); container.setVisible(aBooleanValue); container.setOutputMarkupId(true); container.setOutputMarkupPlaceholderTag(true); add(container); final CheckBox hideCon

我有一段代码:

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"));
        
    }
});
final WebMarkupContainer=新的WebMarkupContainer(“容器”);
container.setVisible(aBooleanValue);
container.setOutputMarkupId(true);
container.setOutputMarkupPlaceholderTag(true);
添加(容器);
最终复选框hideContainer=新复选框(“hideContainer”,新属性模型(getModel(),“hideContainer”);
container.add(hideContainer);
添加(新的AjaxFormComponentUpdateBehavior(“onchange”){
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
if(Boolean.TRUE.equals(getModelObject().getHideContainer())){
container.setVisible(false);
}否则{
container.setVisible(true);
}
target.addComponent(MyForm.this.get(“容器”);
}
});
这将创建一个WebMarkupContainer和一个复选框,如果选中该复选框,则容器应隐藏,如果未选中该复选框,则容器应可见


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

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

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

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

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

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

最终WebMarkupContainer容器=新的WebMarkupContainer(“容器”){

})


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

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

最终WebMarkupContainer容器=新的WebMarkupContainer(“容器”){

})


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

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

最终WebMarkupContainer容器=新的WebMarkupContainer(“容器”){

})


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

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

最终WebMarkupContainer容器=新的WebMarkupContainer(“容器”){

})



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

您是否确认勾选此框时是否调用了
onUpdate(AjaxRequestTarget)
?调用target.add(container)就足够了;对于复选框,您应该使用“单击”事件,IE上的“更改”将不会激发,直到复选框失去焦点。使用“onchange”事件确实会调用onUpdate。我试过“onclick”,但也不起作用。关于IE,这无关紧要,我们也使用Firefox和我们的Web应用程序的用户。更改组件的可见性:您是否确认勾选复选框时是否调用了更新(AjaxRequestTarget)?调用target.add(container)就足够了;对于复选框,您应该使用“单击”事件,IE上的“更改”将不会激发,直到复选框失去焦点。使用“onchange”事件确实会调用onUpdate。我试过“onclick”,但也不起作用。关于IE,这无关紧要,我们也使用Firefox和我们的Web应用程序的用户。更改组件的可见性:您是否确认勾选复选框时是否调用了更新(AjaxRequestTarget)?调用target.add(container)就足够了;对于复选框,您应该使用“单击”事件,IE上的“更改”将不会激发,直到复选框失去焦点。使用“onchange”事件确实会调用onUpdate。我试过“onclick”,但也不起作用。关于IE,这无关紧要,我们也使用Firefox和我们的Web应用程序的用户。更改组件的可见性:您是否确认勾选复选框时是否调用了更新(AjaxRequestTarget)?调用target.add(container)就足够了;对于复选框,您应该使用“单击”事件,IE上的“更改”将不会激发,直到复选框失去焦点。使用“onchange”事件确实会调用onUpdate。我试过“onclick”,但也不起作用。关于IE,没关系,我们也使用Firefox和我们的Web应用程序的用户。更改组件的可见性:
   public boolean isVisible(){
      return showContainer;//showContainer is a boolean instance variable
   }