Le validateur Wicket FileUpload n’est pas exécuté?

Le validateur FileUpload de Wicket n'est pas exécuté?

Problème

Implémentation d'un validateur personnalisé pour le composant FileUpload, voir extraits de code…

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";
    }

});

Cependant, si l'utilisateur n'a sélectionné aucun fichier à télécharger, et cliquez sur le bouton soumettre, le validateur de téléchargement joint sera ignoré!?

Solution

Par défaut,AbstractValidator (votre validateur personnalisé) seranot validate on null value, voir le code source:

Fichier: AbstractValidator.java

     * @see IValidator#validate(IValidatable)
     */
    public final void validate(IValidatable validatable)
    {
        if (validatable.getValue() != null || validateOnNullValue())
        {
            onValidate(validatable);
        }
    }

Pour résoudre ce problème, remplacez simplement la méthodevalidateOnNullValue() comme ceci:

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";
    }

});

Maintenant, quand aucun fichier n'est sélectionné et que le bouton Soumettre est cliqué, la validation sera effectuée.