Обновление калитки с 6 по 8: замена RadioGroup.onSelectionChanged()

Мы унаследовали большую кодовую базу, которая использует Wicket 6, где у нас есть RadioGroup предпочтительных вариантов контактов (SMS, электронная почта и т. д.). Когда выбрано Radio для SMS, становится видимым TextField для номера телефона, то же самое для электронной почты и так далее.

Это было реализовано путем добавления события AjaxEventBehavior for onclick к каждому Radio. Метод 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 и мы не можем найти никакой документации о возможной замене. Читая между строк JavaDocs Wicket 6, у меня возникает ощущение, что метод onSelectionChanged() даже не следует вызывать вручную, поскольку в документах указано только «Вызывается при выборе нового параметра». в пассивной форме.

У меня есть вопросы:

  1. Наши предки злоупотребляли Wicket API, вызывая onSelectionChanged() вручную?
  2. Есть ли замена RadioGroup.onSelectionChanged() в Wicket 8?
  3. Как правильно реализовать функционал, описанный в первом абзаце?

person AB - Work Account    schedule 05.03.2020    source источник


Ответы (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);
    }
});
person martin-g    schedule 05.03.2020
comment
Спасибо! У меня это было открыто в моем браузере, но я был сбит с толку, так как наш код вызывает onSelectionChanged() RadioGroup, а старый способ в руководстве по миграции совсем не походил на наш код. Возможно, у вас есть понимание по первому вопросу? - person AB - Work Account; 05.03.2020
comment
Мне никогда не приходилось вызывать onSelectionChanged() вручную, но, возможно, в некоторых случаях это нормально. В Wicket есть еще два связанных метода: onModelChanging() и onModelChanged(), которые я использовал. - person martin-g; 05.03.2020