复合组件

时间:2018-01-22 13:37:31

标签: jsf composite-component

我有一个复合组件:

<composite:interface componentType="myCC">
    <composite:attribute name="tempId" required="false"/>
    <composite:attribute name="action" targets="??????" required="false"/>
</composite:interface>

<composite:implementation>
        <p:commandButton id="#{cc.attrs.tempId}button" 
            action="#{cc.attrs.action}"/>
</composite:implementation>

另外 - 我有两个使用它的组件 -

<span id="firstSpan">
    <sm:myCC id="fooid1" tempId="inFirstSpan"
      action="#{firstController.method('String')}"/>
</span>

<span id="secondSpan">
    <sm:myCC id="blaid1" tempId="inSecondSpan"
      action="#{secondController.method('String')}"/>
</span>

问题是,我试图在targets中使用id,但它失败了。

在这种情况下我该如何实现?

1 个答案:

答案 0 :(得分:0)

默认情况下,当前的方法不起作用,因为当JSF输出复合组合的子组件的HTML时,它首先包括复合组件id,然后是分隔符,然后是子组件id,如下所示:

假设复合组件ID为“ccId”且子组件为“ccChildId”,输出的ID将如下所示:

ccId:ccChildId

因此,如果您想以动态方式引用子组件ID,则必须合成您的呼叫,包括父ID,以镜像生成的输出HTML。

在你的情况下,你的目标应该是这样的:

targets="fooid1:inFirstSpanbutton"