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

Shinpei Ohtani [E-MAIL ADDRESS DELETED]
2006年 5月 18日 (木) 23:07:17 JST


shotです。
返事おくれてすいません。

06/05/18 に O.Goto<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 後藤です。
>
> >
> > > > <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などが必要です。
> > >
> > 今日にでも試してみたいと思います。
> >
> <select>の方はこの修正でValidatorが追加できました。ありがとうございます。

それはよかったです^^

> > > <textarea>の問題も似たような問題のようで
> > > デフォルトのテキストの一部として解釈されて
> > > 無視されてしまうようです。
> > >
> で、<textarea>も同じように修正してみたのですが、こちらはダメでした。
> HTMLとしてパースしているので、<textarea>の子要素はPCDATAとして処理され、
> TagProcessorHandler#startElement()ではなくTagProcessorHandler#characters()で処理されてしまうのですね。
>
> 私が思いつく解決方法としては、
>
> 1)<textarea>の子要素をPCDATAに加えて<span>も追加した改変DTDでパースする。
> 2)TagProcessorHandler#characters()でpeekProcessor()の戻りがInputTextareaProcessorの時に
> textがバリデータかどうかチェックしてバリデータならValidatorProcessorを作成してaddChild()する。
>
> 1)についてはCyberNeko HTML Parserについてまだわかっていないので、できるかどうかわかりません。
> CyberNeko HTML Parserを使わなければできると思いますが。
> できるとすれば簡単な解決方法だと思います。
>
> 2)についてはちょっとスマートじゃないなって思います。

1)、2)のやり方の前に、ちょっと素朴な質問を聞かせてください。
ValidatorChainを使った以下のようなやり方ではまずいのでしょうか?

<textarea id="userName"
m:label = "User Name"
m:value="#{validatorDto.userName}"
m:validator="#{hogeValidator.validate}" m:required="true">
</textarea>



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