2

我们继承了一个使用 Wicket 6 的大型代码库,其中我们有一个RadioGroup首选的联系类型选择(SMS、电子邮件等)。Radio选择 SMS时TextField,电话号码可见,电子邮件等相同。

这是通过向AjaxEventBehavior每个Radio. 该onEvent(AjaxRequestTarget)方法调用RadioGroup.onSelectionChanged()并更新 each 的可见性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() 方法,因为文档仅以被动形式声明“在选择新选项时调用。 ”。

我有问题:

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

1 回答 1

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);
    }
});
于 2020-03-05T10:00:11.580 回答