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

newta [E-MAIL ADDRESS DELETED]
2010年 1月 30日 (土) 15:54:48 JST


newta(にゅーた)です。

list[0].aaaと言った値を取得する場合に
aaaがpublicフィールドだった場合、読み取りできないようでしたので
少し修正しました、
ついでにlist[0][0]などのへの対応もしました。

ソースは昨日コミットしたので
もしかしたら確認ソースに入ってしまっていたかもしれませんが、
確認していただいてよろしいでしょうか?

よろしくお願いします。


2010年1月29日12:04 星 <[E-MAIL ADDRESS DELETED]>:
> 星です。
>
>> 対応しました。
>> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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