[Seasar-user:19203] Re: [SAStruts] ネストしたオブジェクトにインデックスでアクセスできない

[E-MAIL ADDRESS DELETED]
2010年 1月 29日 (金) 12:04:19 JST


星です。

> 対応しました。
> https://www.seasar.org/issues/browse/SASTRUTS-125
>
> ネストしたlist[0][0]は対応してませんが、
> とりあえず今回は最もライトな対応をしました。

ソースを入れて試してみました。
バッチリ動作しました。
リリースされ次第バージョンアップしたいと思います。
ありがとうございました。


2010年1月27日11:20 Yasuo Higa <[E-MAIL ADDRESS DELETED]>:
> ひがです。
>
>> 星です。
>>
>> > 素のStrutsがDTOなら問題なく動いて、SAStrutsがDTOをMapにwrapしているために
>> > 動かないということなら、SAStrutsの問題ですね。
>> >
>> > 修正の方法を考えてみます。
>>
>> ありがとうございます。
>> 説明下手なせいでお話が長くなってすみませんでした。
>> よろしくお願い致します。
>>
> 対応しました。
> https://www.seasar.org/issues/browse/SASTRUTS-125
>
> ネストしたlist[0][0]は対応してませんが、
> とりあえず今回は最もライトな対応をしました。
>>
>> 2010年1月26日10:13 Yasuo Higa <[E-MAIL ADDRESS DELETED]>:
>> > ひがです。
>> >
>> >> 星です。
>> >>
>> >> > commons-beanutilsが"list" ではなく "list[0]"でアクセスしてくるなら、
>> >> > そっち(commons-beanutils)のほうがおかしい気がしますが、
>> >> > 素のStrutsでもMapにget("list[0]")されたら動かないのではないでしょうか。
>> >> >
>> >> > SAStrutsの処理がおかしいなら、当然修正すべきだと思いますが、
>> >> > get()に"list[0]"でアクセスされて動くようにするのはちょっと違う気がします。
>> >>
>> >>
>> >> 確かに素のStrutsもActionForm→Map→List<Dto>という階層を持ったオブジェクトに
>> >> map.list[0].propertyでアクセスするとエラーになります。
>> >> ここはSAStrutsと同じ動きです。
>> >>
>> >> ですが今回はActionForm→Dto→List<Dto>というオブジェクトへのアクセスであり、
>> >> これは素のStrutsで問題なくアクセスできます。
>> >>
>> > 素のStrutsがDTOなら問題なく動いて、SAStrutsがDTOをMapにwrapしているために
>> > 動かないということなら、SAStrutsの問題ですね。
>> >
>> > 修正の方法を考えてみます。
>> >
>> > DynaBeanを使うとcommons-beanutilsからはBeanにみえるので、
>> > より正確ですが、パフォーマンス的に重い気がするので、
>> > 場当たりですが、list[n]を解析する方法でやってみます。
>> >
>> > 議論が長くなってお手数をかけてしまいましたが、
>> > よろしくお願いします。
>> >
>> >> SAStrutsの機能リファレンスに注意書きとしてJavaBeansはMapにラップされる
>> >> と書いてあるのでSAStrutsの仕様上
>> >> ActionFormにJavaBeansを定義していてもそのプロパティは自動的にMapにラップされ
>> >> commons-beanuitlsのJavaBeansへのインデックス付きアクセス機能が利用できなくなる
>> >> というのが現在の仕様だと思います。
>> >>
>> >> 開発者がJavaBeansにアクセスしようとしたのに(意識せず)Mapにアクセスしていて
>> >> 従来通りのコーディングでは意図した通りに動かないというのが問題(?)だと思います。
>> >>
>> >> BeanWrapperがcommons-beanutilsからJavaBeansと認識されて従来通り動作するか、
>> >> BeanWrapperがJavaBeansとして振舞うかのどちらかが私としてはありがたい動きです。
>> >> でもcommons-beanutilsの仕様に依存するという形になるのならば
>> >> あまりよろしくない対応かもしれません。
>> >>
>> >>
>> >> 2010年1月25日16:43 Yasuo Higa <[E-MAIL ADDRESS DELETED]>:
>> >> > ひがです。
>> >> >
>> >> >> 星です。
>> >> >>
>> >> >> > BeanWrapper系ならdto.listの型がリストならリストのラッパーを
>> >> >> > かえるから大丈夫な気がしますけど。
>> >> >>
>> >> >> nestedでアクセスした場合、ListWrapperが正しく処理されません。
>> >> >>
>> >> >> form.dto.list[0].propertyにアクセスする場合は
>> >> >> FormWrapper→BeanWrapper→ListWrapper
>> >> >> と順繰りアクセスされるのを期待しますが、BeanWrapperがListWrapperへうまくアクセスしてくれない状態です。
>> >> >>
>> >> >> というのは、BeanWrapperのgetメソッドに渡されるキーが "list" ではなく "list[0]"となるためです。
>> >> >> BeanWrapperはフィールドに定義されたプロパティ名のみを持っているため
>> >> >> "list[0]"とアクセスしてもプロパティが見つからないというエラーになっています。
>> >> >>
>> >> > commons-beanutilsが"list" ではなく "list[0]"でアクセスしてくるなら、
>> >> > そっち(commons-beanutils)のほうがおかしい気がしますが、
>> >> > 素のStrutsでもMapにget("list[0]")されたら動かないのではないでしょうか。
>> >> >
>> >> > SAStrutsの処理がおかしいなら、当然修正すべきだと思いますが、
>> >> > get()に"list[0]"でアクセスされて動くようにするのはちょっと違う気がします。
>> >> --
>> >> [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
>



-- 
--
[E-MAIL ADDRESS DELETED]


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