检索与JSP或具有动态名称的构建变量关联的JavaBean名称
我在jsp页面中使用JavaBean。我想给它一个动态名称,因为根据变量的值(我们称它为检索与JSP或具有动态名称的构建变量关联的JavaBean名称,jsp,javabeans,dynamic-variables,Jsp,Javabeans,Dynamic Variables,我在jsp页面中使用JavaBean。我想给它一个动态名称,因为根据变量的值(我们称它为foo),我希望它有不同的内容,并且我希望将所有这些不同的版本都保存在内存中。我希望bean具有会话范围,因为重新评估内容是昂贵的 现在bean有一个静态名称,如果我用不同的值foo重新加载页面,bean的内容与以前相同(jsp:usebean查找具有指定名称的JavaBean,如果它存在,则使用旧名称)。我想保留旧版本和新版本,因此它们必须有不同的名称 我想做的是: <jsp:useBean id="
foo
),我希望它有不同的内容,并且我希望将所有这些不同的版本都保存在内存中。我希望bean具有会话范围,因为重新评估内容是昂贵的
现在bean有一个静态名称,如果我用不同的值foo
重新加载页面,bean的内容与以前相同(jsp:usebean
查找具有指定名称的JavaBean,如果它存在,则使用旧名称)。我想保留旧版本和新版本,因此它们必须有不同的名称
我想做的是:
<jsp:useBean id="stats<%=foo%>" class="foo.bar" scope="session">
</jsp:useBean>
我的问题是我不能在JSP代码中引用JavaBean,因为我不知道它的名称。有没有办法解决这个问题
本质上,我想基于另一个变量的vaslue构建一个具有动态名称的变量
或者,我想检索与当前页面关联的JavaBean的名称,以便获得对刚刚创建的JavaBean的引用 最简单的方法是实现存储在会话范围中的自定义
映射。使用映射
可以使用大括号表示法动态引用键
<jsp:useBean id="beanMap" class="com.example.BeanMap" scope="session" />
...
${beanMap[someDynamicKey].someProperty}
这似乎很简单,而且我还可以取消foo.bar类的Bean(我更喜欢)。然而,我会做一些JSP框架已经实现的事情,我不希望这样。我想如果我不能做到我最初的想法,这是一个可以接受的黑客行为谢谢你的回答!我试着这么做,Java不理解Bean是一个类,它认为它是一个类型参数,即使我导入了这个类。因此,“newbean()”给出了一个错误。我甚至用“String”来试过,我得到了同样的结果。我使用了这个解决方案,尽管有点修改。我没有扩展HashMap(因为这是不可能的),但我在useBean标记中使用了一个Hashtable,并在jsp代码中实现了上述逻辑。不是很干净,但它能用,也没那么难看。
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;
}
}