Wicket FileUploadバリデーターは実行されていませんか?
問題
FileUploadコンポーネントのカスタムバリデーターを実装しました。コードスニペットを参照してください…
FileUploadField fileUpload = new FileUploadField("fileupload",new Model<FileUpload>());
fileUpload .add(new AbstractValidator() {
protected void onValidate(IValidatable validatable) {
FileUpload fileUpload = (FileUpload) validatable.getValue();
//validate fileUpload
}
protected String resourceKey() {
return "yourErrorKey";
}
});
ただし、ユーザーがアップロードするファイルを選択せずに[送信]ボタンをクリックすると、添付されたアップロードバリデーターは無視されます。
解決策
デフォルトで
AbstractValidator
(あなたのカスタムバリデータ)はnull値
で検証されません
、ソースコードを参照してください:
File:AbstractValidator.java
** @see IValidator#validate(IValidatable)
** / public final void validate(IValidatable<T> validatable)
{
if (validatable.getValue() != null || validateOnNullValue())
{
onValidate(validatable);
}
}
これを修正するには、次のように `validateOnNullValue()`メソッドをオーバーライドしてください:
FileUploadField fileUpload = new FileUploadField("fileupload",new Model<FileUpload>());
fileUpload .add(new AbstractValidator() {
public boolean validateOnNullValue(){
return true;
}
protected void onValidate(IValidatable validatable) {
FileUpload fileUpload = (FileUpload) validatable.getValue();
}
protected String resourceKey() {
return "yourErrorKey";
}
});
ここで、ファイルが選択されず、送信ボタンがクリックされると、検証が実行されます。
リンク://タグ/ファイルアップロード/[ファイルアップロード]リンク://タグ/検証/[検証]
wicket