2012-03-14 54 views
1

我有兩個自定義控件CustomControlBody和CustomControlTitle。將組件的值從一個自定義控件傳遞給另一個

CustomControlBody有一個單選按鈕。 CustomControlTitle具有基於CustomControlBody中單選按鈕的值的計算字段。

如果CustomControlTitle放在CustomControlBody中,那麼CustomControlTitle中的計算字段可以很好地看到CustomControlBody上的單選按鈕的值。

但爲了設計的靈活性,我希望能夠將CustomControlTitle和CustomControlBody分別放置在xPage上。但是當我這樣做時,CustomControlTitle似乎無法看到CustomControlBody中的單選按鈕。

如何將CustomControlBody中的單選按鈕的值傳遞給CustomControlTitle中的計算字段?

回答

4

你可以使用viewscope來設置參數,並在刷新你可以閱讀這個變種。另一種方法是創建一個自定義控件標題和正文(可編輯區域)。創建第三個控件,將這些控件放入並填充單選按鈕和文本字段的小平面,如 (這是沒有投入生產ofcourse它只是說明上述..)

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" 
    xmlns:xc="http://www.ibm.com/xsp/custom" 
    xmlns:xe="http://www.ibm.com/xsp/coreex"> 

    <xp:this.data> 
     <xp:dominoDocument var="yourdocument" action="editDocument" 
      documentId="#{javascript:return compositeData.DocumentUniqueID;}" 
      computeWithForm="save" formName="yourdocument"> 
     </xp:dominoDocument> 
    </xp:this.data> 


    <xp:panel> 

    <xc:Title> 
     <xp:textxp:key="field" value="#{javascript: rb = getComponent("radiobutton"); return cb.getValue();}"/> 
    </xc:Title> 
    <xc:Body> 

    <xp:radioGroup id="radioGroup1" xp:key="fields"> 
     <xp:eventHandler event="onchange" submit="true" 
      refreshMode="partial" refreshId="titleControl"> 
      <xp:this.action><![CDATA[#{javascript:viewScope.value = this.getValue();}]]></xp:this.action> 
     </xp:eventHandler></xp:radioGroup> 
    </xc:Body> 

</xp:panel> 

</xp:view> 
+0

感謝。聽起來像是viewScope是要走的路。我不知道爲什麼我沒有想到這一點。:)你可以在自定義控件上設置屬性。能夠從它們動態獲取值將是很好的。 – 2012-03-14 19:23:10

+7

Bruce將傳遞給自定義控件的屬性存儲在屬性圖中。所以只要CC有一個ID,你應該能夠訪問傳遞給它的任何屬性: getComponent(「customControlId」)。getPropertyMap()。get(「propertyName」) – 2012-03-14 19:49:41

+5

如果屬性值的toString來作爲對ValueBindingImpl的引用(例如[email protected]),這意味着該屬性是動態確定的,因此您需要稍微更復雜的表達式來獲取值: getComponent (「customControlId」)。getPropertyMap()。get(「propertyName」)。getValue(facesContext) – 2012-03-14 19:52:51

相關問題