使用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
没有效果(在google应用引擎上测试)。
更新1 将event
从onclick更改为click是绝对正确的(感谢BalusC):现在显示了p:dialog
。但是仍然没有调用tag()
方法。我已经用f:metadata
更新了xhtml
代码,因为有一个额外的日志记录。我认为这与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:viewParam
和f:event
,现在正在使用listener
和public void tag()
,但该方法没有调用:-(
Update 3 BalusC的答案是正确的,我在这里使用它时有其他问题:JSF和p:ajax内p:dataTable内ui:repeat
事件名称错误,必须为"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>
完全相同