6

我想做这样的事情:

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

当 somestring 是“11011”但它不起作用。我可以用它打印

${somestring.charAt(0)}

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

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

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

有任何想法吗?

4

2 回答 2

8

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

<c:if test="${somestring.charAt(0)  == '1'.charAt(0)}" >
     tadaaaam
</c:if>
于 2012-05-11T04:59:25.483 回答
7

该行为完全符合 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 中的单引号分隔字符串而不是字符这一事实触发的。

于 2012-05-11T07:27:19.667 回答