METODO PARA GUARDAR LA FOTO - TENIENDO EN CUENTA QUE producto.DTO es mi BEAN donde esta guardada tanto el url de donde queda la imagen y el archivo que voy a procesar.
ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
String realPath=(String) servletContext.getRealPath("");//obtenemos la dirección del //contexto donde estas trabajando, para despues generar un archivo en esa direccion
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
String txtField = ec.getRequestParameterMap().get("myform:txtField");
String filePath = ec.getRealPath(String.format("/imagenes/%s",productoDTO.getPro_foto().getFileName())); //obtenemos el nombre del archivo para proceder a guardarlo en la carpeta del contexto en //este caso /imagenes
try {
FileOutputStream fos = new FileOutputStream(filePath);
fos.write(productoDTO.getPro_foto().getContents());
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,String.format("Archivo cargado: %s ", productoDTO.getPro_foto().getFileName()),
String.format("Mensaje: %s", txtField)));
String urlfinal= filePath.replace(realPath, "");
productoDTO.setFotoUrl(urlfinal); // este metodo guarda la url donde quedo guardado el archivo en el bean productoDTO despues de esto simplemente ingresas tu bean a la base de datos y ya quedo listo para ser invocado.
____________________________________________________________________________
Formulario de ingreso
debe ser de tipo <h:form enctype="multipart/form-data">
hay que desactivar el ajax en el command button para que no tengas problemas, si este esta acompañado de un calendario vas a tener problemas con ellos por lo que te sugiero que no uses actionlistener si no mas bien el action para que puedas direccionarte a una pagina nueva despues del ingreso.
<h:outputText value="Fotografía de producto" for="foto" />
<p:fileUpload value="#{tubean.fileuploadvariable}" mode="simple" skinSimple="true"/>
La variable donde guardaras tu foto en tu bean debe de ser de tipo UlpadedFile ej:
private UploadedFile pro_foto;
recuerda sus respectivos getter y setter