3

假设我有以下 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 呢?

4

4 回答 4

4

Java EE 6(例如 Glassfish 3 将接受 ${a.getAttribute('foo')})支持方法调用,Java EE 5 不支持。在这里,您需要像这样公开您的地图:

public Map getAttributes() {
  return map;
}

使表达式 ${a.attributes['foo']}) 工作。

如果您不在 Java EE/JSP 之外,则可以使用符合 EE 6 的实现,例如支持方法调用的 JUEL 2.2.x。

于 2009-09-03T09:15:05.147 回答
3

你不能!

请参阅指南,了解您可以做什么和不可以做什么。

这背后的原因是 el 应该是应用程序中的一个薄层,它只允许访问位于页面后面的数据以用于演示目的。

它不应该取代应用程序的业务逻辑。虽然您的getAttribute方法足够琐碎,但有几个人可能会滥用它并将其转换为执行大量工作并在运行时产生副作用的大胖方法。这正是 el 想要避免的。

于 2009-09-03T08:55:36.210 回答
2

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

${a["attribute"]}
于 2009-09-03T09:10:58.247 回答
0

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

${a["attribute"]}
于 2012-09-30T11:46:21.883 回答