浮現在腦海的第一個解決方案是檢查什麼選項是由用戶直接在JavaScript代碼選用。
這裏的檢票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構造函數的最後一個參數。
也許,有更好的解決方案。