将 f:atrribute 传递给嵌套组合组件

Passing f:atrribute to a nested composition component

我有两个嵌套的复合组件,例如:

<my:inputContainer>
    <my:input/>
</my:inputContainer>

我需要将 f:attribute 传递给 my:input 以便在其验证器中取回它:

<my:inputContainer>
    <my:input>
        <f:attribute name="attr" value="any value"/>
    </my:input>
</my:inputConainer>

但是当我尝试从 component.getAttributes() 中检索验证器中的属性值时,它不存在。

我的组件基本上是这样定义的:

<cc:implementation>
    <my:input name="input1"/>
    <my:input name="input2">
        <f:attribute name="input1Value" value="#{cc.attrs.input1Value}"/>
        <f:validator validatorId="myInputValidator" for="inputText"/>      
    </my:input>
</cc:implementation>

我们将不胜感激。

我意识到这是不可能的。 cc:insertChildren 不呈现 f:attribute。如果要将 f:attribute 从一个组件传递到另一个组件,则必须在 cc:interface 中定义 cc:attribute .

组件A

...
<cc:implentation>
   <my:componentB>
        <f:attribute name="myAttr" value="The attribute value"/>
   </my:componentB>
</cc:implementation>

组件 B

<cc:interface>
    ...
    <cc:attribute name="myAttr"/>
</cc:attribute>

<cc:implementation>
    <my:input name="input1"/>
    <my:input name="input2">
        <f:attribute name="input1Value" value="#{cc.attrs.myAttr}"/>
        <f:validator validatorId="myInputValidator" for="inputText"/>      
    </my:input>
</cc:implementation>