Sac*_*rma 7 java spring jsp el
我想比较<c:if>JSP标签中的两种不同类型.基本上左边的一个Number总是正确的,一个是字符串,如果该字符串可以解析为数字,我收不到错误,但如果字符串不能被解析为Number我收到的javax.el.ELException: Cannot convert No of type class java.lang.String to class java.lang.Long.
几乎:
$ {1 ==""} //工作正常
$ {1 =="4"} //工作正常
$ {1 =="是"} //触发异常.
但即便是第3次比较在以前版本的JSP中也能正常工作,但现在它会导致异常.
==一段时间内的行为有变化吗?
任何建议都非常感谢
行为==没有改变,但行为{expr}改变了......
关于版本:
在JSP Specification的向后兼容部分,
如果指定的版本小于2.1,则{expr}语法只是作为字符串文字处理.
所以,直到EL 2.0都将被视为一个字符串字面量,并与.equals作为==将被转换为equals内部(这里参考),但在2.1它将不会被转换为字符串,并会抛出异常说javax.el.ELException: Cannot convert No of type class java.lang.String to class java.lang.Long
关于比较:
在EL版本2.1的JSP规范JSP.2.3.5.7中,指定了以下内容......
如果A为null或B为null,则为==或eq返回false,对于!=或ne,则返回true
如果A或B是Byte,Short,Character,Integer或Long强制A和B强制为Long,则应用运算符
所以,在第一种情况下,
${1 =="" } // ans is false as second one is null as per 1st rule.
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,
${1 =="4" } // ans is false as both are different after coercing to Long as per 2nd rule.
Run Code Online (Sandbox Code Playgroud)
在上述情况下,两者都将被强制转换为内部类型转换.
但不是在第三种情况下,
${1 =="Yes" }其中第二个是字符串无法转换(强制)为Long并将java.el.ELException抛出消息"无法将类型类java.lang.String转换为类java.lang.Long".
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |