Java Wicket 6到8升级:RadioGroup.onSelectionChanged()替换

Java Wicket 6到8升级:RadioGroup.onSelectionChanged()替换,java,wicket,wicket-6,wicket-8,Java,Wicket,Wicket 6,Wicket 8,我们继承了一个使用Wicket 6的大型代码库,其中我们有一个首选联系人类型选择(SMS、电子邮件等)的RadioGroup。当选择了短信的收音机时,手机号码的文本字段将变为可见,电子邮件也是如此 这是通过为每个收音机添加“onclick”事件的AjaxEventBehavior实现的。onEvent(AjaxRequestTarget)方法调用RadioGroup.onSelectionChanged()并更新每个文本字段的可见性: radioSms = new Radio<>("

我们继承了一个使用Wicket 6的大型代码库,其中我们有一个首选联系人类型选择(SMS、电子邮件等)的
RadioGroup
。当选择了短信的
收音机
时,手机号码的
文本字段
将变为可见,电子邮件也是如此

这是通过为每个
收音机添加“onclick”事件的
AjaxEventBehavior
实现的。
onEvent(AjaxRequestTarget)
方法调用
RadioGroup.onSelectionChanged()
并更新每个
文本字段的可见性:

radioSms = new Radio<>("sms", ...);
radioEmail = new Radio<>("email", ...);
radioGroup = new RadioGroup<>("contactGroup");
radioGroup.add(radioSms)
          .add(radioEmail)
          .add(textFieldSms)
          .add(textFieldEmail);
radioSms.add(new OnClickEventBehavior());
radioEmail.add(new OnClickEventBehavior());

...

private class OnClickEventBehavior extends AjaxEventBehavior {
    protected OnClickEventBehavior() {
        super("onclick");
    }

    @Override
    protected void onEvent(AjaxRequestTarget target) {
        radioGroup.onSelectionChanged();
        updateTextFieldVisibilities();
        target.add(form);
    }
}
radioSms=新收音机(“sms”,…);
radioEmail=新收音机(“电子邮件”,…);
放射组=新放射组(“联络组”);
radioGroup.add(RadioMS)
.add(无线电子邮件)
.add(textFieldSms)
.add(textfield电子邮件);
radioSms.add(新的OnClickEventBehavior());
添加(新的OnClickEventBehavior());
...
私有类OnClickEventBehavior扩展了AjaxEventBehavior{
受保护的OnClickEventBehavior(){
超级(“onclick”);
}
@凌驾
受保护的void onEvent(AjaxRequestTarget目标){
radioGroup.onSelectionChanged();
updateTextFieldVisibilities();
目标。添加(表格);
}
}
我们的问题是,我们必须升级到Wicket 8,已从
RadioGroup
中删除了
onSelectionChanged()
方法,并且我们找不到任何关于可能替换的文档。通过阅读Wicket 6 JavaDocs的行与行之间的内容,我感觉onSelectionChanged()方法甚至不应该手动调用,因为docs只以被动形式声明“在选择新选项时调用”

我有问题:

  • 我们的祖先是否通过手动调用
    onSelectionChanged()
    滥用了Wicket API
  • Wicket 8中是否有替换的
    RadioGroup.onSelectionChanged()
  • 实现第一段中描述的功能的正确方法是什么

  • 您需要咨询位于的迁移页面

    新方法是:

    // Wicket 8.x
    new CheckBox("id", model).add(new FormComponentUpdatingBehavior() {
        protected void onUpdate() {
            // do something, page will be rerendered;
        }
    
        protected void onError(RuntimeException ex) {
            super.onError(ex);
        }
    });
    

    谢谢我在浏览器中打开了它,但我感到困惑,因为我们的代码调用了RadioGroup的onSelectionChanged(),迁移指南中的“旧方法”与我们的代码根本不相似。你可能对第一个问题有什么见解吗?我自己从来都不需要手动调用
    onSelectionChanged()
    。Wicket中还有另外两个相关的方法:
    onModelChanging()
    和我使用过的
    onModelChanged()