我有一个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()
方法。
答案 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,则会出现问题...