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