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(IValidatablevalidatable) { 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"; } });
これで、ファイルが選択されず、送信ボタンがクリックされると、検証が実行されます。