Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检索与JSP或具有动态名称的构建变量关联的JavaBean名称_Jsp_Javabeans_Dynamic Variables - Fatal编程技术网

检索与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="

我在jsp页面中使用JavaBean。我想给它一个动态名称,因为根据变量的值(我们称它为
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;
    }
}