【发布时间】:2015-11-28 09:36:21
【问题描述】:
我正在使用 servlet 3.0 版的 Spring、JSP、Tomcat 环境中工作。我正在尝试使用Collection#contains 方法(据我所知已添加到servlet 3.0)。它似乎不起作用,在调试中,我想出了以下奇怪的情况,似乎可以确定问题所在:
${priority[0] == 1}
${priority[0] eq 1}
${priority.contains(priority[0])}
${priority.contains(1)}
打印出来
true true true false
另外,priority 是一个包含整数 1,2,3 的 List<Integer>。
所以,问题是,最后一次检查如何/为什么打印false?
编辑回复评论:是的,当从 Intellij 调试器中调用时,列表包含 1。
【问题讨论】:
-
在最后一种情况下,尝试将其转换为 Integer,我敢打赌当它需要一个对象时输入一个 int 时会出现问题。
-
当您不在 jsp 文件中时,您在常规 java 中是否有同样的问题?
-
@jwill 如果这是真的而不是
${priority[0] == 1}这也应该失败,但它不会。 -
这在技术上是 stackoverflow.com/q/12247806 的骗子EL 2.2 能够使用带括号的
method()语法调用非 getter 方法的特性。 -
因为
priority[0]扩大到long。另请参阅EL 2.2 specification 第 1.8.2 章“A {==,!=,eq,ne} B”点“如果 A 或 B 是字节、短整型、字符、整数或长整型,则将 A 和 B 强制转换为长整型,应用运营商”
标签: java spring jsp tomcat7 el