【发布时间】:2011-12-25 10:22:26
【问题描述】:
我正在尝试使用 PrimeFaces (2.2.1) graphicsImage 标记显示一个简单的 JPEG 图像,如下 .xhtml 段所示:
<f:metadata>
<f:viewParam name="contractorid" value="#{logosBean.contractorID}" />
</f:metadata>
<body>
<ui:composition template="./templates/userLayout.xhtml">
<ui:define name="userContent">
<f:event type="preRenderView" listener="#{logosBean.initialize}" />
<h:form>
<p:graphicImage value="#{logosBean.companyLogo}" alt="No Company Logo Set" />
</h:form>
</ui:define>
</ui:composition>
</body>
在 preRenderView 事件中从 DB2 数据库中的 BLOB 列检索图像并存储在 byte[] 中,直到调用由以下代码组成的 logosBean.getCompanyLogo():
return( (companyLogo != null) ? new DefaultStreamedContent( new ByteArrayInputStream( companyLogo ) ) : null );
但是,显示的只是图像的替代文本。发生的第一件奇怪的事情是 getCompanyLogo() 在 preRenderView 事件之后被调用 4 次以刷新页面。但是,在调试器中,companyLogo 包含正确的数据,并在每次调用时向 PrimeFaces 返回一个非空 StreamedContent 对象。 Glassfish 的 server.log 中没有任何错误。当我将其作为文件引用而不是从数据库中提取时,相同的图像会很好地显示在页面上。我不知道出了什么问题,也不知道如何更深入地调试它。任何提示将不胜感激。
【问题讨论】:
-
我找到了似乎是真正问题的线索以及解决方法,但 stackoverflow.com 让我等到一天结束才发布它。
标签: jsf glassfish primefaces blob glassfish-3