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

时间:2014-02-27 09:16:16

标签: jsf jsf-2 primefaces

我有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

1 个答案:

答案 0 :(得分:1)

我担心<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>  

<强> BackingBean

public void selectImage()
{
    select(selectedImage);
    selectedImage = null;
}

private String selectedImage;
//Getter/Setter

顺便说一句。您可能希望阅读此post,尤其是#4