gpt4 book ai didi

jsp - 如何在EL中引用常量?

转载 作者:行者123 更新时间:2023-12-03 04:48:30 25 4
gpt4 key购买 nike

如何在 JSP 页面上使用 EL 引用常量?

我有一个界面Addresses常量名为 URL 。我知道我可以通过以下方式用 scriplet 引用它:<%=Addresses.URL%> ,但是我如何使用 EL 来做到这一点?

最佳答案

EL 3.0 或更高版本

如果您已经使用 Java EE 7/EL 3.0,那么 @page import还将在 EL 范围内导入类常量。

<%@ page import="com.example.YourConstants" %>

这将在幕后通过 ImportHandler#importClass() 导入并可作为 ${YourConstants.FOO} .

请注意,所有java.lang.*类已经隐式导入并可用,如下所示 ${Boolean.TRUE}${Integer.MAX_VALUE} 。这只需要更新的 Java EE 7 容器服务器,因为早期版本存在错误。例如。 GlassFish 4.0 和 Tomcat 8.0.0-1x 失败,但 GlassFish 4.1+ 和 Tomcat 8.0.2x+ 可以工作。并且您需要绝对确保您的web.xml声明符合服务器支持的最新 servlet 版本。因此有了web.xml声明符合 Servlet 2.5 或更早版本,Servlet 3.0+ 功能都不起作用。

另请注意,此功能仅在 JSP 中可用,在 Facelets 中不可用。对于 JSF+Facelets,最好的选择是使用 OmniFaces <o:importConstants> 如下:

<o:importConstants type="com.example.YourConstants" />

或者添加一个 EL 上下文监听器来调用 ImportHandler#importClass()如下:

@ManagedBean(eager=true)
@ApplicationScoped
public class Config {

@PostConstruct
public void init() {
FacesContext.getCurrentInstance().getApplication().addELContextListener(new ELContextListener() {
@Override
public void contextCreated(ELContextEvent event) {
event.getELContext().getImportHandler().importClass("com.example.YourConstants");
}
});
}

}
<小时/>

EL 2.2 或更高版本

这在 EL 2.2 及更早版本中不可能。有几种选择:

  1. 将它们放入 Map<String, Object> 中您将其放入应用程序范围中。在 EL 中,可以通过通常的 Javabean 方式访问映射值 ${map.key}${map['key.with.dots']} .

  2. 使用<un:useConstants> 非标准标签库(maven2 repo here):

    <%@ taglib uri="http://jakarta.apache.org/taglibs/unstandard-1.0" prefix="un" %>
    <un:useConstants className="com.example.YourConstants" var="constants" />

    这样就可以通过 ${constants.FOO} 以通常的 Javabean 方式访问它们.

  3. 使用 Javaranch 的 CCC <ccc:constantsMap>this article 底部某处所述.

    <%@ taglib uri="http://bibeault.org/tld/ccc" prefix="ccc" %>
    <ccc:constantsMap className="com.example.YourConstants" var="constants" />

    这样就可以通过 ${constants.FOO} 以通常的 Javabean 方式访问它们也是如此。

  4. 如果您使用 JSF2,那么您可以使用 <o:importConstants> OmniFaces .

    <html ... xmlns:o="http://omnifaces.org/ui">
    <o:importConstants type="com.example.YourConstants" />

    这样就可以通过 #{YourConstants.FOO} 以通常的 Javabean 方式访问它们也是如此。

  5. 创建一个包装类,通过 Javabean 样式的 getter 方法返回它们。

  6. 创建一个自定义 EL 解析器,它首先扫描常量是否存在,如果不存在,则委托(delegate)给默认解析器,否则返回常量值。

关于jsp - 如何在EL中引用常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3732608/

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