動的な名前でJavaBean JSPに関連付けられた名前またはビルド変数を取得

StackOverflow https://stackoverflow.com/questions/2818306

質問

私は、JSPページでJavaBeansをusignています。変数の値に応じて(レッツ・コール、それはfoo)、私はそれは異なる内容を持ちたい、と私はメモリにこれらの異なるバージョンのすべてを維持したいので、私は、それを動的に名前を付けたいと思います。内容を再評価することは高価であるため、私は、豆は、セッションスコープを持っていると思います。

今Beanは静的な名前を持っている、と私はfooの異なる値とページをリロードした場合、豆の内容は、指定された名前のJavaBeanのための(jsp:usebeanのルックス前と同じであり、それが存在する場合、それは)古いものを使用しています。私は、彼らが別の名前を持っている必要がありますので、古いバージョンと新しいの両方を維持したいと思います。

私は何をしたいことは、この次のとおりです。

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

私の問題は、私はその名前を知っていないと私は、JSPコードでJavaBeansを参照することができないということです。これを解決する方法上の任意のアイデア?

は本質的には、私は別の変数のvaslueに基づいて動的な名前の変数を、構築したいです。

また、私が作成したのJavaBeanへの参照を取得するように、現在のページに関連付けられたJavaBeansの名前を取得します。

役に立ちましたか?

解決

最も簡単な方法は、セッションスコープに格納するカスタムMapを実装することであろう。 Mapを使用すると、動的にキーを参照するためにブレース表記を使用することができます。

<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;
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top