Java JSP比较运算符行为
我想比较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版本中也可以很好地工作,但现在
标记中的两种不同类型。基本上,左一个总是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中,指定了以下内容
${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中向后兼容吗?我认为没有任何类似的规定,除非您降级。