Ver Mensaje Individual
  #3 (permalink)  
Antiguo 15/12/2014, 11:21
jelastic
 
Fecha de Ingreso: diciembre-2014
Ubicación: Lima
Mensajes: 68
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: JSF - FileUpload

Cita:
Iniciado por HackmanC Ver Mensaje
Hola,

Posiblemente, tendrías que guardar el nombre del archivo que se subió en alguna variable temporalmente, para que a la hora de guardar tengas esos datos disponibles.

Código:
public void handleFileUpload(FileUploadEvent event) {
		file = event.getFile();
		setVenImagen(file.getFilename());
		try {
			byData = IOUtils.toByteArray(file.getInputstream());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
En ese momento ya tienes el nombre del archivo en venImagen (posiblemente, si el navegador envió el nombre).

Ahora, como siempre en el caso de JEE y principalmente JSF, si no se tiene toda la información sobre el problema es difícil saber con exactitud que es lo que tienes que hacer después.

Por ejemplo, si el ManagedBean es de Sesión, entonces ya no tienes que hacer nada mas, si es de Request, tendrás que poner ese valor en un <p:inputHidden> para que JSF después lo recoja en venImagen al hacer el POST.

Código HTML:
Ver original
  1. <p:dialog id="fileUpload" header="#{msgs.form_imagen}" widgetVar="fileDialogWidget">
  2.     <p:fileUpload fileUploadListener="#{vendedorBean.handleFileUpload}" mode="advanced" dragDropSupport="false"  
  3. sizeLimit="20480" fileLimit="1" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" oncomplete="PF('fileDialogWidget').hide()"
  4. uploadLabel="Subir Imagen" cancelLabel="Cancelar" label="Elegir" update="imagenG" />
  5.     <p:graphicImage id="imagenG" value="#{vendedorBean.unVendedor.venImagen}" />                               
  6. </p:dialog>

Adicionalmente, esa parte es confusa, después de que cargas la imágen, actualizas imagenG pero lo ocultas, y adicionalmente tienes que observar que al usar graphicImage no se envía con el POST, porque es renderizado como un <img>, solamente sería un 'visual clue', aunque lo ocultas inmediatamente.

Saludos,
Muchas gracias HackmanC, me funciono lo de agregar esa linea, y seteo el nombre de la imagen en un campo oculto, ya pude guardar el nombre de la imagen en la bd, ahora solo me falta guardar o copiar la imagen al servidor, el cual es la carpeta del proyecto en la carpeta imgVendedor.
Y repondiendo a lo ultimo, yo presionaba un boton y me abria un dialog donde seleccionaba la imagen a guardar, luego al presionar subir, el cuadro de dialogo desaparecia para poder guardar el registro, pero le quite esa opcion para que directo se abra

Al final quedo asi, para escoger la imagen es desde una pestaña
Código HTML:
Ver original
  1. <p:tab title="#{msgs.pImagen}">
  2. <h:panelGrid columns="1" cellpadding="5" id="panelImagen" >
  3. <p:graphicImage id="imagenG2" value="/imgEmpleados/#{vendedorBean.unVendedor.venImagen}"/>
  4. <h:outputLabel value="#{msgs.form_imagen}" />
  5. <p:fileUpload fileUploadListener="#{vendedorBean.handleFileUpload}" mode="advanced" dragDropSupport="false"
  6.   sizeLimit="20480" fileLimit="1" allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
  7.      uploadLabel="Subir Imagen" cancelLabel="Cancelar" label="Elegir" update="imagenG" />
  8. <p:graphicImage id="imagen"  value="#{vendedorBean.unVendedor.venImagen}" />   
  9. <p:inputText id="imagenG"  value="#{vendedorBean.unVendedor.venImagen}" /> 
  10. </h:panelGrid>
  11. </p:tab>
mi pregunta ahora es si me das una pista de como llevar la imagen al servidor, a la carpeta imgEmpleados como se muestra en el primer <p:graphicImage
De nuevo muchas gracias.