我想做这样的事情:
<c:if test="${somestring.charAt(0)=='1'}">
tadaaaam
</c:if>
当somestring为“11011”但它不起作用。我可以用
打印出来${somestring.charAt(0)}
并且它是'1'但是上面的比较失败了。以下比较:
if(somestring.charAt(0)=='1')
纯Java中的worx(条件为真)。
有什么想法吗?
答案 0 :(得分:8)
<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中的单引号划分字符串而不是字符的事实引发的。