[Seasar-user:17569] Re: SAStruts でNestedのiterateタグの使用

Nishiwaki Kiyoyuki [E-MAIL ADDRESS DELETED]
2009年 6月 1日 (月) 15:51:32 JST


ひがさま

西腋です
早速の対応、ありがとうございます。


> よろしければ試していただけるでしょうか。
> 個人的には、制御系のタグは、Strutsではなく、
> JSTLの方を使ったほうがいいと思ってますが。

SP6で変更されたActionFormWrapper、WrapperUtil、S2ModuleConfigを適用してデ
バッグをしてみました。
結果としては例外が発生しています。

org.seasar.framework.beans.PropertyNotFoundRuntimeException: [ESSR0065]クラ
ス(test.dto.sample.TestDto41)のプロパティ(testDto42Array[0])が見つかりません
	at
org.seasar.framework.beans.impl.BeanDescImpl.getPropertyDesc(BeanDescImpl.ja
va:137)
	at org.seasar.struts.action.BeanWrapper.get(BeanWrapper.java:58)
	at
org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUti
lsBean.java:660)
	at
org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean
.java:715)
	at
org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:29
0)
	at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:951)
	at
org.apache.struts.taglib.TagUtils.computeParameters(TagUtils.java:188)
	at
org.apache.struts.taglib.html.LinkTag.calculateURL(LinkTag.java:440)
	at
org.apache.struts.taglib.html.LinkTag.doStartTag(LinkTag.java:341)
	at
org.apache.struts.taglib.nested.html.NestedLinkTag.doStartTag(NestedLinkTag.
java:74)

WrapperUtilの56行目にDynaBeanの派生であれば、
ラッパーをせずにそのまま返してもらえるロジックを追加していただいたのですが
デバッグで見てみますと、Form内の配列DTOの特定インデックスを取得する際の
convertメソッドの引数は
DynaBeanの実装でラッパーされておらず、素のDTOのクラスのままでしたのでした。
ですので、BeanWrapperでラッパーされて返り、上記の例外が発生していました。

Form内の配列DTOの特定インデックスを取得する際、WrapperUtilのconvertメソッド
が呼ばれる前に
ActionFormWrapper#get(String, int) (今回の修正で実装を追加していただいたと
ころ)
の113行目で配列のプロパティの値を取得していますが
この段階でDynaBeanのラッパーではなく、素のFormとの関係になっているためでし
た。

まだ自分なりの対応策を思いつけない段階ですが
何か良い方法はあるでしょうか。
よろしくお願いいたします。


> HOT deployでBeanUtilsを使うと、
> PropertyDescriptorがどんどんキャッシュされて
> メモリリークを起こしてしまうので。

なるほど。普段からCool Deployのみを使っていましたので
まったく気付いていませんでした。



> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED]
> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of Yasuo Higa
> Sent: Monday, June 01, 2009 1:57 PM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:17567] Re: SAStruts でNestedのiterateタグの使用
>
> ひがです。
> >
> > 西腋と申します。
> >
> > SAStruts 1.0.4-sp5 を使用してWebアプリケーションを作成した際
> > FromにDTOをListで複数件持てるようにし、複数件の入力を行えるようにしてま
す。
> > この際、JSPにStrutsのNestedのiterateタグなどを利用すると例外が発生しま
す。
> >
> > org.seasar.struts.action.ActionFormWrapper
> > org.seasar.struts.action.WrapperUtil
> > の2つのソースを修正すると、正常に画面が表示され、複数件の入力も可能でし
た。
> >
> trunkの方を修正しました。
> https://www.seasar.org/issues/browse/SASTRUTS-118
>
> よろしければ試していただけるでしょうか。
> 個人的には、制御系のタグは、Strutsではなく、
> JSTLの方を使ったほうがいいと思ってますが。
>
> HOT deployでBeanUtilsを使うと、
> PropertyDescriptorがどんどんキャッシュされて
> メモリリークを起こしてしまうので。
>
> 今回のバージョンからその対策を入れました。
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user



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