Jsf 如何使用Primefaces中的graphicImage从目录加载图像?

Jsf 如何使用Primefaces中的graphicImage从目录加载图像?,jsf,primefaces,Jsf,Primefaces,大家好,我在从本地目录加载图像时遇到问题。 我依赖于从本地路径下载文件,但在本例中是在本地目录中显示的图像。 项目上下文之外:C:\\image\\fancoil pared.ice.png <p:graphicImage value="#{cMantConsultaProductosList.graphicImage}" /> 错误控制台: org.primefaces.application.resource.StreamedContentHandler handle Grav

大家好,我在从本地目录加载图像时遇到问题。 我依赖于从本地路径下载文件,但在本例中是在本地目录中显示的图像。 项目上下文之外:
C:\\image\\fancoil pared.ice.png

<p:graphicImage value="#{cMantConsultaProductosList.graphicImage}" />
错误控制台:

org.primefaces.application.resource.StreamedContentHandler handle
Grave: Error in streaming dynamic resource. null
org.apache.catalina.core.StandardWrapperValve invoke
Grave: Servlet.service() para servlet Faces_Servlet lanzó excepción
java.io.IOException: java.lang.NullPointerException
    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)
希望你能帮我解决这个问题,谢谢。

试试这个:

公共流内容getGraphicImage(){ 返回新的org.primefaces.model.DefaultStreamedContent( 新的java.io.FileInputStream(“C:\\imagen\\fancoil pared.ice.png”), “图像/png”, “fancoil pared.ice.png” ); }
正如Oleg Tandrashko在


不支持ViewScope bean-内容将通过独立于当前视图的自己的请求接收。

谢谢朋友,我找到了解决方案,如果我确实必须将加载分离到另一个manage中,我会将代码共享给社区

@ManagedBean
public class CGraficoImagen {

    public StreamedContent graphicImage;

    public StreamedContent getGraphicImage() throws FileNotFoundException {
        CMantConsultaProductosList rn = getCMantConsultaProductosList();
        MProductoBean mantForm = (MProductoBean) rn.getFormMantenimiento();
        StringBuilder archivoImagen = new StringBuilder();
        archivoImagen.append(ReadParameterProperties.getRutaDirectorioImagen());
        archivoImagen.append(mantForm.getVnomImagen());     
        return new DefaultStreamedContent(new FileInputStream(archivoImagen.toString()),
                                          Constantes.MIME_IMAGE_PNG,
                                          mantForm.getVnomImagen());
    }

    public void setGraphicImage(StreamedContent graphicImage) {
        this.graphicImage = graphicImage;
    }

    private CMantConsultaProductosList getCMantConsultaProductosList() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        return (CMantConsultaProductosList)ctx.getViewRoot().getViewMap().get("cMantConsultaProductosList");
    }

}

相反,如果您打开以指定容器应提供图像/文件的位置,则只需提供一个
到该位置的相对URL即可。在当前场景中,它无法获取
StreamedContent
,因为在下一次请求下载图像时,它显然不再可用,因此出现错误:
streaming dynamic resource中的错误。空
。除此之外,您无需返回默认存根(例如
return new DefaultStreamedContent();
),这样它就可以生成一个正确的URL,当浏览器请求图像时,从该URL下载图像。我可以在该朋友中执行,我在单独的目录项目中拥有的图像…?是的,您可以。“如何”完全取决于您使用的容器。例如,如果它是GlassFish,那么可以在
GlassFish web.xml
文件中指定它,例如,
。请不要认为这是一个里程碑。一切都完全透明地依赖于您的功能需求。您似乎假设图像在HTML输出中是内联的,这是不正确的。查看其中包含了有关其实际工作方式的所有内容,“图像在HTML输出中不是“内联的”,而是单独请求的”。生成错误:Servlet.service()para Servlet Faces_Servlet lanzóexception java.io.IOException:java.lang.nullpointerexception指定路径处是否有文件?是否为可访问目录?如果您已尝试使用friend,则不是权限的主题,因为我使用相同的路径下载生成的报告…可能路径字符串为空。我刚刚更改了BySessionScope,但仍然存在相同的错误…?抱歉,它应该是注释,而不是答案。我有罪。还有更多。查看@Tiny的评论,链接到BalusC的帖子
@ManagedBean
public class CGraficoImagen {

    public StreamedContent graphicImage;

    public StreamedContent getGraphicImage() throws FileNotFoundException {
        CMantConsultaProductosList rn = getCMantConsultaProductosList();
        MProductoBean mantForm = (MProductoBean) rn.getFormMantenimiento();
        StringBuilder archivoImagen = new StringBuilder();
        archivoImagen.append(ReadParameterProperties.getRutaDirectorioImagen());
        archivoImagen.append(mantForm.getVnomImagen());     
        return new DefaultStreamedContent(new FileInputStream(archivoImagen.toString()),
                                          Constantes.MIME_IMAGE_PNG,
                                          mantForm.getVnomImagen());
    }

    public void setGraphicImage(StreamedContent graphicImage) {
        this.graphicImage = graphicImage;
    }

    private CMantConsultaProductosList getCMantConsultaProductosList() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        return (CMantConsultaProductosList)ctx.getViewRoot().getViewMap().get("cMantConsultaProductosList");
    }

}