Wicket FileUploadバリデーターは実行されませんか?
問題
FileUploadコンポーネントのカスタムバリデータを実装しました。コードスニペットをご覧ください…
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";
}
});
ただし、ユーザーがアップロードするファイルを選択せずに送信ボタンをクリックした場合、添付されたアップロード検証ツールは無視されます!?
溶液
デフォルトでは、AbstractValidator(カスタムバリデーター)はnot validate on null valueになります。ソースコードを参照してください:
ファイル:AbstractValidator.java
* @see IValidator#validate(IValidatable)
*/
public final void validate(IValidatable validatable)
{
if (validatable.getValue() != null || validateOnNullValue())
{
onValidate(validatable);
}
}
これを修正するには、次のようにvalidateOnNullValue()メソッドをオーバーライドします。
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";
}
});
これで、ファイルが選択されず、送信ボタンがクリックされると、検証が実行されます。