Recuperar nombres asociados con JavaBean JSP o variable de la estructura con el nombre dinámico

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

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.

¿Fue útil?

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;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top