2013-10-31 34 views

回答

1

你想文檔的字段設置爲當前選擇的值對應的標籤。

下面的代碼適用於定義的xp:selectItem項目和基於屬性,視圖,bean或其他來源的各種計算xp:selectItems定義。

服務器端JavaScript解決方案

添加以下SSJS代碼在onclick事件提交按鈕:

<xp:this.action><![CDATA[#{javascript: 
      var select = getComponent('djFilteringSelect1'); 
      var list = select.getChildren(); 
      var value = select.getValue(); 
      var label = ""; 
      for (var i = 0; i < list.length && label === ""; i++) { 
       print (i); 
       if (typeof list[i] === 'com.ibm.xsp.component.UISelectItemEx') { 
        if (list[i].getItemValue() === value) { 
         label = list[i].getItemLabel(); 
        } 
       } else if (typeof list[i] === 'com.ibm.xsp.component.UISelectItemsEx') { 
        items = list[i].getValue(); 
        for (var k = 0; k < items.length && label === ""; k++) { 
         if (items[k].getValue() === value) { 
          label = items[k].getLabel(); 
         }      
        } 
       } 
      } 
      document1.setValue("label", label) 
}]]></xp:this.action> 

它貫穿所有定義的Dojo過濾選擇控制selectItems,查找選定值並將相應的標籤寫入文檔的「標籤」字段。

客戶端的JavaScript解決方案

創建連接到文檔的領域 「標籤」 隱藏的輸入字段:

<span style="display:none"> 
    <xp:inputText 
     id="fieldLabel" 
     value="#{document1.label}"> 
    </xp:inputText> 
</span> 

添加以下CSJS代碼在onclick事件提交按鈕

<xp:this.script><![CDATA[XSP.getElementById("#{id:fieldLabel}").value = 
    dijit.byId('#{id:djFilteringSelect1}').get('displayedValue')]]> 
</xp:this.script> 

它將輸入字段設置爲當前所選值的標籤,然後將其寫入文檔ent的領域「標籤」。

+0

我剛試過,但得到錯誤腳本解釋器錯誤,行= 29,在Java類'com.ibm.xsp.component.UISelectItemsEx'中的行if(list [i] .getItemValue()=== select.getValue()){ –

+0

我擴展了我的默認成員'getItemValue' SSJS代碼,並添加了一個簡單的CSJS解決方案 - 希望一種解決方案將爲您工作。 –

+0

非常感謝。我只是測試了SSJS解決方案,它完美的工作! –

2

我使用Java bean來保存這種類型的信息。這將使以後翻譯頁面變得更容易。因此,我有不同的選項靜態地圖的定義:

private static final Map<String, String> userInterestLabels; 
static { 
    userInterestLabels = new HashMap<String, String>(); 
    userInterestLabels.put("1", "Environment"); 
    userInterestLabels.put("2", "Sience"); 
    userInterestLabels.put("3", "Regulations"); 
    userInterestLabels.put("4", "Generel interest"); 
} 

然後我不得不返回選擇項目的字段列表的方法:

public List<SelectItem> getListUserInterests() { 
    List<SelectItem> selectItems = new ArrayList<SelectItem>(); 
    for (Map.Entry<String, String> item : userInterestLabels.entrySet()) { 
     selectItems.add(new SelectItem(item.getKey(), item.getValue())); 
    } 
    return selectItems; 
} 

在我的XPage我指的是這種方法使用表達式語言(無需SSJS):

<xe:djFilteringSelect id="inputRoleInterest" value="#{User.interest}" 
disableValidators="true" hasDownArrow="true" immediate="true"> 
<xp:selectItems> 
    <xp:this.value><![CDATA[#{User.listUserInterests}]]></xp:this.value> 
</xp:selectItems> 

現在,當你提交這個頁面的User bean有一個方法「setInterest()」,它通過綁定#{User.interest}調用。在該方法中,您可以根據從該字段返回的值獲取標籤。我有這樣的方法:

public String getUserInterestLabel(String interest) { 
    String label = userInterestLabels.get(interest); 
    return (null == label) ? "" : label; 
} 

返回從被用來生產你選擇的項目在同一個地圖上的標籤。現在,您可以保存標籤,在另一個領域 - 或者任何你想用它做;-)

public void setInterest(String interest) { 
    this.interest = interest; 
    this.interestLabel = getUserInterestLabel(interest); 
} 

/約翰

+0

謝謝,我會用下面的SSJS解決方案,因爲我覺得它更直接。 –