Récupérer les noms JavaBean associés à la variable JSP ou construire avec un nom dynamique

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

Question

Je suis un usign JavaBean dans une page jsp. Je voudrais donner un nom de dynamique, car en fonction de la valeur d'une variable (permettent de faire appel de ce foo), je veux qu'il y ait un contenu différent, et je veux garder toutes ces différentes versions en mémoire. Je veux que les haricots aient une portée de session, parce que réévaluant le contenu est cher.

En ce moment, le haricot a un nom de statique, et si je recharger la page avec une valeur différente de foo, le contenu du haricot sont les mêmes que précédemment (regards jsp:usebean pour un JavaBean avec le nom spécifié, et si elle existe , il utilise l'ancien). Je voudrais garder les deux l'ancienne version et la nouvelle, donc ils doivent avoir des noms différents.

Ce que je veux faire est la suivante:

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

Mon problème est que je ne peux pas faire référence au JavaBean dans le code JSP, comme je ne sais pas son nom. Toutes les idées sur la façon de résoudre ce problème?

En substance, je veux construire une variable avec un nom de dynamique, en fonction de la vaslue d'une autre variable.

Sinon, je veux récupérer les noms des JavaBeans associés à la page en cours, de sorte que j'obtenir une référence au JavaBean vient d'être créé.

Était-ce utile?

La solution

moyen serait plus facile à mettre en œuvre une Map personnalisée que vous enregistrez dans le cadre de la session. Avec un Map vous pouvez utiliser la notation accolade pour désigner dynamiquement une clé.

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

Vous ne devez remplacer la méthode de Map#get() pour laisser instancier le grain en cas d'absence au lieu de retourner 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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top