Обновление калитки с 6 по 8: замена RadioGroup.onSelectionChanged () - PullRequest
1 голос
/ 05 марта 2020

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

Это было реализовано путем добавления AjaxEventBehavior для "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. Наши предки злоупотребляли API Wicket, вызывая onSelectionChanged() вручную?
  2. Есть ли замена для RadioGroup.onSelectionChanged() в Wicket 8 ?
  3. Как правильно реализовать функциональность, описанную в первом абзаце?

1 Ответ

0 голосов
/ 05 марта 2020

Вам необходимо проконсультироваться со страницей миграции по адресу 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);
    }
});
...