I have problem firing an ajax request with Primefaces
<f:metadata>
<f:viewPa开发者_运维知识库ram 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>
The first h:graphicImage
opens the dialog correctly, the p:commandButton
triggers the actionListener correctly, but the p:ajax
has no effects (tested on googles app engine).
Update 1
Changing the event
from onclick to click was absolutely right (thanks BalusC): Now the p:dialog
is shown. But still the tag()
method is not invoked. I've updated the xhtml
-Code with f:metadata
because there is one additional logging.
I think it's related to p:ajax
and the invocation of the bean, I've tried actionListener, action and listener (from the documentation of Primefaces) with the same result:
- The app engines logs the invocation of
getParameter(ComponentSystemEvent event)
and Firebug shows this partial-update:<changes><update id="otCounter"><![CDATA[<span id="otCounter">0</span>]]></update>
.. - The invocation of
public void tag(ActionEvent ae)
is not logged (also triedpublic void tag()
)
The p:commandButton
updates the counter correctly.
Update 2
I've removed the f:viewParam
and f:event
for simplicity and now are using listener
and public void tag()
, but the method is not called :-(
Update 3 The answer of BalusC is correct, I have other problems when using it here: JSF and p:ajax inside p:dataTable inside ui:repeat
The event name is wrong, it must be "click"
without the on
prefix.
<h:graphicImage id="id2" url="/images/circle-ok.png">
<p:ajax id="id3" event="click" onstart="dTag.show();"
listener="#{clientBean.tag}" />
</h:graphicImage>
The on
prefix of events applies only the names of the HTML element attributes which provide a hook for the event handler. They do not represent full event names.
Note the <p:ajax>
doesn't support the actionListener
attribute. It has to be listener
and should refer to a method which takes AjaxBehaviourEvent
as argument (no arguments is also perfectly fine). This is exactly the same as on <f:ajax>
.
精彩评论