[Seasar-user:15867] Re: [S2BeansUtil] converter() でプロパティを指定しない場合の動作
Yasuo Higa
[E-MAIL ADDRESS DELETED]
2008年 9月 29日 (月) 15:56:24 JST
ひがです。
> 加納ともうします
>
> 以下のように S2BeansUtil でコピー先がMapの場合のみ、
> Map dst = Beans.copy(src, dst)
> // MyConverter#isTarget() は String で true
> .convert(new MyConverter())
> .execute();
>
> 変換元のプロパティが String の場合にのみ、 MyConverterが適用されません。
> MyConverter#isTarget() も呼び出されていません。
>
> コピー先が JavaBeans の場合は期待通り、Stringな変換元プロパティ全てに
> 適用されます。
>
> ソースを視たところ、org.seasar.framework.beans.util.AbstractCopy の
> copyBeanToMap(), copyMapToMap() で convertValue() を呼び出している
> とこれで destPropertyClass を null としていることが原因の様ですが、
> (String.class なら期待通りの動作をすると思うのですが)
> これは仕様でしょうか?
>
Converter.isTarget()は、Stringではない相手側の型を
指定します。
例えば、DateConverterの場合は、java.util.Dateになります。
StringとStringの変換はできません。
Beans.copy()のsrcのプロパティがString以外の場合は、
destがMapでもきちんと変換できます。
srcのプロパティがStringの場合は、destがMapだと
destの型がわからないため、型から適切なConverterを
選ぶことができません。
このような場合は、明示的にConverterの対象となるプロパティ名を
convertの2番め以降の引数で指定してください。
よろしくお願いします。
Seasar-user メーリングリストの案内