检索与JSP关联的JavaBean名称或使用动态名称构建变量

时间:2010-05-12 11:27:36

标签: jsp javabeans dynamic-variables

我在jsp页面中使用了一个JavaBean。我想给它一个动态名称,因为取决于变量的值(让我们称之为foo),我希望它具有不同的内容,并且我希望将所有这些不同的版本保留在内存中。我希望bean具有会话范围,因为重新评估内容是昂贵的。

现在bean有一个静态名称,如果我用不同的值foo重新加载页面,那么bean的内容与之前相同(jsp:usebean查找带有JavaBean的JavaBean指定的名称,如果存在,则使用旧名称。我想保留旧版本和新版本,因此它们必须有不同的名称。

我想做的是:

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

我的问题是我无法在JSP代码中引用JavaBean,因为我不知道它的名字。关于如何解决这个问题的任何想法?

本质上,我想根据另一个变量的vaslue建立一个带有动态名称的变量。

或者,我想检索与当前页面关联的JavaBeans的名称,以便获取对刚刚创建的JavaBean的引用。

1 个答案:

答案 0 :(得分:0)

最简单的方法是实现存储在会话范围中的自定义Map。使用Map,您可以使用括号表示法动态引用密钥。

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

您只需要覆盖Map#get()方法,让它在缺席时实例化bean,而不是返回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;
    }
}