【问题标题】:p:ajax inside h:graphicImagep:ajax 在 h:graphicImage 中
【发布时间】:2011-09-05 11:29:43
【问题描述】:

我在使用 Primefaces 触发 ajax 请求时遇到问题

<f:metadata>
  <f:viewParam name="token" value="#{clientBean.token}"/>
  <f:event type="preRenderView" listener="#{clientBean.getParameter}" />
</f:metadata>
<h:form>
  <h:graphicImage id="id1" url="/images/circle-ok.png" onclick="dTag.show();"/>
  <p:commandButton id="id4" value="T" actionListener="#{clientBean.tag}" />  

  <!-- This does not work -->
  <h:graphicImage id="id2" url="/images/circle-ok.png">
    <p:ajax id="id3" event="onclick" onstart="dTag.show();"
            actionListener="#{clientBean.tag}" />
  </h:graphicImage>
</h:form>

第一个h:graphicImage正确打开对话框,p:commandButton正确触发actionListener,但p:ajax没有效果(在googles应用引擎上测试)。

更新 1eventonclick 更改为 click 绝对正确(感谢 BalusC):现在显示了 p:dialog。但仍然没有调用tag() 方法。我已经用f:metadata 更新了xhtml-Code,因为还有一个额外的日志记录。 我认为它与 p:ajax 和 bean 的调用有关,我尝试过 actionListeneractionlistener(来自Primefaces)具有相同的结果:

  • 应用引擎记录getParameter(ComponentSystemEvent event) 的调用,Firebug 显示此部分更新:&lt;changes&gt;&lt;update id="otCounter"&gt;&lt;![CDATA[&lt;span id="otCounter"&gt;0&lt;/span&gt;]]&gt;&lt;/update&gt;..
  • 没有记录public void tag(ActionEvent ae) 的调用(也尝试过public void tag()

p:commandButton 正确更新计数器。

更新 2 为了简单起见,我删除了f:viewParamf:event,现在使用listenerpublic void tag(),但没有调用该方法:-(

更新3 BalusC的回答是正确的,我这里使用的时候还有其他问题:JSF and p:ajax inside p:dataTable inside ui:repeat

【问题讨论】:

    标签: java google-app-engine jsf primefaces


    【解决方案1】:

    事件名称错误,必须是"click",不带on前缀。

    <h:graphicImage id="id2" url="/images/circle-ok.png">
        <p:ajax id="id3" event="click" onstart="dTag.show();"
            listener="#{clientBean.tag}" />
    </h:graphicImage>
    

    事件的on 前缀仅适用于为事件处理程序提供挂钩的 HTML 元素属性的名称。它们不代表完整的事件名称。

    注意&lt;p:ajax&gt; 不支持actionListener 属性。它必须是listener,并且应该引用一个以AjaxBehaviourEvent 作为参数的方法(没有参数也很好)。这与&lt;f:ajax&gt; 完全相同。

    【讨论】:

    • 感谢 BalusC,现在显示了对话框,但仍然没有调用我的 bean 方法。 (我已经更新了问题)
    • 查看答案更新,&lt;p:ajax&gt; 不支持actionListener。抱歉,我没有立即看到它,因为我不了解整个 PF vdl,并认为你是对的。
    • 感谢您的更新,但这个问题仍然让我抓狂。我再次明确测试了listener 和方法public void tag(),但没有调用该方法:-(
    • 你确定这是放在&lt;h:form&gt;里面的吗?如果您改用&lt;f:ajax&gt; 会怎样? (仅删除 onstart 进行测试)。
    • 是的,它在h:form 里面。但另外在ui:repeat(它就像一个魅力)和p:datatable。我想我已经看到了与“p:datatable”和 ajax 请求相关的其他问题,并且会寻找它们!
    猜你喜欢
    • 1970-01-01
    • 2011-11-29
    • 2014-09-02
    • 2012-12-02
    • 2020-09-27
    • 2014-12-26
    • 1970-01-01
    • 2013-01-02
    • 2014-02-26
    相关资源
    最近更新 更多