問題

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