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