subir que para imagenes framework con cargar archivo jsf caching primefaces graphicimage

jsf - para - que es primefaces



PrimeFaces 6.0 no almacena imágenes en el lado del cliente (1)

Los encabezados se ven bien. Esto sugiere que algo en los parámetros de cadena de consulta cambia de solicitud a solicitud. Esto también se interpretaría como un nuevo recurso y, por lo tanto, reventaría el almacenamiento en caché aunque el URI base (el separador de cadenas de consulta de la parte anterior a la URL) sea exactamente el mismo.

Y, de hecho, PrimeFaces 6.0 ha cambiado la forma en que se genera el parámetro de cadena de consulta pfdrid . Se ha convertido en un UUID completamente aleatorio que cambia cada vez que se representa HTML <img src> . Ver también la línea 59 del código fuente PF 6.0 . En PrimeFaces 5.3, se cifró en función de la cadena de expresión EL y, por lo tanto, se garantiza que será el mismo en todas las solicitudes, siempre que la cadena de expresión EL sea la misma. Ver también la línea 53 del código fuente de PF 5.3 .

El cambio fue introducido por Cagatay sin una referencia a un ticket de problema. Por lo tanto, no está claro por qué exactamente se realizó este cambio. Pero, después de todo, ya no le ofrece al cliente la oportunidad de almacenar en caché el contenido dinámico y, por lo tanto, de hecho, disminuiría el rendimiento en ambos extremos. Esto definitivamente vale la pena un boleto de problema en PrimeFaces, así que creé uno: número 1765 .

No veo una manera limpia de resolver esto aparte de piratear el código fuente PrimeFaces. Su mejor <p:graphicImage> es reemplazar la <p:graphicImage> por una <h:graphicImage> con un "servlet simple de vainilla", o si usa la biblioteca de utilidades JSF OmniFaces , entonces la <o:graphicImage> con un bean simple. Esos enfoques ya están detallados en este Q & A relacionado: Mostrar imagen como byte [] desde la base de datos como imagen gráfica en la página JSF .

Actualización : según el número 1765 , se ha corregido para PrimeFaces 6.1.

Dado un <p:dataTable> representación de imágenes en una de las columnas.

<p:dataTable id="dataTable" var="row" value="#{bean}" lazy="true" skipChildren="true"> <p:column headerText="Image"> <p:cellEditor> <f:facet name="output"> <p:graphicImage value="#{imageBean.image}" stream="true" cache="true"> <f:param name="id" value="#{row.id}"/> <f:param name="width" value="100"/> <f:param name="height" value="100"/> </p:graphicImage> </f:facet> <f:facet name="input"> <p:graphicImage value="#{imageBean.image}" stream="true" cache="true"> <f:param name="id" value="#{row.id}"/> <f:param name="width" value="100"/> <f:param name="height" value="100"/> </p:graphicImage> <!-- <p:overlayPanel> here for file upload --> </f:facet> </p:cellEditor> </p:column> <p:column headerText="Edit"> <p:rowEditor/> </p:column> </p:dataTable>

La tabla de datos puede contener otros atributos y columnas esenciales de uso común cuando sea necesario.

Cuando esta tabla se actualiza (Ajaxically), todas las imágenes se obtienen de la base de datos (o del sistema de archivos del disco, si se utiliza) como si el navegador no las almacenara en cache aunque la cache se establece explícitamente en true (que es el valor predeterminado) ) Esto estaba funcionando bien antes con PrimeFaces 5.3 final.

La guía de migración no dice nada al respecto, pero aparentemente algo ha cambiado sobre el almacenamiento en caché <p:graphicImage> .

¿Alguna sugerencia para solucionar el problema?

En el ejemplo anterior, si la tabla contiene 5 imágenes en 5 filas, por ejemplo, la base de datos se consultará 10 veces en cada actualización hecha a la <p:dataTable> (excepto la edición de fila en línea que por defecto es la fila actual) que no debería suceder ya que obtener imágenes especialmente de una base de datos es muy costoso.

Los encabezados de solicitud / respuesta usando PrimeFaces 6.0 final (ejecutándose en el final de WildFly 10.0.0), cuando se realiza una solicitud inicial al servidor para servir una imagen (no funciona, las imágenes no se almacenan en caché).

General Request URL:https://localhost:8443/ContextRoot/javax.faces.resource/dynamiccontent.properties.xhtml?ln=primefaces&v=6.0&pfdrid=aed903cc-daba-4822-a62b-888b9a0ef2ac&pfdrt=sc&id=14&width=100&height=100&pfdrid_c=true Request Method:GET Status Code:200 OK Remote Address:127.0.0.1:8443 Response Headers Cache-Control:max-age=29030400 Connection:keep-alive Date:Sat, 23 Jul 2016 06:59:54 GMT Expires:Sun, 23 Jul 2017 06:59:54 GMT Server:WildFly/10 Transfer-Encoding:chunked X-Powered-By:Undertow/1 Request Headers Accept:image/webp,image/*,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:en-US,en;q=0.8 Connection:keep-alive Cookie:JSESSIONID=4AoRGa1IAPTB4KssnikbO9uUetcQpMupli8BkGga.om-f6b0ea3ad206; __utma=111872281.616526714.1454485589.1468749319.1468751735.4; __utmz=111872281.1454485589.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) Host:localhost:8443 Referer:https://localhost:8443/ContextRoot/admin/Brand User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 Query String Parameters ln:primefaces v:6.0 pfdrid:aed903cc-daba-4822-a62b-888b9a0ef2ac pfdrt:sc id:14 width:100 height:100 pfdrid_c:true

Los encabezados de solicitud / respuesta utilizando PrimeFaces 5.3 final (que se ejecuta en GlassFish 4.1), cuando se realiza una solicitud inicial al servidor para servir una imagen (funciona como se esperaba: las imágenes se almacenan en caché).

General Request URL:https://localhost:8181/ContextRoot/javax.faces.resource/dynamiccontent.properties.xhtml?ln=primefaces&v=5.3&pfdrid=aAPHlxcQ2lcqfvzacYoCC6iUxLU1VVFp&pfdrt=sc&id=11&width=100&height=100&pfdrid_c=true Request Method:GET Status Code:200 OK Remote Address:127.0.0.1:8181 Response Headers Cache-Control:max-age=29030400 Date:Sat, 23 Jul 2016 07:15:03 GMT Expires:Sun, 23 Jul 2017 07:15:04 GMT Pragma:No-cache Server:GlassFish Server Open Source Edition 4.1 Transfer-Encoding:chunked X-Powered-By:Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.1 Java/Oracle Corporation/1.8) Request Headers Accept:image/webp,image/*,*/*;q=0.8 Accept-Encoding:gzip, deflate, sdch Accept-Language:en-US,en;q=0.8 Connection:keep-alive Cookie:JSESSIONID=69b5070218cfe0fc6eaac2141c13; __utma=111872281.616526714.1454485589.1468749319.1468751735.4; __utmz=111872281.1454485589.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) Host:localhost:8181 Referer:https://localhost:8181/ContextRoot/admin/Brand User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 Query String Parameters ln:primefaces v:5.3 pfdrid:aAPHlxcQ2lcqfvzacYoCC6iUxLU1VVFp pfdrt:sc id:11 width:100 height:100 pfdrid_c:true