JSP比较运算符的行为
我想比较<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规范的向后兼容部分中,
如果指定的版本小于2.1,则{expr}语法仅作为String文字处理。
因此,在EL 2.0之前,所有内容都将被视为字符串文字,并与.equals
as
==
进行比较,然后将其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.
在第二种情况下
${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类型”。
以上是 JSP比较运算符的行为 的全部内容, 来源链接: utcz.com/qa/413375.html