0

我正在使用相同的代码使用 p:graphicImage 显示图像,但我找不到它为什么不起作用。

我在下面使用了这段代码,因为在我的应用程序中,每个数据库条目中都没有强制要求有一个图像,所以我这样写是为了避免空 blob。

现在我将它重写为与使用 p:graphicImage 和 StreamedContent 从数据库显示动态图像中的回答完全相同,但它仍然不起作用:(

我正在使用完全相同的代码在另一个 .xhtml 中以完全相同的 p:repeat 显示图像,并且它运行良好。

在调试会话期间,我看到它调用了另一个在我正在处理的 .xhtml 中没有任何引用的 ManagedBean。



    @ManagedBean
    @ViewScoped
    public class PatenteService implements Serializable {

        private StreamedContent fotoPatente;

        public StreamedContent getFotoPatente() throws IOException {
            String inputId = "";
            Patente p;
            byte[] bytes;
            FacesContext context = FacesContext.getCurrentInstance();

            byte[] defaultBytes; // ... Retrieve deafult image to show if db resgistry has it not

            if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
                return new DefaultStreamedContent(new ByteArrayInputStream(defaultBytes));
            } else {
                inputId = context.getExternalContext().getRequestParameterMap().get("patenteId");

                if (!inputId.equals("")) {
                    p = (Patente) EManager.getInstance().createNamedQuery("Patente.findById").setParameter("id", Integer.parseInt(inputId)).getSingleResult();
                    bytes = p.getFoto();
                } else {
                    bytes = null;
                }

                if (bytes != null) {
                    return new DefaultStreamedContent(new ByteArrayInputStream(bytes));
                } else {
                    return new DefaultStreamedContent(new ByteArrayInputStream(defaultBytes));
                }
            }
        }

        public void setFotoPatente(StreamedContent fotoPatente) {
            this.fotoPatente = fotoPatente;
        }
    }

错误:

01-Sep-2017 18:13:19.716 GRAVE [http-nio-8080-exec-7] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Faces Servlet] in context with path [/prorec] threw exception
 java.io.IOException: java.lang.NullPointerException
    at org.primefaces.application.resource.StreamedContentHandler.handle(StreamedContentHandler.java:103)
    at org.primefaces.application.resource.PrimeResourceHandler.handleResourceRequest(PrimeResourceHandler.java:95)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:643)
...
Caused by: java.lang.NullPointerException
    at com.sun.faces.mgbean.BeanManager$ScopeManager$ViewScopeHandler.getFromScope(BeanManager.java:566)
    at com.sun.faces.mgbean.BeanManager$ScopeManager.getFromScope(BeanManager.java:477)
01-Sep-2017 18:13:19.868 GRAVE [http-nio-8080-exec-4] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Faces Servlet] in context with path [/prorec] threw exception
 java.io.IOException: java.lang.NullPointerException
    at org.primefaces.application.resource.StreamedContentHandler.handle(StreamedContentHandler.java:103)
    at org.primefaces.application.resource.PrimeResourceHandler.handleResourceRequest(PrimeResourceHandler.java:95)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:643)
...
Caused by: java.lang.NullPointerException
    at com.sun.faces.mgbean.BeanManager$ScopeManager$ViewScopeHandler.getFromScope(BeanManager.java:566)
    at com.sun.faces.mgbean.BeanManager$ScopeManager.getFromScope(BeanManager.java:477)
    at com.sun.faces.mgbean.BeanManager.getBeanFromScope(BeanManager.java:240)

01-Sep-2017 18:13:19.715 GRAVE [http-nio-8080-exec-7] org.primefaces.application.resource.StreamedContentHandler.handle Error in streaming dynamic resource.
 java.lang.NullPointerException
    at com.sun.faces.mgbean.BeanManager$ScopeManager$ViewScopeHandler.getFromScope(BeanManager.java:566)
    at com.sun.faces.mgbean.BeanManager$ScopeManager.getFromScope(BeanManager.java:477)
    at com.sun.faces.mgbean.BeanManager.getBeanFromScope(BeanManager.java:240)
...
01-Sep-2017 18:13:19.867 GRAVE [http-nio-8080-exec-4] org.primefaces.application.resource.StreamedContentHandler.handle Error in streaming dynamic resource.
 java.lang.NullPointerException
    at com.sun.faces.mgbean.BeanManager$ScopeManager$ViewScopeHandler.getFromScope(BeanManager.java:566)
    at com.sun.faces.mgbean.BeanManager$ScopeManager.getFromScope(BeanManager.java:477)
    at com.sun.faces.mgbean.BeanManager.getBeanFromScope(BeanManager.java:240)
4

0 回答 0