Я знаком с RichFaces, но относительно плохо знаком с Primefaces и пытаюсь реализовать простой h:graphicImage
внутри p:dataTable
(дополнительно внутри ui:repeat
).Это следующий вопрос о p: ajax внутри h: graphicImage .
Я разделю следующий xhtml
-код, чтобы напрямую прокомментировать поведение:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui"
xml:lang="en" lang="en">
<h:head id="head">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
</h:head>
<h:body id="body">
<f:view contentType="text/html">
Теперь следует первый h:form
, который содержит h:outputText
и h:graphicImage
.При нажатии на изображение вызывается метод bean, и счетчик корректно обновляется.
<h:form id="f1">
<h:outputText id="counter" value="#{clientBean.counter}" />
<h:graphicImage url="/images/circle-ok.png">
<p:ajax event="click" update="counter" process="@this"
listener="#{clientBean.tag}"/>
</h:graphicImage>
</h:form><hr/>
Во втором h:form
кнопка находится внутри p:dataTable
.Если я нажимаю на изображение, метод бина называется счетчик обновляется.( Примечание Сначала я попытался update="counter"
безуспешно)
<h:form id="f2">
<p:dataTable var="var" value="#{clientBean.vf}">
<p:column>
<f:facet name="header">Tag</f:facet>
<h:graphicImage url="/images/circle-ok.png">
<p:ajax event="click" update="f1:counter" process="@this"
listener="#{clientBean.tag}" />
</h:graphicImage>
</p:column>
</p:dataTable>
</h:form><hr/>
Изображение внутри ui:repeated
обновляет счетчик , как и ожидалось:
<ui:repeat var="var1" value="#{clientBean.list}">
<h:form id="f3">
<h:graphicImage url="/images/circle-ok.png">
<p:ajax event="click" update="f1:counter" process="@this"
listener="#{clientBean.tag}" />
</h:graphicImage>
Теперь давайте перейдем к p:dataTable
внутри ui:repeat
.С этим фрагментом кода метод бина не называется:
<p:dataTable var="var2" value="#{var1.list}">
<p:column>
<f:facet name="header">Tag</f:facet>
<h:graphicImage url="/images/circle-ok.png">
<p:ajax event="click" update="f1:counter" process="@this"
listener="#{clientBean.tag}" />
</h:graphicImage>
</p:column>
</p:dataTable>
</h:form>
</ui:repeat>
</f:view></h:body></html>
В этом случае я получаю <partial-response><changes><update id="f1:counter">...
, но метод бина не вызывается (внутри это tag()
метод счетчик не обновляется).Это проверено с отладкой.Я прочитал невозможно использоватьна данных моего простого лица , но у меня такое же поведение с primefaces-3.0.M3.jar
и primefaces-2.2.1.jar
.