2015-02-04 45 views
0

解决了从另一个控制器使用组件PrimeFaces“graphicImage”加载图像时出现的问题我现在的问题是当我将图像烧到本地地址时,我生成PrimeFaces错误,但显然不会影响我的目前的功能。录制控制台图像graphicImage Primefaces时出错?

的图像加载使得setAddAttributes方法,问题是,我注意到的是,当我去的方法来记录setSaveAttributes会发生什么,记录的顺利我的数据,但我这个例外在控制台中,我认为它必须做的工具是SessionScoped管理(但它不承认我和我管理生成一个空)。

<p:graphicImage value="#{mGraficoImagen.graphicImage}" cache="false" /> 

主管理控制器:

@ManagedBean 
@ViewScoped 
public class CMantConsultaProductosList { 

    @ManagedProperty(value="#{mGraficoImagen}") 
    private MGraficoImagen mGraficoImagen; 

    private MProductoBean mantForm; 

    @PostConstruct 
    public void setViewAtributes() { 
     MProductoBean mantForm = new MProductoBean(); 
     mantForm.setVnomImagen("fancoil-fn.png"); 
    } 


    public void setAddAttributes(ActionEvent e) { 
     StringBuilder archivoImagen = new StringBuilder(); 
     archivoImagen.append("C://images//"); 
     archivoImagen.append(mantForm.getVnombreImagen());  
     this.mGraficoImagen.setGraphicImage(new DefaultStreamedContent(new FileInputStream(archivoImagen.toString()), 
              "image/png", 
              mantForm.getVnombreImagen())); 
    } 

    public void setSaveAttributes(ActionEvent e) { 
     ......... 

     iProductoService.grabarProducto(mantBean); 
    } 

    /* get and set */ 
} 

的Util管理:

@SessionScoped 
@ManagedBean(name = "mGraficoImagen") 
public class MGraficoImagen implements Serializable { 

    private static final long serialVersionUID = 1L; 
    private StreamedContent graphicImage; 

    /** 
    * @return the graphicImage 
    */ 
    public StreamedContent getGraphicImage() { 
     return graphicImage; 
    } 

    /** 
    * @param graphicImage the graphicImage to set 
    */ 
    public void setGraphicImage(StreamedContent graphicImage) { 
     this.graphicImage = graphicImage; 
    } 

} 

错误控制台:

feb 04, 2015 5:11:44 PM org.primefaces.application.resource.StreamedContentHandler handle 
Grave: Error in streaming dynamic resource. Stream Closed 
feb 04, 2015 5:11:44 PM org.apache.catalina.core.StandardWrapperValve invoke 
Grave: Servlet.service() para servlet Faces_Servlet lanzó excepción 
java.io.IOException: java.io.IOException: Stream Closed 
    at org.primefaces.application.resource.StreamedContentHandler.handle(StreamedContentHandler.java:78) 
    at org.primefaces.application.resource.PrimeResourceHandler.handleResourceRequest(PrimeResourceHandler.java:72) 
    at javax.faces.application.ResourceHandlerWrapper.handleResourceRequest(ResourceHandlerWrapper.java:153) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:643) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:72) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.sgkyros.common.filter.EncodingFilter.doFilter(EncodingFilter.java:36) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: java.io.IOException: Stream Closed 
    at java.io.FileInputStream.readBytes(Native Method) 
    at java.io.FileInputStream.read(FileInputStream.java:243) 
    at org.primefaces.application.resource.StreamedContentHandler.handle(StreamedContentHandler.java:68) 
+0

显然,错误生成的第二个叫我管理@SessionScoped,那么你应该在那种情况下......? – Hernando

回答

3

一个InputStream只能被读取一次(然后它将被关闭,从而释放昂贵的文件资源)。但是,您似乎将其分配为会话作用域Bean的属性,这意味着它将被多次读取。

这一切都是错误的。您应该使用无状态bean,它在getter方法内部创建并保留StreamedContent实例方法本地范围。您不应该将其分配为一个bean属性,而只能在浏览器实际请求图像时创建它。您可以通过在<p:graphicImage>中嵌套的<f:param>作为请求参数传递图像标识符(例如文件名或DB PK)来使其动态化。

This was fleshed out and explained so many times before,以及其他答案:Display dynamic image from database with p:graphicImage and StreamedContent

+0

感谢您的帮助朋友,我为这一天感到高兴。 – Hernando