java - 通过 EL 3.0 (JEE7; Tomcat 8) 访问 JSP 中的静态属性或方法

标签 java jsp tomcat tomcat8 jspell

我正在使用 tomcat 8.0.9(servlet 3.1、jsp 2.3、el 3.0)并尝试从 jsp 页面访问静态属性,如下所示:

${Boolean.TRUE}

没有错误,但渲染结果中没有输出。我究竟做错了什么?

编辑

this question 的答案(标记为重复问题)声称自 EL 3.0(JSR-341,Java EE 7 的一部分)以来,可以引用所有 java.lang.* 类的常量,因为它们是隐式导入的并且像这样可用

${Boolean.TRUE} 

这个答案对我不起作用,至少对 tomcat 8 不起作用。

编辑 2

来自 Oracle's JEE7 Tutorial (9.3.1.2 引用对象属性或集合元素)

You can reference a static field or method using the syntax classname.field, as in the following example:

Boolean.FALSE

The classname is the name of the class without the package name. By default, all the java.lang packages are imported. You can import other packages, classes, and static fields as needed.

最佳答案

更新:

Tomcat(至少从 8.0.9 开始)的 jsp-api.jar 中有一个错误。根据the change log , 它在 Tomcat 版本 8.0.15 中得到修复。

作为解决方法,在 apache-tomcat-8.0.9\lib 文件夹中将 jsp-api.jar 替换为 javax.servlet.jsp-api-2.3.2-b01.jar .在eclipse中刷新项目,你会看到

的输出
     Testing: ${Boolean.TRUE}

作为:

    Testing: true

这也被确定为 GLASSFISH 中的错误 here .

为了访问 java.lang 包之外的静态字段或方法,必须将那些特定的包或类添加到 EL 上下文中(BalusC 也讨论过 here )。

下面是一个允许静态访问 java.time 包中的类的示例,用于您的 Web 应用程序中的所有 jsp 文件:

@WebListener
public class Config implements ServletContextListener {
  @Override
  public void contextInitialized(ServletContextEvent event) {
    JspFactory.getDefaultFactory().getJspApplicationContext(event.getServletContext()).addELContextListener((ELContextEvent e) -> {
      e.getELContext().getImportHandler().importPackage("java.time");
    });
  }

  @Override
  public void contextDestroyed(ServletContextEvent event) {}
}

现在从 jsp 返回当前的 LocalDate,例如:

${LocalDate.now()}

请注意,${java.time.LocalDate.now()} 不起作用。

关于java - 通过 EL 3.0 (JEE7; Tomcat 8) 访问 JSP 中的静态属性或方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24768377/

相关文章:

tomcat - 如何处理 SSL 证书的浏览器警告

mysql - Elastic Beanstalk hibernate MySQL

java - 需要 Java 建议来处理未索引文件中存在的数十亿条记录

java - 生成的查询包含架构和目录名称

java - JSP 联系表 - 将其发送到 Gmail

javascript - JSP中可以包含javascript吗?

java - 如何处理带有嵌套抽象类的GSON?

java - 如何从 txt 制作 Java Anagrams

java - 从代码渲染一个 jsp 页面并将渲染后的 html 输出作为字符串

Tomcat 内部的 javamail 附加 "noname"