来自<p:ajax>的触发<cc:clientbehavior>事件嵌套在复合</p:ajax> </cc:clientbehavior>

时间:2014-09-24 08:47:14

标签: ajax jsf jsf-2 primefaces composite-component

有没有办法用clientBehavior和jQuery触发我的复合组件中的事件?

如果不可能,在合成中创建自定义事件的正确方法是什么?

示例:

ajaxTest.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:cc="http://xmlns.jcp.org/jsf/composite"
      xmlns:p="http://primefaces.org/ui">

    <cc:interface>
        <cc:clientBehavior name="myEvent" targets="myLabel" event="myEvent"/>
    </cc:interface>

    <cc:implementation>
        <div id="#{cc.clientId}">
            <p:outputLabel id="myLabel" value="Test label" />
            <p:commandLink value="trigger event"
                           onstart="$(PrimeFaces.escapeClientId('#{cc.clientId}:myLabel')).trigger('myEvent');"/>            
        </div>
    </cc:implementation>
</html>

testPage.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:p="http://primefaces.org/ui"
        xmlns:demo="http://xmlns.jcp.org/jsf/composite/component">

<h:body>
        <h:form id="form-1">
            <demo:ajaxTest>
                <p:ajax event="myEvent" oncomplete="alert('Ajax called');" />
            </demo:ajaxTest>
        </h:form>
</h:body>
</html>

1 个答案:

答案 0 :(得分:2)

<cc:clientBehavior event>必须声明相关目标组件支持的有效事件名称。因此,在此上下文中,它必须与在<p:ajax>内直接嵌套<p:commandLink>时使用的事件名称完全相同。您可能需要actionclick

<cc:clientBehavior ... event="action" />

另见: