【问题标题】:Display on-the-fly generated image on a jsf web app.在 jsf Web 应用程序上显示动态生成的图像。
【发布时间】:2011-05-24 12:49:35
【问题描述】:

我有一个应该显示一些图像的网络应用程序 (JSF 2.0)。

我读入this 线程并实现了一个图像servlet 来将图像发送到客户端。 问题是,我没有使用数据库,也没有使用硬盘驱动器上的固定位置,只是一个返回 byte[] 的支持 java 方法(为了讨论,假设它是动态生成的)

我想知道这个问题是否有“标准”解决方案,即如何在网页上显示动态生成的图像?

更新 我最终决定使用RichFacesMediaOutput 组件。 在我看来,标记为正确的答案在大多数情况下更稳健、更好。

【问题讨论】:

  • 图像的字节来自数据库、文件、内存还是其他任何地方都没有关系。浏览器只需要字节和内容类型。你到底面临什么问题?
  • @JB 获取 <h:graphicImage> 以显示来自支持 bean 方法返回的 byte[] 的图像。
  • 您可以为生成的图像生成一个唯一的 ID(计数器就足够了),将图像存储在地图中,由该键索引,并将该 ID 作为 URL 的参数h:graphicImage 中使用的图像 servlet。然后,servlet 将使用密钥从地图中获取图像,并提供图像。

标签: http jsf servlets


【解决方案1】:

byte[] 代码生成逻辑从支持bean 移动到图像servlet。支持 bean 用于生成 byte[] 的所有基本参数都应作为请求参数传递给图像 servlet。例如

<img src="imageservlet?param1=#{bean.param1}&param2=#{bean.param2}" />

如果出于某种原因真的不是一个选项,最好的办法是让支持 bean 将这些图像临时存储在临时磁盘或会话上,然后将其标识符作为请求参数传递servlet 可以找到它并将其写入响应正文。

【讨论】:

  • Tnx。我希望我能想到 :-) (图像生成逻辑复制)
  • 最终我决定使用richfaces mediaOutput 组件,因为我发现重新生成图像太复杂了。
  • 啊,是的,这也是一种选择。没想到。它基本上将字节流临时存储在会话中,并使用资源解析器将其流回。我相信 PrimeFaces &lt;p:media&gt; 确实是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 2012-08-18
  • 2011-11-01
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
相关资源
最近更新 更多