0

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

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

我想做的是:

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

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

本质上,我想基于另一个变量的值来构建一个具有动态名称的变量。

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

4

1 回答 1

0

最简单的方法是实现Map您存储在会话范围内的自定义。使用 aMap您可以使用大括号表示法来动态引用键。

<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;
    }
}
于 2010-05-12T13:24:33.280 回答