嵌套自定义复合组件中的#{cc.attrs}

时间:2018-04-09 09:15:48

标签: jsf jsf-2 custom-component composite-component

在JSF 2.2中,我有一个自定义组件y:parent,包括另一个自定义组件y:child,它有一个组件java bean,允许子组件。

我的问题是#{cc.attrs}引用了“最近的”组件,所以如果我做了类似的事情:

<!-- y:parent -->
<cc:implementation>
    <a id="#{cc.attrs.myAttribute.myProperty}" />
    <y:child>
        <a id="#{cc.attrs.myAttribute.myProperty}" />
    </y:child>
</cc:implementation>

两个#{cc.attrs.myAttribute}引用了两个组件(第一个y:parent,然后是y:child),而不是y:parent,因此第二次访问父属性失败。< / p>

有没有办法告诉JSF仍然引用父组件?

我找到的唯一方法是在我正在寻找的属性上使用c:set,例如:

<!-- y:parent -->
<cc:implementation>
    <c:set var="myAttribute" value="#{cc.attrs.myAttribute}" />
    <y:child>
        <a id="#{myAttribute.myProperty}" />
    </y:child>
</cc:implementation>

另外,我发现EL评估对于标签属性和内容是不同的,不确定原因。我想这取决于JSF生命周期。所以,例如:

<!-- y:parent -->
<cc:implementation>
    <a id="#{cc.attrs.myAttribute.myProperty}">#{cc.attrs.myAttribute.myProperty}</a>
    <y:child>
        <a id="#{cc.attrs.myAttribute.myProperty}">#{cc.attrs.myAttribute.myProperty}</a>
    </y:child>
</cc:implementation>

这两个链接将具有相同的内容,但只会设置第一个id

0 个答案:

没有答案