Jsp 字符串到长比较抛出“;ELException:无法转换";在Tomcat7中,在Tomcat6中工作
以下代码段在Tomcat6中运行良好Jsp 字符串到长比较抛出“;ELException:无法转换";在Tomcat7中,在Tomcat6中工作,jsp,tomcat7,el,Jsp,Tomcat7,El,以下代码段在Tomcat6中运行良好 <c:set var="abc" value="$12,345" /> <c:choose> <c:when test="${abc ne 0}"> <c:out value="PASS"></c:out> </c:when> <c:otherwise> <c:out value="FAIL"></c:
<c:set var="abc" value="$12,345" />
<c:choose>
<c:when test="${abc ne 0}">
<c:out value="PASS"></c:out>
</c:when>
<c:otherwise>
<c:out value="FAIL"></c:out>
</c:otherwise>
</c:choose>
看起来在Tomcat 7中计算表达式${abc ne 0}
的方式有所不同。在Tomcat6中,${abc}
和${0}
都作为字符串进行比较,但是在Tomcat7中我得到了这个异常。我不知道为什么会发生这种情况,也不知道是哪个API的类文件导致了这种情况
这是如何产生的,我如何解决它?这是因为您试图将字符串与整数进行比较。请参见第1.8.2节: A{==,!=,eq,ne}B
■ 如果A==B,则应用运算符
■ 如果A为null或B为null,则对于==或eq返回false,对于!=返回true或东北。
■ 如果A或B为BigDecimal,则强制A和B为BigDecimal,然后:
■ 如果运算符为==或eq,则返回A.equals(B)
■ 如果操作员是!=否则,返回!A.等于(B)
■ 如果A或B为浮点或双精度,则强制A和B都为双精度,应用运算符
■ 如果A或B是BigInteger,则将A和B强制为BigInteger,然后:
■ 如果运算符为==或eq,则返回A.equals(B)
■ 如果操作员是!=否则,返回!A.等于(B)
■ 如果A或B是字节、短字符、字符、整数或长字符,则强制A和B都是长字符,应用运算符
■ 如果A或B为布尔值,则将A和B强制为布尔值,应用运算符
■ 如果A或B是枚举,则将A和B强制为枚举,应用运算符或
■ 如果A或B是字符串,则将A和B强制为字符串,在词汇上进行比较
■ 否则,如果调用A.equals(B)时发生错误,则错误
■ 否则,对A.equals(B)的结果应用运算符
测试的问题在于,您试图将
“$12345”
(字符串)与0
(整数)进行比较。由于0
是一个整数,因此在他们的文档(如上)中,如果是一个整数,那么它就属于粗体,其中A或B是一个整数。两者都试图强制使用Long,Java不会将字符串值“$12345”
转换为Long。如果您将代码更改为以下任一项,您将看到它可以工作:
字符串比较:
<c:set var="abc" value="$12,345" />
<c:choose>
<c:when test="${abc ne '0'}"> <!-- Change Integer to String -->
<c:out value="PASS"></c:out>
</c:when>
<c:otherwise>
<c:out value="FAIL"></c:out>
</c:otherwise>
</c:choose>
<c:set var="abc" value="12345" /> <!-- Change String to Integer -->
<c:choose>
<c:when test="${abc ne 0}">
<c:out value="PASS"></c:out>
</c:when>
<c:otherwise>
<c:out value="FAIL"></c:out>
</c:otherwise>
</c:choose>
整数比较:
<c:set var="abc" value="$12,345" />
<c:choose>
<c:when test="${abc ne '0'}"> <!-- Change Integer to String -->
<c:out value="PASS"></c:out>
</c:when>
<c:otherwise>
<c:out value="FAIL"></c:out>
</c:otherwise>
</c:choose>
<c:set var="abc" value="12345" /> <!-- Change String to Integer -->
<c:choose>
<c:when test="${abc ne 0}">
<c:out value="PASS"></c:out>
</c:when>
<c:otherwise>
<c:out value="FAIL"></c:out>
</c:otherwise>
</c:choose>