>我有一个包含一些图像的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