[Wicket-ja-user 596] Re: 一つのコンポーネントに複数の validator を add した場合の挙動について

Back to archive index

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




Wicket-ja-user メーリングリストの案内
Back to archive index