p:ajax里面的h:graphicImage

时间:2011-09-05 11:29:44

标签: java google-app-engine jsf primefaces

我在使用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应用引擎上测试)。

更新1 event onclick 更改为点击是绝对正确的(感谢BalusC):现在显示p:dialog。但是仍然没有调用tag()方法。我已使用xhtml更新了f:metadata - 代码,因为还有一个日志记录。 我认为它与p:ajax和bean的调用有关,我已经尝试了 actionListener action listener (来自Primefaces的文档,结果相同:

  • 应用引擎记录getParameter(ComponentSystemEvent event)的调用,Firebug显示此部分更新:<changes><update id="otCounter"><![CDATA[<span id="otCounter">0</span>]]></update> ..
  • 未记录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

1 个答案:

答案 0 :(得分:4)

事件名称错误,必须为"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元素属性的名称。它们不代表完整的事件名称。

请注意<p:ajax>不支持actionListener属性。它必须是listener并且应该引用一个以AjaxBehaviourEvent作为参数的方法(没有参数也完全没问题)。这与<f:ajax>上的完全相同。