[Seasar-user:9310] Re: [Teeda]BigDecimalConverterのtargetが効かない場合の調査方法は?

Shinpei Ohtani [E-MAIL ADDRESS DELETED]
2007年 7月 20日 (金) 17:07:36 JST


海野さん、

大谷です.

下記、拡張Converterで見直さなくてはいけない点が
あるようなので、コミッタ間で相談してみたいと思います.

それまでの対応としては、コンバータをオーバライドして、
例外を発生させたときに

 if (!isTargetCommandConvert(context, targets)) {
    return null;
}

とチェックするか、またはコンバートする前に
効いて処理をスルーさせるかしてみてください.
return nullすると、アノテーションからのConverterでは
コンバートされないというだけなので、処理として
影響はおそらく無いと思います.

宜しくお願いします.

07/07/19 に Taro Unno<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 大谷さん
>
> いつもお世話になっております。
>
> > 何がどう効かないのでしょうか?
> すみません、説明不足でしたね。状況はですね、、、
>
> aaa.htmlに、入力項目と、doのボタンが2つあります。
>
>   <input type="text" id="zzz" value=""/>
>   <input type="button" id="doAaa" value="aaa" onclick="return functionAAA();"/>
>   <input type="button" id="doBbb" value="bbb"/>
>
> aaaPageクラスに、zzzプロパティと、ボタン用のメソッドが2つあります。
>
>   @BigDecimalConverter(pattern = "###,###,###,##0",target = "doAaa")
>   @Required(target = "doAaa")
>   @ByteLength(maximum = 15,target = "doAaa")
>   private BigDecimal zzz;
>
>   public BigDecimal getZzz() {
>       return zzz;
>   }
>
>   public void setZzz(BigDecimal zzz) {
>       this.zzz = zzz;
>   }
>
>   public String doAaa(){
>       return "次の画面";
>   }
>
>   public String doBbb(){
>       return "次の画面";
>   }
>
>
> zzzは数値項目であり、たとえば「0a」と入力してdoBbbのボタンをクリックすると、
> target = "doAaa"と指定しているのにバリデーションエラーになってしまいます。
>
> デバッガで追ったところ、
> javax.faces.convert.BigDecimalConverterのgetAsObjectメソッドが
> 呼ばれ、例外が発生していました。
>
> org.seasar.teeda.extension.convert.TBigDecimalConverterのgetAsStringメソッド
> の場合は、catch節の中でtargetを見て
>
>             if (!isTargetCommandConvert(context, targets)) {
>                 return null;
>             }
>
> と無視しているので、これを真似てgetAsObjectを同様にオーバーライドして
> 単純にcatch節の処理をパクれば解決!
> ではないですよね。。。
> こうすることでどこに影響がでるのか追いきれていません。
>
> targetを効かせるにはどのようにカスタマイズすべきか
> 可能であればアドバイスをお願い致します。
>
> 海野
>
>
> 07/07/19 に Shinpei Ohtani<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > 大谷です.
> >
> > > 改めてお聞きしたいのは、
> > > ・BigDecimalConverterにtarget属性はあるのかどうか
> >
> > @BigDecimalConverterの指定先は
> > Teeda用に拡張したTBigDecimalConverterです.
> >
> > またtarget属性は現在のところ、getAsString()の場合しか
> > 有効ではありません.
> >
> > > ・あるなら、BigDecimalConverter側かこちらの設定か
> > > 問題の切り分けはどうすればよいか
> >
> > どの画面においても効かないといっているのは、
> > 何がどう効かないのでしょうか?
> > 想定と実際という感じで具体的に教えてもらえますか?
> >
> > 宜しくお願いします.
> >
> > 07/07/19 に Taro Unno<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > > 海野です。
> > > 先ほどのメールを訂正させてください。
> > >
> > > BigDecimalConverterのtarget属性の指定が
> > > どの画面においても効きません。
> > >
> > > ある画面で効いたのは、そう思い込んでいたので間違いでした。
> > > 失礼致しました。
> > >
> > > 改めてお聞きしたいのは、
> > > ・BigDecimalConverterにtarget属性はあるのかどうか
> > > ・あるなら、BigDecimalConverter側かこちらの設定か
> > > 問題の切り分けはどうすればよいか
> > > です。
> > >
> > > 以上、宜しくお願い致します。
> > >
> > >
> > >
> > > 07/07/19 に Taro Unno<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > > > 海野です。
> > > > いつもお世話になっております。
> > > >
> > > > Teeda1.0.8で開発しております。
> > > >
> > > > BigDecimalConverterのtarget属性を指定して
> > > > 複数のボタンのうち、片方にだけ効かせたいのですが、
> > > > ある画面では効き、ある画面では効かない(常にバリデーションがかかってしまう)
> > > > という現象が発生しています。
> > > >
> > > > おそらくBigDecimalConverterのせいではないと思い
> > > > htmlやPageクラスを2つの画面で比較しているのですが
> > > > 原因が見つけられず困っております。
> > > >
> > > > target属性がきちんと効いているかをどのように調査すればよいか、
> > > > ヒントをくださいませんでしょうか。
> > > >
> > > > 以上、どなたか見当のつく方、宜しくお願い致します。
> > > >
> > > _______________________________________________
> > > Seasar-user mailing list
> > > [E-MAIL ADDRESS DELETED]
> > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > >
> >
> >
> > --
> > =============================
> > Shinpei Ohtani
> > [E-MAIL ADDRESS DELETED]
> > =============================
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


-- 
=============================
Shinpei Ohtani
[E-MAIL ADDRESS DELETED]
=============================


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