[Seasar-user:3643] Re: S2JSF validatorについて

O.Goto [E-MAIL ADDRESS DELETED]
2006年 5月 18日 (木) 07:44:27 JST


後藤です。

On Thu, 18 May 2006 01:56:25 +0900
"Shinpei Ohtani" <[E-MAIL ADDRESS DELETED]> wrote:

> shotです。
> 
> > > ざっと見た感じだとJSFの仕様と言えると思います。
> > > 明示的に書かれた部分はまだ見当たりませんが、他JSF実装でも同様です。
> > >
> > 確認しましたが、確かにMyfacesもS2JSFもどちらもvalueがnullもしくはlength=0だと呼ばないような実装になっていますね。
> > でもMyfacesやS2JSFのValidator実装は必ずvalueのnullチェックをしているので、emptyなら
> > Validator#validate()のvalue部の引数にnullをセットして呼んでしまっても問題ないように思えるのですけど・・・。
> 
> たしかに。
> ただ、その場合って標準のValidatorの実際のvalidationは全て
> 実行されない結果になっていまいますね。
> 
すみません。この部分がよくわからないです。
私が言っているのは

if (!empty) {
    UIComponentUtil.callValidators(context, this, convertedValue);
}

こうなっているのを、

UIComponentUtil.callValidators(context, this, (empty)?null:convertedValue);

こうしたらどうでしょう?ということです。
なので、valueがempty以外はnullが渡らないので問題ないのかなと。

> > 最悪そのような解決方法も今回に限ってはありかなと思っていますがどう思われますか?
> 
> んー、HtmlSelectManyListboxの仕様上記載されている部分が見つからないですが
> 他のJSF実装とあまりに挙動が変わってしまうのは避けたいという気持ちはあります。
> 
今回に限ってというのは、あくまで今回の件については私の方で修正(拡張)して
公式ビルドではなく私的ビルドとして対応するという意味です。

> 
> > 明確にJSFの仕様として定義されていれば仕方がないですが、そうでないのであれば
> > 「m:required="true"」のようなオプションで構わないので、公式に
> > valueがnullもしくはlength=0でもValidator#validate()をcallするというサポートをして欲しいです。
> 
> 検討してみます。
> 
問題点がないかの検討が大変かもしれませんが、検討をお願いします。


> > <select><textarea>のバリデータのほうはよろしくお願いします。
> 
> すいません、selectの件は、私の勘違いでした。
> 
> public void addChild(TagProcessor child) {
>  if(child instanceof TextProcessor
>      || getProperty(JsfConstants.ITEMS_ATTR != null)) {
>      return;
>  }
>  super.addChild(child);
> }
> 
> のif文を修正して、
> 
>  if(child instanceof TextProcessor
>      || ((!(child instanceof ValidatorProcessor)) &&
> getProperty(JsfConstants.ITEMS_ATTR != null))) {
> 
> 
> のようにするとValidatorを追加することは可能になります。
> ただしValidatorの方ではvalueが配列でくる場合の考慮や
> primitive型へのconvertなどが必要です。
> 
今日にでも試してみたいと思います。

> 
> <textarea>の問題も似たような問題のようで
> デフォルトのテキストの一部として解釈されて
> 無視されてしまうようです。
> 
> 
> いったん、ここまでお伝えしておきます。
>
どうもありがとうございます。引き続きお願いします



Seasar-user メーリングリストの案内