【问题标题】:How to make EL relational operators to work on Tomcat 8/JSTL 1.2 [duplicate]如何使 EL 关系运算符在 Tomcat 8/JSTL 1.2 上工作 [重复]
【发布时间】:2016-09-22 16:32:38
【问题描述】:

自从我们从 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 做“正确的事情”的提示仍然会受到赞赏。

【问题讨论】:

  • 你试过gt(大于)而不是>?喜欢 b gt a 吗?另见javatips.net/blog/jstl-less-than-greater-than
  • 是的,我试过了,还是不行。。还更新了问题中的代码,这样其他人也可以看到。。谢谢你的回复

标签: java jsp jstl el tomcat8


【解决方案1】:

如果你在设置变量的时候使用表达式,那就不那么麻烦了:

<c:set var="a" value="${15}"/>
<c:set var="b" value="${127}" />

【讨论】:

  • 感谢您的提示。不幸的是,这不起作用,因为我使用 scriptlet 作为上面的编辑问题从 Java 类中获取整数值。
猜你喜欢
  • 1970-01-01
  • 2013-01-07
  • 2012-12-20
  • 2018-08-22
  • 2013-04-07
  • 2014-01-31
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多