Java Wicket 6到8升级:RadioGroup.onSelectionChanged()替换
我们继承了一个使用Wicket 6的大型代码库,其中我们有一个首选联系人类型选择(SMS、电子邮件等)的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<>("
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()
。