想到的第一个解决方案是直接在 JavaScript 代码中检查用户选择了什么选项。
这是 Wicket 1.5 的代码(因为它是最后一个带有 AjaxCallDecorator 的版本):
@Override
protected IAjaxCallDecorator getAjaxCallDecorator() {
return new AjaxCallDecorator() {
@Override
public CharSequence decorateScript(Component c, CharSequence script) {
return "if (" + shouldUseDecoratorScript() + ") { /* Show the spinner icon */ } " + script;
}
@Override
public CharSequence decorateOnSuccessScript(Component c, CharSequence script) {
return "if (" + shouldUseDecoratorScript() + ") { /* Hide the spinner icon */ } " + script;
}
@Override
public CharSequence decorateOnFailureScript(Component c, CharSequence script) {
return "if (" + shouldUseDecoratorScript() + ") { /* Hide the spinner icon */ } " + script;
}
private CharSequence shouldUseDecoratorScript() {
return "this.value !== \"" + enterAddressManuallyItem.getId() + "\"";
}
};
}
这里 enterAddressManuallyItem 是与“手动输入地址”选项对应的项目。我假设它有 getId() getter,你使用类似的东西
new ChoiceRenderer<DropDownChoiceItem>("text", "id")
作为 DropDownChoice 构造函数的最后一个参数。
也许,有更好的解决方案。