我构建了一个简单的复合组件 - 一个“更丰富”的commandLink。我希望它支持clientBehavior
,但当组件附加<a4j:ajax>
时,我有时会得到例外:ELException: Function 'rich:component' not found
仅当我在#{rich:component('...')}
的任何属性中使用<a4j:ajax>
时才会出现这种情况。例如oncomplete="#{rich:component('...')}.show()"
修改:我收到服务器错误,而不是JavaScript错误。
复合组件(简化):
<composite:interface>
<composite:attribute name="style" />
<composite:clientBehavior name="click" event="action" targets="commandLink" default="true"/>
</composite:interface>
<composite:implementation>
<h:commandLink id="commandLink" style="#{cc.attrs.style}">
<!-- my custom component content -->
</h:commandLink>
</composite:implementation>
使用此组件的问题如下:
<myLib:commandLink value="Custom CmdLink">
<a4j:ajax render="@form" execute="@form"
oncomplete="#{rich:component('myEditPopup')}"/>
</myLib:commandLink>
但是下面的代码就像魅力一样:
<h:commandLink value="test">
<a4j:ajax render="@form" execute="@form"
oncomplete="#{rich:component('myEditPopup')}.show()"/>
</h:commandLink>
修改:这个也适用:
<a4j:ajax render="@form" execute="@form"
oncomplete="#{rich:component('myEditPopup')}.show()">
<myLib:commandLink value="label"/>
</a4j:ajax>
答案 0 :(得分:1)
这似乎是Mojarra中的一个错误(我们一直在使用版本2.1.6),EL失去了名字命名“rich”。 一个有效的解决方法是在每个用途的a4j:ajax标记中声明命名空间:
<myLib:commandLink value="Show">
<a4j:ajax render="@form" execute="@form" xmlns:rich="http://richfaces.org/rich"
oncomplete="#{rich:component('myEditPopup')}.show()"/>
</myLib:commandLink>
将Mojarra更新为2.1.26后,问题就消失了,无需解决此问题。
答案 1 :(得分:0)
如果您遗漏了{
,则会收到错误rich:component not found
。
a4j:commandButton
<a4j:commandButton value="Show" oncomplete="#{rich:component('chargePointDetailPopup')}.show()"/>
对于a4j:commandLink中的ajax
<h:commandLink value="Show">
<a4j:ajax render="@form" execute="@form" oncomplete="#rich:component('chargePointDetailPopup')}.show()"/>
</h:commandLink>
确保rich:popupPanel
<rich:popupPanel id="chargePointDetailPopup">
......
</rich:popupPanel>
了解更多Reference