我在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的引用。
答案 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;
}
}