Masaya seko
masay****@nifty*****
2011年 11月 21日 (月) 23:56:08 JST
矢野様 世古です。回答ありがとうございます。 Wicket本の記述が誤っていたのですね。 #私はレビュアーの一人だったので、苦笑いな感じ 後続のバリデータも実行する方法、ありがとうございます。 参考にさせて頂きます。 標準で後続のバリデータを実行する方法が無いのは、少々不思議です。 ニッチな要求だとは思いますが、たまにありそうな要求ですのに。 以上 ----- Original Message ----- >From: Tsutomu YANO <t_yano****@me*****> >Date: Mon, 21 Nov 2011 23:26:59 +0900 >To: wicke****@lists***** >Subject: [Wicket-ja-user 595] Re: > 一つのコンポーネントに複数の validator を add した場合の挙動について > > >矢野です。 >私の書いた文章なので、調べてみました。 > >結論から書くと、私の文章が間違ってます。すみません。 > >一応、本のベースとなっている1.4-rc2と、1.3.1まで見てみましたが、validateValid ators()の実装は変わっておらず、この実装であるかぎり、最初のバリデータでエラー になると、そこでチェックは打ち切られます。 > >> for (i = 0; i < size; i++) >> { >> validator = validators_get(i); >> >> if (isNull == false || validator instanceof INullAcceptingValidator<?>) >> { >> validator.validate(validatable); >> } >> if (!isValid()) >> { >> break; >> } >> } > >FormComponent#validateValidators()のこの部分で、ループ末尾で毎回isValid()を呼 び出しており、このisValidは、コンポーネントにエラーメッセージが登録されている と偽になりますので、バリデータがエラーを登録した直後に break します。 > >> 1.Wicketの仕様が途中で変わったのでしょうか。(私が使用したバージョンは1.4.19 ) >> それとも何か私が勘違いしているのでしょうか。 > >いいえ。Wicketの仕様は変わっておらず、私の文章が誤っています。 >できればどこかに記載しておきたいですが、エラッタなどが載らない感じなので、自 前でどこかに載せるしかないですね… > >> 2.コンポーネントに登録されたバリデータについて、後続のバリデータも実行した い場 >> 合はどのようにするのが良いでしょうか。 >> 「複数のチェックを行ないたい場合は、複数のチェックを行う単一のバリデータを 作 >> 成する」となるのでしょうか。 > > >これを実現するための実装は標準にはないようですので、CompoundValidatorのソース を複写するなどして、validateメソッドの実装を、全バリデータを確実にループするよ うに書き換えれば、汎用的に利用できる全チェックバリデータにできそうです。 > >このような感じで、元のソースでwhile文についていた「 && validatable.isValid() 」を外すだけで、大丈夫かと思います。 > > public final void validate(IValidatable<T> validatable) > { > Iterator<IValidator<T>> it = validators.iterator(); > while (it.hasNext()) > { > it.next().validate(validatable); > } > } > >以上です。 > >--------------------------------------------------- >矢野 勉(やの つとむ) >電子メール: t_yano****@me***** >--------------------------------------------------- > > >----- inline ----- >_______________________________________________ >Wicket-ja-user mailing list >Wicke****@lists***** >http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user