获取自定义控件的ID

3

我有一个相当复杂的自定义控件,可能会在任何给定的XPage上多次使用。在控件中,我创建了几个视图范围变量,这些变量必须对特定的自定义控件是唯一的。我想做类似于viewScope.put(customControlID + "variableName","Stuff)的事情,但我不知道如何获取自定义控件的ID。

3个回答

11

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

如果将此ID放入复合数据变量中(例如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" 等。

那是一个相当聪明的方法,Knut。 - Tim Tripcony

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}" />

那也是一个非常方便的解决方案。 - Knut Herrmann

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。
您可以在标签中使用它,例如:
<xp:label id="label1">
    <xp:this.value><![CDATA[#{javascript:getCCId( this )}]]></xp:this.value>
</xp:label>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接