Visualice las imágenes de la base de datos utilizando ContentFlow (coverflow), error IllegalStateException

Actualmente estoy usando un flujo de cobertura de imágenes de terceros (http://www.jacksasylum.eu/ContentFlow/) para mostrar las imágenes que se están guardando en una base de datos. Estoy usando Java, JPA y Richfaces para esto. He configurado un servlet de imagen para manejar la visualización de la imagen. Tengo una configuración de datos de Richfaces y solo quiero mostrar imágenes de registros seleccionados dentro del flujo de cobertura. Esta funcionalidad está en su lugar para hacer esto. Tengo un botón de comando para representar el flujo de cobertura de la imagen dentro de un panel de salida. Mis imágenes se muestran correctamente en la página sin errores antes de implementar el coverflow. Por lo tanto, sé que mi funcionalidad subyacente funciona como se desea. El problema es que cuando implemento el flujo de cobertura colocando etiquetas div específicas alrededor de mis etiquetas img como se indica, obtengo el siguiente error:

Error Rendering View[/index.xhtml]: java.lang.IllegalStateException: Cannot create a session after the response has been committed
at org.apache.catalina.connector.Request.doGetSession(Request.java:2636) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.connector.Request.getSession(Request.java:2375) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:841) [jbossweb-7.0.10.Final.jar:]
at com.sun.faces.context.ExternalContextImpl.getSession(ExternalContextImpl.java:155) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at javax.faces.context.ExternalContextWrapper.getSession(ExternalContextWrapper.java:396) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at com.sun.faces.renderkit.ServerSideStateHelper.writeState(ServerSideStateHelper.java:175) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:122) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:166) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:419) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.10.Final.jar:]
at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.10.Final.jar:]
at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.0.Final.jar:7.1.0.Final]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:154) [jboss-as-web-7.1.0.Final.jar:7.1.0.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.10.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.10.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.10.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.10.Final.jar:]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_32]

Aquí está algo de mi código:

ImgServlet.java

 /**
   * Servlet implementation class ImgServlet
   */
    @WebServlet(name = "ImgServlet", urlPatterns = {"/ImgServlet/*"})
    public class ImgServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Inject
    Screenshot model;
        @PersistenceUnit(unitName = "primary")
    private EntityManagerFactory emf; 

    public ImgServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter writer = response.getWriter();
        ServletContext sc = getServletContext();

        String classString = "Screenshot";
        String idString = request.getParameter("id");

        if (classString == null || classString.isEmpty() || idString == null || idString.isEmpty()) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
            return;
        }

        Long id = Long.parseLong(idString.trim());
        PhotoInterface entry = null;

        EntityManager em = null;

        try {
            em = emf.createEntityManager();
        } catch (Throwable e1) {
            e1.printStackTrace();
        } 

        try {
            entry = em.find(Screenshot.class, id);
        } catch (Exception ex) {
            //Log.log(ex.getMessage());
        }

        if (entry == null) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
            return;
        }

        ServletOutputStream out = null;

        try {
            response.reset();

             // It works ok without setting any of these...
            //response.setContentType(image.getContentType());
            //response.setHeader("Content-Length", String.valueOf(image.getLength()));
            //response.setHeader("Content-Disposition", "inline; filename=\"" + image.getName() + "\"");
            response.setContentType("image/png");

            out = response.getOutputStream();

            if (entry.getPng() != null && entry.getPng().length != 0) {
                out.write(entry.getPng());
                getServletContext().log("Found png!!");
            }
            else 
                getServletContext().log("png is NULL!!!");
        } catch (IOException e) {
            getServletContext().log("Error finding png!!!");
        } finally {
            close(out);
        }

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    private static void close(Closeable resource) {
        if (resource != null) {
            try {
                resource.close();
            } catch (IOException e) {
                // Do your thing with the exception. Print it, log it or mail it.
            }
        }
    }
}

contentflow_src.js - javascript utilizado para representar el flujo de cobertura y un ejemplo se puede ver en

http://www.jacksasylum.eu/ContentFlow/download.php

Esto funciona actualmente en mi xhtml (sin etiquetas ContentFlow Div dentro del panel de salida):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:f="http://java.sun.com/jsf/core"  
    xmlns:p="http://primefaces.org/ui">  

    <ui:composition 
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:rich="http://richfaces.org/rich"
                xmlns:my="http://java.sun.com/jsf/composite/components"
                xmlns:s="http://jboss.com/products/seam/taglib"
                >
    <h:head>  
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <h:outputStylesheet name="screen.css" library="css"/> 
        <script language="JavaScript" type="text/javascript" src="contentflow_src.js" load="slideshow lightbox">
        </script>
    </h:head>  
    <h:body>
       <h:form id="form"> 
        <p:dataTable var="scrshot">
          ....................
          ....................
         </p:dataTable>

          <p:commandButton id="viewDetails" value="View Selected Screenshots" icon="ui-icon-search"  
                             update=":form:imgBlock"/> 

          <p:outputPanel id="imgBlock" layout="block"> 
             <a4j:repeat var="img" value="#{screenshotListProducer.selectedScreenshots}">
               <img src="ImgServlet?id=#{img.id}" title="#{img.time}"/>
             </a4j:repeat>
          </p:outputPanel>
         </h:form>                            
    </h:body> 
    </ui:composition> 
</html>

Esto no funciona en mi xhtml (después de implementar ContentFlow ajustándolo con las etiquetas Div dentro del panel de salida) y desencadena el error:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:f="http://java.sun.com/jsf/core"  
    xmlns:p="http://primefaces.org/ui">  

    <ui:composition 
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:a4j="http://richfaces.org/a4j"
                xmlns:rich="http://richfaces.org/rich"
                xmlns:my="http://java.sun.com/jsf/composite/components"
                xmlns:s="http://jboss.com/products/seam/taglib"
                >
    <h:head>  
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <h:outputStylesheet name="screen.css" library="css"/> 
        <script language="JavaScript" type="text/javascript" src="contentflow_src.js" load="slideshow lightbox">
        </script>
    </h:head>  
    <h:body>
       <h:form id="form"> 
        <p:dataTable var="scrshot">
          ....................
          ....................
         </p:dataTable>

          <p:commandButton id="viewDetails" value="View Selected Screenshots" icon="ui-icon-search"  
                             update=":form:imgBlock"/> 

          <p:outputPanel id="imgBlock" layout="block"> 
           <div class="ContentFlow" id="ContentFlow">
            <div class="flow">
             <a4j:repeat var="img" value="#{screenshotListProducer.selectedScreenshots}">
              <div class="item">
               <img src="ImgServlet?id=#{img.id}" title="#{img.time}"/>
              </div>
             </a4j:repeat>
            </div>
           </div>
          </p:outputPanel>
         </h:form>                            
    </h:body> 
    </ui:composition> 
</html>

Lo siento por todo el código. ¡Si alguien puede ayudar será muy apreciado! He estado en círculos durante días tratando de que ContentFlow juegue bien con mi sesión.

Respuestas a la pregunta(0)

Su respuesta a la pregunta