几乎:
${1 ==”” } //works fine
${1 ==”4″ } //works fine
${1 ==”Yes” }
//triggers the Exception.
但即便是第3次比较在以前版本的JSP中也能正常工作,但现在它会导致异常.
==的行为是否在一段时间内发生了变化?
任何建议都非常感谢
解决方法
关于版本:
在JSP Specification,的向后兼容部分
If the version specified is less than 2.1,then the {expr} Syntax is
simply processed as a String literal.
因此,直到EL 2.0所有将被视为字符串文字并与.equals进行比较,因为==将在内部转换为等于(Reference here),但在2.1中它将不会转换为字符串并将抛出异常说javax.el .ELException:无法将类型java.lang.String的类型转换为类java.lang.Long
关于比较:
在EL版本2.1的JSP specification JSP.2.3.5.7中,指定了以下内容……
If A is null or B is null return false for == or eq,true for != or ne
If A or B is Byte,Short,Character,Integer,or Long coerce both A
and B to Long,apply operator
所以,在第一种情况下,
${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.
在上述情况下,两者都将被强制转换为内部类型转换.
但不是在第三种情况下,${1 ==“是”}其中第二个是字符串无法转换(强制)为Long而java.el.ELException将抛出消息“无法将类型类java.lang.String转换为类java. lang.Long”.