我usign一个JavaBean在JSP页面中。我想给它一个充满活力的名字,因为这取决于一个变量的值(我们称之为foo),我希望它有不同的内容,我想保持所有这些不同的版本在内存中。我想豆有会话范围,因为重新评估的内容是昂贵的。

眼下绿豆有一个静态的名字,如果我重新加载页面foo的不同的值,bean的内容和以前一样(jsp:usebean查找一个JavaBean的具有指定名称,而且如果它存在,它采用旧的)。我想同时保留旧版本,新的,所以他们必须有不同的名称。

我想要做的是这样的:

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

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

在本质我想建立一个动态名称的变量,基于另一变量的vaslue。

另外,我想检索与当前页面相关的JavaBeans的名称,让我获得刚刚创建的JavaBean的一个参考。

有帮助吗?

解决方案

最简单的方法是执行您在会话范围内存储的自定义Map。用Map可以使用支架符号来动态地指一个键。

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

您只需要重写Map#get()方法让,如果没有,而不是返回null它实例化的bean。

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;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top