【问题标题】:JSF 2 - generating images from binary dataJSF 2 - 从二进制数据生成图像
【发布时间】:2011-08-29 06:46:08
【问题描述】:

我在我的 JSF 2 项目中使用 Primefaces 3.0.M2 作为主要组件库。到目前为止,它工作得很好,但 graphicsImage 组件似乎已损坏。它只渲染一次图像 - 我加载给定页面,显示图像,当我重新加载同一页面时,图像(流媒体内容)消失了,在我的日志中我只收到一个

29.08.2011 08:39:03 org.primefaces.application.PrimeResourceHandler handleResourceRequest
SCHWERWIEGEND: Error in streaming dynamic resource.

还有其他合适/好的/最好的方式来显示来自二进制数据流的图像吗?还是我必须创建一个 servlet 来为我处理这个问题?

我正在使用

  • Mojarra 2.1.2
  • Primefaces 3.0.M2
  • 春季 3.0.5

【问题讨论】:

    标签: java jsf-2 primefaces


    【解决方案1】:

    这听起来像是托管 Bean 的 StreamedContent 属性被重置回 null,因为 bean 正在被销毁并在回发时重新创建。

    这可能是因为您的 bean 是 @RequestScoped

    尝试将您的 bean 设置为 @ViewScoped@SessionScoped,以便它在回发后仍然存在。

    【讨论】:

    • 我不确定 PrimeFaces 的 StreamedContent 是如何工作的,我没有机会玩弄它,但例如 InputStream 不是 Serializable,因此会迷路序列化。我认为这是整个问题的根本原因。也许您希望它改为byte[]
    • StreamedContent 需要一个 InputStream。据我了解,创建的 StreamedContent 应该存储在会话中。我发现重新加载页面后图像的 URL 有所不同。
    【解决方案2】:

    您可能会发现这个 stackoverflow 线程很有用 - How to use p:graphicImage with StreamedContent within p:dataTable?

    但基本上,关于 p:graphicimage 似乎至少有两件事是你必须知道的(我不知道为什么 primefaces 官方文档和演示对此只字未提)

    1. 您的图像在 RENDER_RESPONSE 阶段不可用
    2. @ViewScoped 不起作用

    这是对我有用的代码

    [1] 托管 bean 是会话范围的,bean 属性不是 DefaultStreamedContent(不可序列化)而是 byte[]。

    @ManagedBean
    @SessionScoped
    public class ImageController implements Serializable{
    
        private byte[]      img;
    

    [2]动态图像getter方法是

    public DefaultStreamedContent getContent(){
        FacesContext context = FacesContext.getCurrentInstance();
        if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
            return new DefaultStreamedContent();
        }else{
            if (img == null){
                return new DefaultStreamedContent();
            }else{
                return new DefaultStreamedContent(new ByteArrayInputStream(img), "image/png");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 2018-05-20
      • 1970-01-01
      相关资源
      最近更新 更多