動的な名前でJavaBean JSPに関連付けられた名前またはビルド変数を取得
-
26-09-2019 - |
質問
私は、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;
}
}
所属していません StackOverflow