Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 字符串到长比较抛出“;ELException:无法转换";在Tomcat7中,在Tomcat6中工作_Jsp_Tomcat7_El - Fatal编程技术网

Jsp 字符串到长比较抛出“;ELException:无法转换";在Tomcat7中,在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:

以下代码段在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: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>