[Seasar-user:3644] Re: S2JSF validatorについて
O.Goto
[E-MAIL ADDRESS DELETED]
2006年 5月 18日 (木) 19:18:05 JST
後藤です。
>
> > > <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が追加できました。ありがとうございます。
valueがnullでもvalidateを呼ぶというのは、とりあえず
org.seasar.jsf.component.htmlの各クラスを継承して
public void validate(FacesContext context)
をオーバーライドして解決しました。
公式にサポートがあればそちらに乗り換えようと思います。
> >
> > <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)についてはちょっとスマートじゃないなって思います。
Seasar-user メーリングリストの案内