p: ajax внутри h: graphicImage - PullRequest
       4

p: ajax внутри h: graphicImage

1 голос
/ 05 сентября 2011

У меня проблема с запуском ajax-запроса с Primefaces

<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 на click было абсолютно правильным (спасибо BalusC): теперь отображается p:dialog. Но все равно метод tag() не вызывается. Я обновил xhtml -Code с 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:viewParam и f:event для простоты и теперь использую listener и public void tag(), но метод не вызывается: - (

Обновление 3 Ответ BalusC правильный, у меня есть другие проблемы при его использовании здесь: JSF и p: ajax внутри p: dataTable внутри пользовательского интерфейса: повтор

1 Ответ

4 голосов
/ 05 сентября 2011

Имя события неверно, оно должно быть "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>.

...