uploadedfile simple multiple fileupload example ejemplo advanced java spring jsf primefaces multifile-uploader

java - simple - upload primefaces ejemplo



cómo mantener los archivos cargados en el formulario hasta que lo envíe usando jsf-2 y primefaces-3.4 (1)

Tengo formulario con muchos campos de entrada más el componente Primefaces para cargar varios archivos "p: fileUpload" cuando envío el formulario No puedo obtener los archivos cargados ... el bean gestionado es "RequestScoped". Entonces, ¿cómo puedo obtener los archivos cargados sin hacer que el bean manged alcance de la vista?

el método de carga

public void upload(FileUploadEvent event) { try { FacesMessage msg = new FacesMessage("Success! ", event.getFile().getFileName() + " is uploaded."); FacesContext.getCurrentInstance().addMessage(null, msg); // Do what you want with the file String thumbnail = getDestination() + event.getFile().getFileName(); int index = thumbnail.lastIndexOf(''.''); SystemFile systemFile = new SystemFile(); systemFile.setAccount(getActor().getAccount()); systemFile.setName(event.getFile().getFileName()); systemFile.setPath(getTalentPath()); systemFile.setFileType(FileUtil.checkFileType(thumbnail.substring(index + 1))); if (systemFiles == null) { systemFiles = new ArrayList<>(); } systemFiles.add(systemFile); copyFile(event.getFile().getFileName(), event.getFile().getInputstream()); } catch (IOException ex) { SystemLogger.getLogger(getClass().getSimpleName()).error(null, ex); } }

componente de las caras

<p:fileUpload label="#{TalentMessages.lbl_Select_File}" fileUploadListener="#{talentPropertyAction.upload}" mode="advanced" multiple="true" uploadLabel="#{TalentMessages.lbl_upload_File}" cancelLabel="#{TalentMessages.lbl_cancel_File}" sizeLimit="2000000" oncomplete="completeUploadFile(#{talentPropertyAction.talentId});" />

luego la función guardar

@Setter @Getter private List<SystemFile> systemFiles; try { // save something else then save the files if (systemFiles != null) { System.out.println("Not Null" + systemFiles); for (SystemFile systemFile : systemFiles) { TalentPropertyFile talentPropertyFile = new TalentPropertyFile(); talentPropertyFile.setTalentProperty(talentProperty); talentPropertyFile.setFile(systemFile); getTalentService().save(getActor().getAccount(), talentPropertyFile); } } else { System.out.println("Null"); } } catch (InvalidParameter ex) { SystemLogger.getLogger(getClass().getName()).error(null, ex); }


Entonces, ¿cómo puedo obtener los archivos cargados sin hacer que el bean manged alcance de la vista?

Simplemente almacene la información de carga inmediatamente en un lugar más permanente que como propiedad de un bean con ámbito de solicitud que se guarda al final de la solicitud-respuesta de todos modos (nota: cada carga cuenta como una solicitud HTTP por separado).

public void upload(FileUploadEvent event) { // Now, store on disk or in DB immediately. Do not assign to a property. } public void save() { // Later, during submitting the form, just access them from there. }

Si necesita alguna clave para acceder a ellos, considere almacenar la clave en el alcance de la sesión.