primefaces - multiple - ¿Es posible restablecer el contador de límite de archivos en p: fileUpload?
primefaces p:/ fileupload (3)
¿Ha utilizado la declaración auto="true"
? Tenga en cuenta que la configuración predeterminada en Primefaces no carga automáticamente archivos a menos que el usuario lo active.
Tenemos un p:fileUpload
para permitir que un usuario cargue una imagen de avatar. Si lo desea, debería poder cargar diferentes en rápida sucesión sin tener que volver a cargar la vista; esto reemplazaría su avatar actual cada vez. Sin embargo, si fileLimit
está configurado en 1, tiene que volver a cargar la página para poder usar el componente nuevamente. Si es más (o ilimitado (= 0)) puede cargar varios archivos a la vez, lo que tiene poco sentido. El atributo multiple
, si se configura como falso, solo restringe el diálogo de búsqueda de archivos para seleccionar un solo archivo; aún se puede abrir nuevamente para agregar más archivos a voluntad. ¿Es posible permitir subir cualquier cantidad de archivos, pero nunca más de un archivo a la vez? Estamos utilizando Primefaces 4.0.
Se me ocurrió esta solución, que no restablece el contador de límite de archivos en sí, sino que restablece el componente fileUpload para que el contador también se restablezca. De esta forma, el parámetro fileLimit
limita el número de archivos por carga y no por carga de página.
Primero definamos una función reset()
en el componente PrimeFaces FileUpload:
PrimeFaces.widget.FileUpload.prototype.reset = function() {
this.clearMessages();
return this.init(this.cfg);
}
Este método restablece el componente llamando a init()
con la configuración actual.
Entonces solo tenemos que llamar a este método en FileUploadEvent así:
public void uploadFile(FileUploadEvent event) {
RequestContext.getCurrentInstance().execute("PF(''fileUploadWidgetVar'').reset();");
}
Y ahora, cada vez que maneja los archivos cargados, el contador se reinicia porque el componente también se reinicia.
Yo tuve el mismo problema. Añadiendo update = "@ this" a la etiqueta p: fileUpload lo resolvió.