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