PrimeFaces graphicImage不显示由backing bean提供的JPEG图像 [英] PrimeFaces graphicImage not displaying JPEG image supplied by backing bean

查看:116
本文介绍了PrimeFaces graphicImage不显示由backing bean提供的JPEG图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用PrimeFaces(2.2.1)graphicImage标签显示一个简单的JPEG图像,如下所示.xhtml片段显示:

 < F:元数据> 
< f:viewParam name =contractoridvalue =#{logosBean.contractorID}/>
< / f:元数据>
< body>
< ui:define name =userContent>
< f:event type =preRenderViewlistener =#{logosBean.initialize}/>
< h:form>
< / h:表格>
< / ui:define>
< / ui:composition>
< / body>

该图像是从preRenderView事件中的DB2数据库中的BLOB列检索的,并存储在一个字节[],直到调用包含以下代码的logosBean.getCompanyLogo()为止:

  return((companyLogo != null)?new DefaultStreamedContent(new ByteArrayInputStream(companyLogo)):null); 

然而,所有显示的都是图片的替代文字。发生的第一件奇怪事情是,在页面刷新的preRenderView事件之后,getCompanyLogo()会被调用4次。但是,在调试器中,companyLogo包含正确的数据,并且在每次调用时都会向PrimeFaces返回一个非空的StreamedContent对象。我在Glassfish的server.log中没有发现错误。当我将它作为文件引用而不是从数据库中提取时,相同的图像会显示在页面上。我不知道发生了什么问题,也不知道如何更深入地调试它。任何提示都将不胜感激。

解决方案

我发现将ConversionsScoped的支持bean更改为SessionScoped可解决此问题,在下面的分析中肯定会出错。



我决定看一下生成的页面,看它是否可以提供任何线索,并且在那里有< ; IMG>标记为我的图片:

 < img id =j_idt29:j_idt30
src =/ EnergySolutionsProfile / faces /MaintainLogos.xhtml?cid=1&amp;primefacesDynamicContent=logosBean.companyLogo
alt =No Company Logo Set/>

在Firefox的Source显示窗口中,它为src属性创建了一个链接,所以我点击它并得到另一个包含以下错误的源代码页:

  org.jboss.weld.context.ContextNotActiveException:WELD-001303没有活动的上下文对于作用域类型javax.enterprise.context.ConversationScoped 
,位于org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:664)
位于org.jboss.weld.bean.proxy.ContextBeanInstance。 getInstance(ContextBeanInstance.java:77)
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87)
at com.MSCA.ESP.WebApp.org $ jboss $焊缝$豆网络ManagedBean-class_com $ MSCA $ ESP $ Web应用程序$ LogosBean _ $$ _ WeldClientProxy.getCompanyLogo(ORG $ JBoss的$焊接$豆网络ManagedBean-class_com $ MSCA $ ESP $ Web应用程序$ LogosBean _ $$ _ WeldClientProxy.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess orImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
在javax.el.BeanELResolver.getValue(BeanELResolver.java:302)
在com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
在com.sun.faces.el .DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at com.sun.el.parser.AstValue.getValue(AstValue.java:116)
at com.sun.el.parser.AstValue.getValue (AstValue.java:163)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:55 )
at org.primefaces.application.DynamicContentStreamer.streamDynamicContent(DynamicContentStreamer.java:66)
at org.primefaces.application.DynamicContentStreamer.beforePhase(DynamicContentStreamer.java:57)
at com。 sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228)
在com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99)
在com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
在com.sun .faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
位于javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
位于org.apache.catalina.core.StandardWrapper .Service(StandardWrapper.java:1539)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain .java:217)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
在org.apache.catalina.core.Stand ardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke( StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java: 91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
在com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com .sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly。 DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain。
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:532)
at com.sun .grizzly.util.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:513)$ b $ at java.lang.Thread.run(Thread.java:662)

无论我是否真正开始对话,我都会得到相同的错误(例如在preRenderView事件中)。我不知道PrimeFaces的graphicImage和Glassfish,PF和Conversation范围之间或其他地方是否存在某种不兼容性。我想向某人提交错误报告,但我甚至不确定org.jboss类属于谁。我想我会从PrimeFaces论坛的评论开始

I am trying to display a simple JPEG image using PrimeFaces (2.2.1) graphicImage tag as the following .xhtml segment shows:

<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>

The image is retrieved from a BLOB column in a DB2 database in the preRenderView event and stored in a byte[] until such time as logosBean.getCompanyLogo(), which consists of the following code, is invoked:

return( (companyLogo != null) ? new DefaultStreamedContent( new ByteArrayInputStream( companyLogo ) ) : null );

However, all that gets displayed is the image's alternate text. The first odd thing that is happening is that getCompanyLogo() is invoked 4 times after the preRenderView event for one refresh of the page. In the debugger, though, companyLogo contains the correct data and is returning a non-null StreamedContent object to PrimeFaces on each invocation. I am getting no errors in Glassfish's server.log. The same image displays on the page fine when I reference it as a file rather than pull it from the database. I have no idea what is going wrong nor do I have any idea how to debug it deeper. Any hints would be greatly appreciated.

解决方案

I found that changing my backing bean from ConversationScoped to SessionScoped works around the problem, but there's definitely something wrong somewhere as the following analysis shows.

I decided to take a look at the generated page to see if it might provide any clues, and in there was the <img> tag for my image:

<img id="j_idt29:j_idt30"
src="/EnergySolutionsProfile/faces/MaintainLogos.xhtml?cid=1&amp;primefacesDynamicContent=logosBean.companyLogo"
alt="No Company Logo Set" />

In Firefox's Source display window it created a link for the src attribute, so I clicked on it and got another page of source that included the following error:

org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.ConversationScoped
at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:664)
at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77)
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87)
at com.MSCA.ESP.WebApp.org$jboss$weld$bean-web-ManagedBean-class_com$MSCA$ESP$WebApp$LogosBean_$$_WeldClientProxy.getCompanyLogo(org$jboss$weld$bean-web-ManagedBean-class_com$MSCA$ESP$WebApp$LogosBean_$$_WeldClientProxy.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:302)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at com.sun.el.parser.AstValue.getValue(AstValue.java:116)
at com.sun.el.parser.AstValue.getValue(AstValue.java:163)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:55)
at org.primefaces.application.DynamicContentStreamer.streamDynamicContent(DynamicContentStreamer.java:66)
at org.primefaces.application.DynamicContentStreamer.beforePhase(DynamicContentStreamer.java:57)
at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:662)

I get the same error whether or not I actually begin a conversation (e.g. in the preRenderView event). I don't know if there's some kind of incompatibility between PrimeFaces' graphicImage and Glassfish, between PF and Conversation scopes, or somewhere else. I'd like to submit an error report to someone, but I'm not even sure who the org.jboss classes belong to. I guess I will start with a comment in the PrimeFaces forum.

这篇关于PrimeFaces graphicImage不显示由backing bean提供的JPEG图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆