【发布时间】:2012-12-15 02:35:07
【问题描述】:
我做了一个复合组件,里面是一个
类似这样的:
...
<cc:attribute name="additionalAjaxRenderIds" type="java.lang.String"></cc:attribute>
...
<h:commandLink value="test" action="#{myBean.someAction}" id="testLink" >
<f:ajax execute="@this" render="#{cc.attrs.additionalAjaxRenderIds} "/>
</h:commandLink>
...
我在一个表单中使用这个 cc,它已经在一个外部命名容器中:
<h:form id="myForm">
...
<mycomp:myComponent id="myCC" additionalAjaxRenderIds=":#{component.namingContainer.parent.clientId}:myPanel" />
<h:panelGroup id="myPanel">
...
</h:panelGroup>
...
</h:form>
问题是,如果我写
additionalAjaxRenderIds=":#{component.namingContainer.clientId}:myPanel"
我得到这个错误:
<f:ajax> contains an unknown id ':j_idt44:myForm:myCC:myPanel' - cannot locate it in the context of the component testLink
如果我使用这个(+ .parent):
additionalAjaxRenderIds=":#{component.namingContainer.parent.clientId}:myPanel"
错误是:
<f:ajax> contains an unknown id ':j_idt44:myPanel' - cannot locate it in the context of the component testLink
而不是预期的 id:
':j_idt44:myForm:myPanel'
所以我的cc命名容器的父级似乎不是表单,而是外部命名容器
有没有办法: 1、获取正确的父级(表格) 2,在我将EL作为参数传递之前评估EL(所以我可以将计算出的clientId传递给我的cc而不是EL表达式,因此组件不会引用commandLink标签,而是引用我放置我的h:form cc)
我知道我可以使用
additionalAjaxRenderIds=":#{component.namingContainer.parent.clientId}:myForm:myPanel"
但我不喜欢那个解决方案
另外,将表单的 prependId 属性设置为 false 会破坏整个组件的查找(因此也会破坏 ajax 标签)
【问题讨论】:
标签: ajax jsf-2 composite-component naming-containers