找不到'rich:component':a4j:带复合组件的ajax

时间:2013-11-24 17:43:01

标签: jsf namespaces richfaces el composite

我构建了一个简单的复合组件 - 一个“更丰富”的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>

2 个答案:

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