簡體   English   中英

如何使用Primefaces中的graphicImage從目錄加載圖像?

[英]How to load an image from a directory using graphicImage in Primefaces?

嗨,社區,我在從本地目錄加載圖像時遇到問題。 我依賴於從本地路徑下載文件,但在這種情況下,圖像顯示在本地目錄中。 項目上下文之外: C:\\\\image\\\\fancoil-pared.ice.png

<p:graphicImage value="#{cMantConsultaProductosList.graphicImage}" />

管理:

@ManagedBean
@ViewScoped
public class CMantConsultaProductosList {

    private StreamedContent graphicImage;

    @PostConstruct
    @Override
    public void setViewAtributes() {

        InputStream stream = new FileInputStream(new File("C:\\imagen\\fancoil-pared.ice.png"));  
        this.graphicImage = new DefaultStreamedContent(stream, "image/png", "fancoil-pared.ice.png");

    }

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

    /**
     * @param graphicImage the graphicImage to set
     */
    public void setGraphicImage(StreamedContent graphicImage) {
        this.graphicImage = 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)

希望你能幫我解決這個問題,謝謝。

嘗試這個:

public StreamedContent getGraphicImage() {
    return new org.primefaces.model.DefaultStreamedContent(
        new java.io.FileInputStream("C:\\imagen\\fancoil-pared.ice.png"),
        "image/png",
        "fancoil-pared.ice.png"
    );
}

正如 Oleg Tandrashko 在PF 論壇中所寫

不支持 ViewScoped bean - 內容將通過獨立於當前視圖的自己的請求接收。

謝謝朋友,我找到了解決方案,如果確實必須將負載分離到另一個管理器中,我會將我的代碼分享給社區。

@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");
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM