jsf 2 - oftalmologia - ¿Cómo puedo mostrar una foto dinámica en la página de detalles del usuario
terapia fotodinamica oftalmologia (3)
Posible duplicado:
Mostrar la imagen de la base de datos con p: graphicImage
Quiero mostrar una foto de su url almacenada en la base de datos, así que utilicé lo siguiente
<h:panelGrid columns="1">
<p:graphicImage value="#{userController.photo}"/>
</h:panelGrid>
y el atributo de la foto es una cadena de url que apunta a la ubicación de la foto
public String getPhoto() {
String path = new File("").getAbsolutePath();
ph =ejbPhoto.find(current.getIdPhoto());
System.out.println("+PHOTO +++++++++++++++"+path+"//"+ph.getPhotoName());
return path+"//"+ph.getPhotoName();
}
el system.out.println muestra la ruta correcta de la imagen, pero en la página de visualización no se muestra la foto, ¿Alguna idea?
Mis dos centavos. El uso de URL de imagen puede exponer la estructura de su directorio a cualquier persona que tenga firebug
o algo similar. Por lo tanto, pueden ocurrir varias cosas malas. No soy partidario de utilizar rutas de archivos relacionadas con el sistema de archivos de mi servidor de aplicaciones si puedo evitarlo. Si su implementación lo admite, le aconsejaría que sirva las imágenes de la base de datos usando Primefaces '' DynaImage
Primero, el new File("").getAbsolutePath()
devuelve el directorio de trabajo actual. Es decir, el directorio del sistema de archivos del disco local que se abrió en el momento en que se dio el comando para iniciar el servidor. No se garantiza que este valor sea el mismo cada vez que se inicie el servidor. Depende de la forma en que se inicia el servidor. Por ejemplo, en un IDE, o en una consola de comandos, o por un servicio, etc.
No debe permitir que su lógica empresarial dependa de tal inconsistencia ambiental.
Segundo, el HTML generado <img src>
tiene que apuntar a una URL (una ruta HTTP), no a una ruta del sistema de archivos de disco local. Es el navegador web que tiene que descargar la imagen individualmente mediante una URL como http://example.com/contextname/images/foo.png
(y, por lo tanto, no el servidor web que tiene que incorporarlos automágicamente en el código HTML, más o menos) . Su enfoque de código actual solo funcionaría si el new File("")
apunta a la carpeta de contenido web pública de la aplicación web implementada, lo cual es muy, muy poco probable.
Debes asegurarte de que <img src>
apunta a una URL HTTP válida, exactamente la que puedes copiar en la barra de direcciones del webbrowser.
No está claro por qué lo diseñó así y cuáles son sus restricciones comerciales, por lo que no es posible publicar una respuesta adecuada sobre cómo resolverlo correctamente. Así que aquí hay varios enlaces que muestran (pequeñas) formas diferentes de resolver esto:
- Cómo mostrar la imagen de la ruta del servidor a PrimeFaces p: graphicImage?
- La forma más simple de servir datos estáticos desde fuera del servidor de aplicaciones en una aplicación web Java
- Cargue imágenes desde fuera de la carpeta webapps / webcontext / deploy con la etiqueta <h: graphicImage> o <img>
la solución es simple y la ruta de la foto está debajo de la carpeta web del proyecto netbeans (Proyecto / construcción / web / foto)
<h:panelGrid columns="1" width="50%" >
<p:graphicImage value="/photo/#{userController.photo}"/>
</h:panelGrid>
y en el método de obtención de fotografías pongo:
public String getPhoto() {
ph =ejbPhoto.find(current.getIdPhoto());
if(ph==null) return "noPhoto.png";
System.out.println(ph.getPhotoName());
current=null;
return ph.getPhotoName();
}
y el nombre de la foto incluye la extensión.