Wicket FileUpload-Validator wird nicht ausgeführt?

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.