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

时间:2016-05-06 15:06:58

标签: jsf-2 composite-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>

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

ComponentA

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

以componentB

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