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.