gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:26:13 27 4
gpt4 key购买 nike

我正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com