[Seasar-user:5237] Re: 【S2JSF1.0.18】s:forEachでMap$EntryのメソッドにアクセスするとIllegalAccessExceptionが発生する。
SCC村上剛志
[E-MAIL ADDRESS DELETED]
2006年 11月 21日 (火) 20:52:20 JST
お世話になっております。
村上です。
お返事ありがとうございます。
At Tue, 21 Nov 2006 20:22:43 +0900,
<[E-MAIL ADDRESS DELETED]> wrote:
>
> 米林です。
>
> From: "SCC村上剛志" <[E-MAIL ADDRESS DELETED]>
> Sent: Monday, November 20, 2006 2:05 PM
>
> > お世話になっております。
> > 村上です。
> >
> > s:forEachにおいてMap$Entryのメソッドを実行した際に
> > メソッドのアクセスエラーが発生しましたので、対応を
> > お願いしたくご連絡いたしました。
> >
> > Java(SUN) 1.5.0_06
> > Tomcat 5.5.17
> > Seasar2 2.3.15
> > S2JSF 1.0.19
> >
> > の環境にて、HashMapのEntrySetを返すDto(sampleDto)に
> > 対してMap$Entry#getKey,getValueを実行しようとすると、
> > IllegalAccessExceptionが発生します。
> >
> > <ul>
> > <div m:inject="s:forEach"
> > m:items="#{sampleDto.entrySet}"
> > m:var="entry" m:varIndex="index">
> > <li>
> > <span m:value="#{entry.key}" /> :
> > <span m:value="#{entry.value}" />
> > </li>
> > </div>
> > </ul>
>
> > デバッグしてみたところ、Seasar2のPropertyDescImplで
> > 保持しているreadMethodが、パッケージプライベートな
> > HashMap$Entryのメソッドであるため、MethodUtil#invoke
> > にてIllegalAccessExceptionが発生しているようです。
> >
> >
> > 対応が難しいようでしたら、もし回避策などありましたら
> > ご教示いただきたいと思います。
>
> 回避策というよりも、これはキーと値を持つ別のObjectを
> 自前でDTO内に作成した方が良いと思います。
> パッケージプライベートなメソッドをEL式から呼ぶ事は
> 出来ないと思います。
言葉足らずで申し訳ありません。
パブリックであるMap$Entryのメソッドとしてアクセスしたいのに
実際にはパッケージプライベートであるHashMap$Entryの
メソッドとしてinvokeしている点が気になり質問した次第です。
普通のJavaでの
for (Entry<?, ?> entry : sampleDto.getEntrySet()) {
Object key = entry.getKey();
Object value = entry.getValue();
}
という記述をELで実現したいだけなのですが...
キーと値を持つObjectを作成する方向で検討したいと思います。
ありがとうございました。
>
> ---
> 米林 正明
> [E-MAIL ADDRESS DELETED]
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内