[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 メーリングリストの案内