【问题标题】:Trigger <cc:clientBehavior> event from <p:ajax> nested in composite从嵌套在复合中的 <p:ajax> 触发 <cc:clientBehavior> 事件
【发布时间】:2014-11-18 16:24:02
【问题描述】:

有什么方法可以用 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>

【问题讨论】:

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


    【解决方案1】:

    &lt;cc:clientBehavior event&gt; 必须声明一个受相关目标组件支持的有效事件名称。因此,在这种情况下,它必须与将&lt;p:ajax&gt; 直接嵌套在&lt;p:commandLink&gt; 中时使用的事件名称完全相同。您可能想要actionclick

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

    另见:

    【讨论】:

    • 你说得对,在当前上下文中这不是 jQuery 问题,所以我可能过于简单化了。我正在尝试将 jQuery 插件(ShapeShift 2)集成到我的复合材料中,但我不知道如何从 jQuery .on() 回调中触发 ajax 事件。这个问题值得再问一个问题吗?
    • 您可以使用&lt;p:remoteCommand&gt;。另见stackoverflow.com/questions/16588327/…
    猜你喜欢
    • 2015-02-16
    • 2014-07-08
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多