如何在EL中引用常量?
如何在JSP页面上使用EL引用常量?
我有一个Addresses
名为的常量接口URL
。我知道我可以通过以下代码来引用它:<%=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}
and和那样使用${Integer.MAX_VALUE}
。这仅需要更新的JavaEE 7容器服务器,因为早期版本存在错误。例如,GlassFish 4.0和Tomcat 8.0.0-1x失败,但是GlassFish4.1+和Tomcat 8.0.2x+可以工作。而且,您需要绝对确保声明您web.xml
的声明符合服务器支持的最新servlet版本。因此web.xml
,对于声明为符合Servlet2.5或更早版本的,Servlet 3.0+的任何功能都将无法使用。
另请注意,此功能仅在JSP中可用,而在Facelets中不可用。对于JSF +
Facelets,最好的选择是使用OmniFaces<o:importConstants>
,如下所示:
<o:importConstants type="com.example.YourConstants" />
或添加ImportHandler#importClass()
如下调用的EL上下文侦听器:
@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及以上。有几种选择:
将它们
Map<String, Object>
放在应用程序范围内。在EL中,可以通过${map.key}
或JavaBean的常规方式访问映射值${map['key.with.dots']}
。使用
<un:useConstants>
的的 非标 标签库(maven2的回购这里):
<%@ taglib uri="http://jakarta.apache.org/taglibs/unstandard-1.0" prefix="un" %>
<un:useConstants className="com.example.YourConstants" var="constants" />
这样,可以通过普通的Javabean方法访问它们${constants.FOO}
。
- 使用Javaranch的CCC
<ccc:constantsMap>
,如本文底部所述。
<%@ taglib uri="http://bibeault.org/tld/ccc" prefix="ccc" %> <ccc:constantsMap className="com.example.YourConstants" var="constants" />
这样,它们也可以通过通常的Javabean方法进行访问${constants.FOO}
。
- 如果您正在使用JSF2,那么你可以使用
<o:importConstants>
的OmniFaces。
<html ... xmlns:o="http://omnifaces.org/ui"> <o:importConstants type="com.example.YourConstants" />
这样,它们也可以通过通常的Javabean方法进行访问#{YourConstants.FOO}
。
创建一个包装器类,该包装器类通过Javabean风格的getter方法返回它们。
创建一个自定义的EL解析器,该解析器首先扫描常量的存在,如果不存在,则委托默认的解析器,否则返回常量值。
以上是 如何在EL中引用常量? 的全部内容, 来源链接: utcz.com/qa/413935.html