获取自定义控件的ID

时间:2013-10-16 21:05:44

标签: custom-controls xpages

我有一个相当复杂的自定义控件,可以在任何给定的XPage上多次使用。在控件中,我创建了几个viewScope变量,这些变量必须是特定自定义Control的唯一变量。我想做一些像viewScope.put(customControlID +“variableName”,“Stuff”) 但我不知道如何获得自定义控件ID

3 个答案:

答案 0 :(得分:11)

您可以在this.getId()级别获取<xp:view>的当前自定义控件ID。

如果您将此ID放入compositeData变量(例如compositeData.id),那么您可以在任何位置使用自定义控件中的ID。

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    beforePageLoad="#{javascript:compositeData.id = this.getId()}" >

SSJS中的用法:

viewScope.put(compositeData.id + "variableName","Stuff")

通常,ID的名称类似于“_id2”,“_ id8”,...

答案 1 :(得分:3)

您可以使用 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}" />

答案 2 :(得分:1)

这是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>