2012-03-14 103 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

相关问题