问题
We have inherited a large code base that uses Wicket 6 where we have a RadioGroup
of preferred contact type choices (SMS, e-mail, etc). When a Radio
for SMS is selected, a TextField
for phone number is made visible, same for e-mail and so on.
This has been implemented by adding an AjaxEventBehavior
for "onclick" event to each Radio
. The onEvent(AjaxRequestTarget)
method calls RadioGroup.onSelectionChanged()
and updates the visibility of 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);
}
}
Our problems are that we have to upgrade to Wicket 8, the onSelectionChanged()
method has been removed from RadioGroup
and we can not find any documentation about a possible replacement. From reading between the lines of Wicket 6 JavaDocs, I get the feeling that the onSelectionChanged() method shouldn't even be called manually, since the docs only state "Called when a new option is selected." in a passive form.
I have questions:
- Did our ancestors abuse the Wicket API by calling
onSelectionChanged()
manually? - Is there a replacement for
RadioGroup.onSelectionChanged()
in Wicket 8? - What is the correct way of implementing the functionality described in the first paragraph?
回答1:
You need to consult with the migration page at https://cwiki.apache.org/confluence/x/E7OnAw
The new way is:
// 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);
}
});
来源:https://stackoverflow.com/questions/60542299/wicket-6-to-8-upgrade-radiogroup-onselectionchanged-replacement