自从我们从Tomcat 6升级到Tomcat 8.0.32后,我有一种奇怪的行为。
关系运算符(<,>,< =,> =)不能与使用c:set
定义的变量一起使用public class ServiceConstants {
public static final Integer MY_CONST = 15;
}
以下是我的代码(已更新):
<%@ page isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="a" value="<%=ServiceConstants.MY_CONST%>"/>
<c:set var="b" value="${127}" />
<html>
<body>
<br/>a: ${a}
<br/>b: ${b}
<br/>Using variables {b > a}: ${b > a}
<br/>Using variables {b gt a}: ${b gt a}
<br/>Hardcoded values {127 > 15}: ${127 > 15}
</body>
</html>
以下是呈现的内容
a: 15
b: 127
Using variables {b > a}: false
Using variables {b gt a}: false
Hardcoded values {127 > 15}: true
当比较由c:set设置的a和b时,它会返回错误的答案。
下面是我的web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0" metadata-complete="true">
<absolute-ordering />
<distributable/>
<display-name>App name</display-name>
<jsp-config>
<taglib>
<taglib-uri>http://xyzo.org/app</taglib-uri>
<taglib-location>/WEB-INF/tld/app.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
我尝试了多个解决方案,更改为Tomcat 8.0.37(最新版),更改我的web.xml文件标题等。
非常感谢任何帮助。
以下编辑:
我发现这些数字被EL解释为字符串。 如果我强迫凝聚它有效,但看起来很麻烦。
<%@ page isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="a" value="<%=ServiceConstants.MY_CONST%>"/>
<c:set var="b" value="${127}" />
<html>
<body>
<br/>a: ${a}
<br/>b: ${b}
<br/>Using variables {b > a}: ${b > a}
<br/>Using variables {b gt a}: ${b gt a}
<br/>Hardcoded values {127 > 15}: ${127 > 15}
<br/>...
<br/>Forcing cohersion
<br/>Using variables {b > (0 + a)}: ${b > (0 + a)}
</body>
</html>
结果:
a: 15
b: 127
Using variables {b > a}: false
Using variables {b gt a}: false
Hardcoded values {127 > 15}: true
...
Forcing cohersion
Using variables {b > (0 + a)}: true
有关如何让EL做正确事情的任何提示&#39;仍然会受到赞赏。
答案 0 :(得分:1)
如果在设置变量时使用表达式,则不那么麻烦:
<c:set var="a" value="${15}"/>
<c:set var="b" value="${127}" />