Мы унаследовали большую кодовую базу, которая использует 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() даже не следует вызывать вручную, поскольку в документах указано только «Вызывается при выборе нового параметра». в пассивной форме.
У меня есть вопросы:
- Наши предки злоупотребляли Wicket API, вызывая
onSelectionChanged()
вручную? - Есть ли замена
RadioGroup.onSelectionChanged()
в Wicket 8? - Как правильно реализовать функционал, описанный в первом абзаце?