EL表达式中的char比较

时间:2012-05-10 22:08:45

标签: java jsp comparison char el

我想做这样的事情:

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

当somestring为“11011”但它不起作用。我可以用

打印出来
${somestring.charAt(0)}

并且它是'1'但是上面的比较失败了。以下比较:

if(somestring.charAt(0)=='1')
纯Java中的

worx(条件为真)。

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

EL似乎在使用char时出现问题。这是我能让它发挥作用的唯一方法。

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

答案 1 :(得分:7)

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

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

鉴于我们有Character == String,那么1.8.2的第六个子弹适用,并且两者都被强制为Long值。该字符将被强制为49(ASCII代码为1),1被强制为1.这些不相等,因此您看到的结果。

我很欣赏这不是你所期望的,但它是规范所要求的行为,并且是由EL中的单引号划分字符串而不是字符的事实引发的。