gpt4 book ai didi

java - 如何使用 p :graphicImage with StreamedContent inside ui:repeat/h:dataTable/p:dataTable?

转载 作者:行者123 更新时间:2023-11-29 06:03:30 25 4
gpt4 key购买 nike

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

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

但这并没有显示出来。它显示替代文本。我看到了另一个帖子 Use of p:graphicImage in ui:repeat or p:dataTable ,但我不明白 getImages()方法。

最佳答案

I don´t get the getImages method

getImages方法是 images 的 setter/getter 恰好设置为 value 的属性<ui:repeat> 的属性.

那么为什么它是一个 String 对象的列表呢?我认为 graphicImage组件的值必须是 StreamedContent?

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

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

<ui:repeat value="#{bean.images}" var="imageID">
<p:graphicImage value="#{bean.image}">
<f:param name="imageID" value="#{imageID}" />
</p:graphicImage>
</ui:repeat>

value重复的属性 graphicImage是一个托管 bean 属性 getter ,它与每隔一个 graphicImage 加载图像的方法相同组件获取。不同之处在于 image我们可以使用 FacesContext 的属性 getter 方法获取我们作为 HTTP 请求参数传递的唯一 imageID。

public StreamedContent getImage() {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest myRequest = (HttpServletRequest) context.getExternalContext().getRequest();
String imageID = (String) myRequest.getParameter("imageID");
return new DefaultStreamedContent(new ByteArrayInputStream(themeFacade.find(Long.parseLong(imageID)).getImage()));
}

关于java - 如何使用 p :graphicImage with StreamedContent inside ui:repeat/h:dataTable/p:dataTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9320557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com