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(IValidatable validatable)
{
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.