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