【问题标题】:Call methods in Expression Language表达式语言中的调用方法
【发布时间】:2012-06-30 11:14:37
【问题描述】:

如何使用 EL (Expression Language) 在 JSP 中调用方法?

例如:

<c:forEach var="item" items="${listStr}" begin="0" end="2" step="2">
    <p>${item.indexOf("h")}</p>
</c:forEach>

这里,itemjava.lang.String 类型的对象。这会在 Tomcat 上运行时导致错误。

【问题讨论】:

  • 您遇到的错误是什么

标签: jsp tomcat el


【解决方案1】:

这仅从 EL 2.2 开始受支持。这又与 Servlet 3.0 密切相关。因此,如果您确保使用与 Servlet 3.0 兼容的web.xml 声明来定位与 Servlet 3.0 兼容的容器(Tomcat 7、Glassfish 3 等),那么它就会按照您的意图工作。但是,如果您的目标是旧版本的 servlet 容器,或者有旧版本甚至错误的 web.xml 根声明,那么它将无法工作。

另见:


更新:您的特定问题可能是由 Tomcat 7 中的错误引起的。它没有根据给定的参数找到正确的重载方法。您的表达式在 Glassfish 3 中运行良好。所有非重载方法在 Tomcat 中都应该运行良好。

【讨论】:

  • 我使用的是 Tomcat 7 和 servlet 3.0,但是有些方法可以,其他的不行。例如: indexOf(104) 可以,但 indexOf("h") 不是。 ("h" ascii 是 104) .
  • 这是 Tomcat 7 中的一个错误 issues.apache.org/bugzilla/show_bug.cgi?id=56147
  • 我可以从哪个版本调用不带参数的方法?
  • @PhilipRego:在链接中的“findAttribute”上按 Ctrl+F。你会看到它只是在超类中。
【解决方案2】:

我也无法让它工作(Apache Tomcat/7.0.27)。

javax.el.E​​LException: 无法将 java.lang.String 类型的 h 转换为 int

El 拒绝查看具有正确签名的方法。 indexOf("h",0) 也会发生同样的事情。我确实成功了

${x.contains("h")}
${x.lastIndexOf("h")}
${x.indexOf(104)}  Ascii value of 'h' is 104

【讨论】:

  • 是的,有些方法是可以的。另一个没有。 :| .
  • 你试过发送'h'(一个字符)吗? char 可以翻译成 int。
猜你喜欢
  • 2013-01-28
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多