我们继承了使用 Wicket 6 的大型代码库,其中我们有一个首选联系类型选择(短信、电子邮件等)的 RadioGroup
。选择 SMS 的 Radio
后,电话号码的 TextField
就会可见,电子邮件等也是如此。
这是通过向每个 Radio
添加“onclick”事件的 AjaxEventBehavior
来实现的。 onEvent(AjaxRequestTarget)
方法调用 RadioGroup.onSelectionChanged()
并更新每个 TextField
的可见性:
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);
}
}
我们的问题是我们必须升级到 Wicket 8,onSelectionChanged()
方法已从 RadioGroup
中删除,并且我们找不到任何有关可能替代方案的文档。通过阅读 Wicket 6 JavaDocs 的字里行间,我感觉到 onSelectionChanged() 方法甚至不应该手动调用,因为文档仅以被动形式声明“在选择新选项时调用。”。
我有疑问:
- 我们的祖先是否通过手动调用
onSelectionChanged()
滥用了 Wicket API? - Wicket 8 中是否有
RadioGroup.onSelectionChanged()
的替代品? - 实现第一段中描述的功能的正确方法是什么?
最佳答案
您需要咨询迁移页面: https://cwiki.apache.org/confluence/x/E7OnAw
新方法是:
// 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);
}
});
关于java - Wicket 6 至 8 升级 : RadioGroup. onSelectionChanged() 替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60542299/