Custom controls 获取自定义控件的ID

Custom controls 获取自定义控件的ID,custom-controls,xpages,Custom Controls,Xpages,我有一个相当复杂的自定义控件,可以在任何给定的XPage上多次使用。在控件中,我创建了两个viewScope变量,这些变量必须是特定自定义控件的唯一变量。我想做一些类似viewScope.put(customControlID+“variableName”,“Stuff”)的事情 但是我不知道如何获取自定义控件ID,您可以在级别使用this.getId()获取当前自定义控件ID 如果将此ID放入compositeData变量(例如,compositeData.ID),则可以在自定义控件中任意位置

我有一个相当复杂的自定义控件,可以在任何给定的XPage上多次使用。在控件中,我创建了两个viewScope变量,这些变量必须是特定自定义控件的唯一变量。我想做一些类似viewScope.put(customControlID+“variableName”,“Stuff”)的事情
但是我不知道如何获取自定义控件ID,您可以在
级别使用
this.getId()
获取当前自定义控件ID

如果将此ID放入compositeData变量(例如,
compositeData.ID
),则可以在自定义控件中任意位置使用该ID


SSJS中的用法:

viewScope.put(compositeData.id+“variableName”、“Stuff”)

通常,ID的名称类似于“_id2”、“_id8”、…

以下是另一个作为SSJS函数的解决方案:

function getCCId( cmp:javax.faces.component.UIComponent):string{

    try{
        if( typeof( cmp ) === 'com.ibm.xsp.component.UIIncludeComposite' ){
            return cmp.getId();
        }
        return getCCId( cmp.getParent() )
    }catch(e){}

}
函数爬升组件树,直到找到父CC,然后返回id

您可以在如下标签中使用f.e.:

<xp:label id="label1">
    <xp:this.value><![CDATA[#{javascript:getCCId( this )}]]></xp:this.value>
</xp:label>

您可以使用dataContext变量:

<xp:this.dataContexts>
   <xp:dataContext
      value="#{javascript:this.getId()}"
      var="id">
   </xp:dataContext>
</xp:this.dataContexts>

然后可以在SSJS中作为id访问该变量

<xp:label id="label1" value="#{javascript:id}" />

…或在EL中:

<xp:label id="label1" value="#{id}" />


克努特,这是一个相当聪明的方法。这也是一个非常方便的解决方案。