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.

War es hilfreich?

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;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top