Récupérer les noms JavaBean associés à la variable JSP ou construire avec un nom dynamique
-
26-09-2019 - |
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éé.
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;
}
}