我想做这样的事情:
<c:if test="${somestring.charAt(0)=='1'}">
tadaaaam
</c:if>
当 somestring 是“11011”但它不起作用。我可以用它打印
${somestring.charAt(0)}
它是“1”,但上面的比较失败了。以下对比:
if(somestring.charAt(0)=='1')
纯Java中的worx(条件为真)。
有任何想法吗?
我想做这样的事情:
<c:if test="${somestring.charAt(0)=='1'}">
tadaaaam
</c:if>
当 somestring 是“11011”但它不起作用。我可以用它打印
${somestring.charAt(0)}
它是“1”,但上面的比较失败了。以下对比:
if(somestring.charAt(0)=='1')
纯Java中的worx(条件为真)。
有任何想法吗?
EL 似乎对 char 有问题。这是我可以使它工作的唯一方法。
<c:if test="${somestring.charAt(0) == '1'.charAt(0)}" >
tadaaaam
</c:if>
该行为完全符合 EL 规范的预期和要求。如果您采用 EL 规范的 2.2 版,则需要查看 1.8.2 节,该节提供了 '==' 运算符的规则。
在这种情况下,操作数是somestring.charAt(0)
which is achar
和'1'
which is a String
(NOT a char),因为字符串可以由 EL 中的单引号或双引号分隔。
鉴于我们有 Character == String,那么 1.8.2 的第六个项目符号适用并且两者都被强制为 Long 值。该字符将被强制为 49(1 的 ASCII 代码),而 1 被强制为 1。这些不相等,因此您会看到结果。
我明白这不是您所期望的,但这是规范要求的行为,并且是由 EL 中的单引号分隔字符串而不是字符这一事实触发的。