Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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
Java JSP比较运算符行为_Java_Spring_Jsp_El - Fatal编程技术网

Java JSP比较运算符行为

Java JSP比较运算符行为,java,spring,jsp,el,Java,Spring,Jsp,El,我想比较JSP的标记中的两种不同类型。基本上,左一个总是Number,但右一个是字符串,如果该字符串可以解析为数字,我不会收到任何错误,但如果该字符串不能解析为Number,我会收到javax.el.ELException:无法将class java.lang.String类型的no转换为class java.lang.Long 实际上: ${1==”“}//工作正常${1==“4”}//工作正常${1==“是”} //触发异常 但是,即使是第三次比较在以前的JSP版本中也可以很好地工作,但现在

我想比较JSP的
标记中的两种不同类型。基本上,左一个总是
Number
,但右一个是字符串,如果该字符串可以解析为数字,我不会收到任何错误,但如果该字符串不能解析为
Number
,我会收到
javax.el.ELException:无法将class java.lang.String类型的no转换为class java.lang.Long

实际上:

${1==”“}//工作正常
${1==“4”}//工作正常
${1==“是”} //触发异常

但是,即使是第三次比较在以前的JSP版本中也可以很好地工作,但现在它会导致异常

==
的行为是否在一段时间内发生了变化

如有任何建议,我们将不胜感激

从jsp2.1开始,JSP使用统一表达式语言(unifiedexpressionlanguage,unifiedel),它代表了jsp2.0提供的表达式语言和为javaserverfaces技术创建的表达式语言的结合

这种行为很可能有点不同


有关完整的类型转换规则,请参见JavaServer Pages 2.1表达式语言规范(可从获取)的第1.18节。

未更改
=
的行为,但更改了
{expr}
的行为

关于版本:

在的向后兼容性部分

如果指定的版本小于2.1,则{expr}语法为 仅作为字符串文本处理

因此,在EL 2.0之前,所有内容都将被视为字符串文字,并与
进行比较。equals
作为
=
将在内部转换为
equals
,但在2.1中,它不会转换为字符串,并会抛出异常,表示
javax.el.ELException:无法将java.lang.string类的No转换为java.lang.Long类

关于比较:

在EL版本2.1中,指定了以下内容

  • 如果A为null或B为null,则对于==或eq返回false,对于!=返回true或东北

  • 如果A或B是字节、短字符、字符、整数或长字符,则强制A和B同时使用 和B到Long,应用操作符

  • 因此,在第一种情况下

    ${1 =="" } // ans is false as second one is null as per 1st rule.
    
    在第二种情况下

    ${1 =="4" } // ans is false as both are different after coercing to Long as per 2nd rule.
    
    在上面使用内部类型转换的情况下,两者都将强制为long

    但在第三种情况下,
    ${1==“Yes”}
    其中第二个是字符串,无法转换(强制)为Long,并且
    java.el.ELException
    将抛出消息“无法将java.lang.string类的No转换为java.lang.Long类”。

    如果使用eq确保不会抛出excp.No,则可能在内部使用数字转换器。即使eq在新的JSP版本中也会抛出同样的异常我能做些什么使我的ELs在JSP中向后兼容吗?我认为没有任何类似的规定,除非您降级。