Abrufen JavaBean Namen im Zusammenhang mit JSP oder Build-Variable mit dynamischen Namen
-
26-09-2019 - |
Frage
Ich bin ein JavaBean in einer jsp Seite usign. Ich möchte es einen dynamischen Namen geben, denn je nach dem Wert einer Variablen (nennen wir es foo
), habe ich es unterschiedliche Inhalte haben wollen, und ich möchte alle diese verschiedenen Versionen im Speicher halten. Ich mag die Bohnen Sitzungsbereich haben, denn die Inhalte neu zu bewerten teuer ist.
Im Moment ist die Bohne hat einen statischen Namen, und wenn ich die Seite mit einem anderen Wert von foo
neu zu laden, wird der Inhalt der Bohne ist die gleiche wie vor (jsp:usebean
sucht nach einem JavaBean mit dem angegebenen Namen, und wenn es vorhanden ist , verwendet es die alten). Ich möchte sowohl die alte Version halten und die neue, so dass sie unterschiedliche Namen haben müssen.
Was ich tun möchte, ist dies:
<jsp:useBean id="stats<%=foo%>" class="foo.bar" scope="session">
</jsp:useBean>
Mein Problem ist, dass ich nicht die JavaBean in JSP-Code verweisen kann, wie ich weiß nicht, seinen Namen. Alle Ideen, wie dieses Problem zu lösen?
Im Grunde möchte ich eine Variable mit einem dynamischen Namen bauen, auf der Grundlage der vaslue einer anderen Variablen.
Alternativ möchte ich die Namen der Java Beans zum Abrufen der aktuellen Seite zugeordnet, so dass ich einen Verweis auf die JavaBean erhalten gerade erstellt haben.
Lösung
Die einfachste Weg wäre eine benutzerdefinierte Map
zu implementieren, die Sie in dem Sitzungsbereich speichern. Mit einem Map
können Sie die Klammer-Notation verwenden, um dynamisch einen Schlüssel beziehen.
<jsp:useBean id="beanMap" class="com.example.BeanMap" scope="session" />
...
${beanMap[someDynamicKey].someProperty}
Sie müssen nur die Map#get()
Methode außer Kraft setzen zu lassen, die Bohne, wenn abwesend statt Rückkehr null
instanziiert.
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;
}
}