0

jspページでJavaBeanを使用しています。動的な名前を付けたいと思います。変数の値に応じて (それを と呼びましょうfoo)、異なる内容を持たせ、これらの異なるバージョンをすべてメモリに保持したいからです。コンテンツの再評価にはコストがかかるため、Bean にセッション スコープを持たせたい。

現在、Bean には静的な名前があり、別の値の でページをリロードするとfoo、Bean の内容は以前と同じです (jsp:usebean指定された名前の JavaBean を探し、存在する場合は古いものを使用します)。 1)。古いバージョンと新しいバージョンの両方を保持したいので、名前を変える必要があります。

私がやりたいことはこれです:

<jsp:useBean id="stats<%=foo%>" class="foo.bar" scope="session">
</jsp:useBean>

私の問題は、名前がわからないため、JSP コードで JavaBean を参照できないことです。これを解決する方法についてのアイデアはありますか?

本質的に、別の変数の値に基づいて、動的な名前で変数を作成したいと考えています。

または、現在のページに関連付けられている JavaBean の名前を取得して、作成したばかりの JavaBean への参照を取得したいと考えています。

4

1 に答える 1

0

Map最も簡単な方法は、セッション スコープに保存するカスタムを実装することです。aMapを使用すると、ブレース表記を使用してキーを動的に参照できます。

<jsp:useBean id="beanMap" class="com.example.BeanMap" scope="session" />
...
${beanMap[someDynamicKey].someProperty}

メソッドをオーバーライドしてMap#get()、存在しない場合は を返す代わりに Bean をインスタンス化するだけで済みますnull

public class BeanMap extends HashMap<String, Bean> {
    @Override public Bean get(Object key) {
        Bean bean = super.get(key);
        if (bean == null) {
            bean = new Bean();
            super.put(String.valueOf(key), bean);
        }
        return bean;
    }
}
于 2010-05-12T13:24:33.280 に答える