Wicket 6 到 8 升级:RadioGroup.onSelectionChanged() 替换
Posted
技术标签:
【中文标题】Wicket 6 到 8 升级:RadioGroup.onSelectionChanged() 替换【英文标题】:Wicket 6 to 8 upgrade: RadioGroup.onSelectionChanged() replacement 【发布时间】:2020-06-17 21:42:13 【问题描述】:我们继承了一个使用 Wicket 6 的大型代码库,其中我们有一个RadioGroup
首选联系人类型选择(SMS、电子邮件等)。选择 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()
的替代品吗?
实现第一段所述功能的正确方法是什么?
【问题讨论】:
【参考方案1】:您需要咨询迁移页面,网址为 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);
);
【讨论】:
谢谢!我在浏览器中打开了它,但我很困惑,因为我们的代码调用了 RadioGroup 的 onSelectionChanged() 并且迁移指南中的“旧方式”与我们的代码完全不同。您可能对第一个问题有任何见解吗? 我自己从来不需要手动拨打onSelectionChanged()
,但在某些情况下可能没问题。 Wicket中还有另外两种相关的方法:onModelChanging()
和onModelChanged()
我用过。以上是关于Wicket 6 到 8 升级:RadioGroup.onSelectionChanged() 替换的主要内容,如果未能解决你的问题,请参考以下文章