【问题标题】:char comparison in EL expression [duplicate]EL表达式中的字符比较[重复]
【发布时间】:2012-05-19 13:11:10
【问题描述】:

我想做这样的事情:

<c:if test="${somestring.charAt(0)=='1'}">
tadaaaam
</c:if>

当 somestring 是 "11011" 但它不起作用。我可以用

打印它
${somestring.charAt(0)}

它是“1”,但上面的比较失败了。以下比较:

if(somestring.charAt(0)=='1')

纯Java中的worx(条件为真)。

有什么想法吗?

【问题讨论】:

  • 无法在 tomcat 7 上重现。也许您可以向我们展示不起作用的实际代码?
  • 我是在Tomcat 7上运行的,可能你的项目没有添加JSTL库

标签: java jsp comparison char el


【解决方案1】:

EL 似乎对 char 有问题。这是我可以使它工作的唯一方法。

<c:if test="${somestring.charAt(0)  == '1'.charAt(0)}" >
     tadaaaam
</c:if>

【讨论】:

  • 谢谢,它是这样工作的 :) 我不知道在这种情况下 '1' 是字符串。
【解决方案2】:

行为完全符合 EL 规范的预期和要求。如果您采用 EL 规范的 2.2 版,则需要查看 1.8.2 节,该节提供了 '==' 运算符的规则。

在这种情况下,操作数是 somestring.charAt(0),即 char'1',即 String(不是字符),因为字符串在 EL 中可以用单引号或双引号分隔。

假设我们有 Character == String,那么 1.8.2 的第六个项目符号适用并且两者都被强制为 Long 值。字符将被强制为 49(1 的 ASCII 码),1 被强制为 1。这些不相等,因此您会看到结果。

我明白这不是您所期望的,但这是规范要求的行为,并且是由 EL 中的单引号分隔字符串而不是字符这一事实触发的。

【讨论】:

  • 感谢您的回复。 '1' 确实是字符串。我错误地认为它是一个字符,我必须阅读更多规范:)
猜你喜欢
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 2012-11-15
  • 2017-06-16
  • 1970-01-01
  • 2013-06-10
  • 2013-04-20
相关资源
最近更新 更多