2012-09-25 72 views
1

我有一個下拉框,我正在使用AjaxCallDecorator。目前,當您從下拉列表中選擇一個地址時,我會使用一些ajax對地址執行一些檢查。我在下拉菜單旁邊使用微調圖標,讓用戶知道發生了一些事情。下拉菜單中的一個選項是「手動輸入地址」。當他們選擇這個時,我不希望AjaxCallDecorator進行裝飾。它不會彈出很長時間(可能是四分之一秒),但我不希望它出現。需要AjaxCallDecorator根據下拉值有條件地顯示

我無法弄清楚如何有條件地出現裝飾條件基於用戶在下拉菜單中選擇的內容。 getAjaxCallDecorator只用於確定要使用的裝飾器,並且我非常確定它只在初始化或頁面加載時調用一次。每次選擇新的下拉選項時都不會調用它。

謝謝。

(對不起,應該已經包括我使用的檢票1.4.20)

回答

2

浮現在腦海的第一個解決方案是檢查什麼選項是由用戶直接在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構造函數的最後一個參數。

也許,有更好的解決方案。