如何在ui中使用p:graphicImage和StreamedContent:repeat / h:dataTable / p:dataTable?

时间:2012-02-16 23:12:06

标签: java jsf primefaces imagelist

我有一个StreamedContent属性的对象列表,我需要在<p:graphicImage>组件中显示它。

<ui:repeat value="#{testuser.answers}" var="imageanswers">
    <p:graphicImage value="#{imageanswers.imageAnswer}" alt="Image" width="200" height="100" />
    <br />
</ui:repeat>

但是没有显示。它显示alt文本。我看到了其他帖子Use of p:graphicImage in ui:repeat or p:dataTable,但我不理解getImages()方法。

2 个答案:

答案 0 :(得分:3)

  

我没有得到getImages方法

getImages方法是images属性的getter,恰好设置为value的{​​{1}}属性。

那么为什么它是String对象的列表?我认为<ui:repeat>组件的值必须是StreamedContent?

是的,它的值必须是StreamedContent,但是你无法遍历StreamedContents来在页面上构建图像列表。原因是graphicImage Primefaces组件在HTML页面上呈现标准HTML graphicImage标记。如果您要查看Firebug或Fiddler或其他工具的控制台输出,您会注意到JSF页面的请求,然后您还会注意到页面引用的每个图像资源的单独请求。这些图像资源必须从一系列单独的请求中逐个加载,那么ManagedBean如何知道哪个请求映射到哪个图像?

这就是为什么重复组件必须遍历唯一图像ID列表的原因,因为从本质上讲,当它构建一个graphicImage组件时,它正在构建一个HTML图像标记,其中引用了一个特定图像的web服务器,由id标识。要发送此唯一ID,他们使用<img> facelets标记,该标记添加标识为HTTP请求参数的唯一标识。

<f:param>

重复<ui:repeat value="#{bean.images}" var="imageID"> <p:graphicImage value="#{bean.image}"> <f:param name="imageID" value="#{imageID}" /> </p:graphicImage> </ui:repeat> 的{​​{1}}属性是托管bean属性getter,它与加载每个其他value组件获取的图像的方法相同。不同之处在于,在graphicImage属性getter方法中,我们可以使用graphicImage来获取作为HTTP请求参数传递的唯一imageID。

image

答案 1 :(得分:0)

如果您尝试在复合组件中使用graphicImage,则会出现问题...