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