开发者

p:ajax inside h:graphicImage

开发者 https://www.devze.com 2023-04-02 06:31 出处:网络
I have problem firing an ajax request with Primefaces <f:metadata> <f:viewPa开发者_运维知识库ram name=\"token\" value=\"#{clientBean.token}\"/>

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 tried public 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>.

0

精彩评论

暂无评论...
验证码 换一张
取 消