Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/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
如何使用java表达式语言实现这一点_Java_Jsp_Jstl_El - Fatal编程技术网

如何使用java表达式语言实现这一点

如何使用java表达式语言实现这一点,java,jsp,jstl,el,Java,Jsp,Jstl,El,假设我有以下java对象,我希望使用el在jsp中读取: class A { Map map = new HashMap(); int count; String getAttribute(String attrName) { return map.get(attrName); } String getCount() { return count;

假设我有以下java对象,我希望使用el在jsp中读取:

class A {

 Map map = new HashMap();
 int count;

        String getAttribute(String attrName)
        {
                return map.get(attrName);
        }

       String getCount()
       { 
               return count;
      }

}
我可以通过执行
${a.count}

但是如何使用el调用getAttribute呢?

您不能

看看你能做什么和不能做什么

这背后的原因是,el应该是应用程序中的一个薄层,它只允许访问页面后面的数据以进行表示


它不应该取代应用程序的业务逻辑。虽然您的getAttribute方法非常简单,但有几个人可能会误用它,并将其转换为一个庞大的方法,该方法在运行时执行大量操作并产生副作用。这正是el想要避免的。

您需要的是让您的类实现接口,只需包装内部映射即可。然后可以使用以下EL表达式:

${a["attribute"]}
JavaEE6(例如Glassfish 3将接受${a.getAttribute('foo')})支持方法调用,JavaEE5不支持。在这里,您需要如下方式公开地图:

public Map getAttributes() {
  return map;
}
使表达式${a.attributes['foo']}工作


如果您在Java EE/JSP之外,可以使用与EE 6兼容的实现,如支持方法调用的JUEL 2.2.x。

在El 2.x中,您可以使用David Rabinowitz所说的技巧:

${a["attribute"]}

我更倾向于认为艾尔只是没有被充分考虑。在太多的情况下,它太简单了。请注意,如果该方法仅命名为“get()”,那么他可以使用“a[someThing]”访问它。