3

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

4

3 回答 3

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”、...

于 2013-10-16T21:37:27.000 回答
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}" />
于 2013-10-17T11:53:41.093 回答
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。

您可以在这样的标签中使用它 fe:

<xp:label id="label1">
    <xp:this.value><![CDATA[#{javascript:getCCId( this )}]]></xp:this.value>
</xp:label>
于 2013-10-17T05:32:30.397 回答