Recuperar nombres asociados con JavaBean JSP o variable de la estructura con el nombre dinámico
-
26-09-2019 - |
Pregunta
Soy usign un JavaBean en una página JSP. Me gustaría darle un nombre dinámico, ya que dependiendo del valor de una variable (llamémoslo foo
), que desea que tenga diferentes contenidos, y quiero mantener todas estas versiones diferentes en la memoria. Quiero que los granos tienen ámbito de sesión, debido a la reevaluación de los contenidos es caro.
En este momento el grano tiene un nombre estático, y si vuelvo a cargar la página con un valor diferente de foo
, el contenido del frijol son los mismos que antes (miradas jsp:usebean
para un JavaBean con el nombre especificado, y si existe , utiliza el viejo). Me gustaría mantener tanto la versión antigua y la nueva, así que tienen que tener nombres diferentes.
Lo que quiero hacer es lo siguiente:
<jsp:useBean id="stats<%=foo%>" class="foo.bar" scope="session">
</jsp:useBean>
Mi problema es que no puedo hacer referencia a la JavaBean en el código JSP, ya que no sé su nombre. Cualquier ideas sobre cómo resolver esto?
En esencia Quiero construir una variable con un nombre dinámico, basado en el vaslue de otra variable.
Por otra parte, quiero recuperar los nombres de los JavaBeans asociados con la página actual, de modo que puedo obtener una referencia al JavaBean acaba de crear.
Solución
La manera más fácil sería implementar un Map
a medida que se almacenan en el ámbito de sesión. Con un Map
puede utilizar la notación de refuerzo para referirse dinámicamente una clave.
<jsp:useBean id="beanMap" class="com.example.BeanMap" scope="session" />
...
${beanMap[someDynamicKey].someProperty}
Sólo es necesario reemplazar el método Map#get()
dejar que una instancia del frijol en su defecto, en lugar de devolver 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;
}
}