jsf - multiple - primefaces p:/ fileupload
Cómo poner validación en p: fileUpload (1)
Para aquellos con el mismo problema, me encontré con este problema al crear un asistente. La solución alternativa que utilicé fue almacenar el archivo cargado en un campo de mi beans viewcoped y verificar este campo cuando trato de navegar al siguiente paso.
Etiqueta de asistente:
<p:wizard id="importBankAccountLogWizard"
widgetVar="importBankAccountLogWizard"
flowListener="#{bankAccountLogImportBean.onFlowProcess}">
Etiqueta de carga de archivos (tengo el atributo de renderizado y la actualización configurados para que se muestre un mensaje y la subida se ocultará después de la primera carga):
<p:fileUpload id="bankAccountLogFileInput"
fileUploadListener="#{bankAccountLogImportBean.setBankAccountLogFile}"
rendered="#{bankAccountLogImportBean.renderFileUploadInput}"
mode="advanced"
update="importBankAccountLogWizard"
auto="true"
sizeLimit="1000000" />
Frijol:
public void setBankAccountLogFile(FileUploadEvent event)
{
importFile = event.getFile();
FacesMessage msg = new FacesMessage(Localization.g("FILE_HAS_BEEN_UPLOADED", event.getFile().getFileName()));
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public String onFlowProcess(FlowEvent event)
{
if("bankAccountLogImportInputTab".equals(event.getOldStep()) &&
importFile == null)
{
FacesMessage msg = new FacesMessage(Localization.g("UPLOAD_A_FILE_TO_CONTINUE"));
FacesContext.getCurrentInstance().addMessage(null, msg);
return event.getOldStep();
}
return event.getNewStep();
}
Junto con las parejas inputText, uno de los componentes obligatorios que tengo en la página es ap: fileUpload. Entonces, cuando hago clic en enviar, aparece <p:message>
en el componente que require=true
, pero el usuario no ingresó / seleccionó
Quiero que el cuadro rojo Required
también aparezca junto al componente de carga. Esto es lo que he intentado.
1. cuando establezco required="true"
en p: fileUpload, no ocurre realmente nada (no estoy seguro si esto es un error).
2. Puse el validator
en p:fileUpload
, a continuación están mis fuentes de validador
public void validateFileUpload(FacesContext context, UIComponent component,
Object value) throws ValidatorException {
if(value == null){
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setSummary("Error");
message.setDetail("Required");
throw new ValidatorException(message);
}
}
no sucede nada cuando hago clic en enviar, ni siquiera cuando llevo la carga, validateFileUpload
no se llamó en absoluto (no estoy seguro si esto es un error)
3. Cuando hago clic en enviar, si todo lo demás pasa, y me meto en mi método de acción, puedo verificar si el archivo es nulo o no, luego devuelvo un FacesMessage y dejo que p: growl lo recoja. Sin embargo, no me gusta así porque le da al usuario una sensación de validación múltiple.
¿Hay alguna manera de hacer una mejor validación en p: fileUpload ?