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() 替换的主要内容,如果未能解决你的问题,请参考以下文章

将tomcat 7升级到8后检票口登录不起作用

Wicket 6.15 版的添加方法出错

WICKET 6 重新定位HTML所在的目录

gitlab从8.6.5升级到8.11.7(补丁版本通用更新指南)

MvvmCross 从 6.4.2 升级到 8.0.1

如何在 centos 上将 subversion(svn) 1.6.11 版本升级到 1.8.5 版本?