Wicket FileUpload Validator wird nicht ausgeführt?
Problem
Implementierung eines benutzerdefinierten Validators für die FileUpload-Komponente, siehe Codefragmente…
FileUploadField fileUpload = new FileUploadField("fileupload",new Model()); fileUpload .add(new AbstractValidator() { protected void onValidate(IValidatable validatable) { FileUpload fileUpload = (FileUpload) validatable.getValue(); //validate fileUpload } protected String resourceKey() { return "yourErrorKey"; } });
Wenn der Benutzer jedoch keine hochzuladende Datei ausgewählt und auf die Senden-Schaltfläche geklickt hat, wird der angehängte Upload-Validator ignoriert !?
Lösung
Standardmäßig wirdAbstractValidator (Ihr benutzerdefinierter Validator)not validate on null value, siehe Quellcode:
Datei: AbstractValidator.java
* @see IValidator#validate(IValidatable) */ public final void validate(IValidatablevalidatable) { if (validatable.getValue() != null || validateOnNullValue()) { onValidate(validatable); } }
Um dies zu beheben, überschreiben Sie einfach dievalidateOnNullValue()
-Methode wie folgt:
FileUploadField fileUpload = new FileUploadField("fileupload",new Model()); fileUpload .add(new AbstractValidator() { public boolean validateOnNullValue(){ return true; } protected void onValidate(IValidatable validatable) { FileUpload fileUpload = (FileUpload) validatable.getValue(); } protected String resourceKey() { return "yourErrorKey"; } });
Wenn jetzt keine Datei ausgewählt ist und auf die Schaltfläche "Senden" geklickt wird, wird eine Überprüfung durchgeführt.