Wicket FileUploadバリデーターは実行されていませんか?

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";
    }

});

これで、ファイルが選択されず、送信ボタンがクリックされると、検証が実行されます。