p:ajax 仅在 p:dataGrid 的第一个元素中执行



>我有一个包含一些图像的p:dataGrid,并希望用户选择其中之一

<h:form id="f1">
 <p:dataGrid var="image" value="#{bean.images}"
             columns="3" rows="1" paginator="true"
             paginatorTemplate="{PreviousPageLink} {PageLinks} {NextPageLink}">
  <h:graphicImage value="#{image.url}" width="200">
    <p:ajax event="click" listener="#{bean.selectImage(image.url)}"/>
  </h:graphicImage>
 </p:dataGrid>  
</h:form>

不幸的是,我得到的方法public void selectImage(String url)只为p:dataGrid中的第一个元素调用(并且可以多次单击此图像)。我使用的是PrimeFaces-4.0和JBoss-7.2

<h:graphicImage>不支持ajax,你最好把它包装在一个<p:commandLink>中。但是,即使我可以强制 UICommand 调用正确方法的唯一方法是使用 <f:setPropertyActionListener>

<p:dataGrid var="image" value="#{bean.images}"
         columns="3" rows="1" paginator="true"
         paginatorTemplate="{PreviousPageLink} {PageLinks} {NextPageLink}">
    <p:commandLink action="#{bean.selectImage()}" process="@this" update="@none">
      <h:graphicImage value="#{image.url}" width="200"/>
      <f:setPropertyActionListener target="#{bean.selectedImage}" value="#{image.url}" />
    </p:commandLink>
</p:dataGrid>  

背豆

public void selectImage()
{
    select(selectedImage);
    selectedImage = null;
}
private String selectedImage;
//Getter/Setter

顺便说一句,你可能想阅读这篇文章,尤其是#4

最新更新