Java EL表达式中的字符比较

Java EL表达式中的字符比较,java,jsp,comparison,char,el,Java,Jsp,Comparison,Char,El,我想这样做: <c:if test="${somestring.charAt(0)=='1'}"> tadaaaam </c:if> 它是“1”,但上面的比较失败。比较如下: if(somestring.charAt(0)=='1') 纯Java中的worx(条件为true) 有什么想法吗?EL似乎对char有问题。这是我唯一能让它工作的方法 <c:if test="${somestring.charAt(0) == '1'.charAt(0)}" >

我想这样做:

<c:if test="${somestring.charAt(0)=='1'}">
tadaaaam
</c:if>
它是“1”,但上面的比较失败。比较如下:

if(somestring.charAt(0)=='1')
纯Java中的worx(条件为true)


有什么想法吗?

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

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

塔达姆

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

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

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


我理解这不是您所期望的,但这是规范所要求的行为,由EL中的单引号分隔字符串而不是字符触发。

无法在tomcat 7上重现。也许你可以给我们看看实际的代码,但它不起作用?我在Tomcat7上运行它。也许您没有将JSTL库添加到项目中谢谢,它是这样工作的:)我不知道在本例中“1”是字符串。谢谢您的回复1'实际上是一根弦。我错误地认为这是一个字符,我必须阅读更多的说明:)
<c:if test="${somestring.charAt(0)  == '1'.charAt(0)}" >
     tadaaaam
</c:if>