Ce n'est pas possible en utilisant la norme EL dans sa version actuelle, la version 2.2. Il y a cependant plusieurs façons d'atteindre l'exigence:
Les mettre dans un Map<String, Object>
ce que vous mettez dans le champ d'application. En EL, les valeurs de la carte sont accessibles à l'habitude Javabean moyen en ${map.key}
ou ${map['key.with.dots']}
.
-
Utiliser <un:useConstants>
de la Unstandard taglib (maven2 repo ici):
<%@ taglib uri="http://jakarta.apache.org/taglibs/unstandard-1.0" prefix="un" %>
<un:useConstants className="com.example.YourConstants" var="constants" />
De cette façon, ils sont accessibles à l'habitude Javabean moyen en ${constants}
.
-
Utilisation Javaranch du CCC <ccc:constantsMap>
comme décrit plus quelque part en bas de cet article.
<%@ taglib uri="http://bibeault.org/tld/ccc" prefix="ccc" %>
<ccc:constantsMap className="com.example.YourConstants" var="constants" />
De cette façon, ils sont accessibles à l'habitude Javabean moyen en ${constants}
.
-
Si vous utilisez JSF2, alors vous pouvez utiliser <o:importConstants>
de OmniFaces.
<html ... xmlns:o="http://omnifaces.org/ui">
<o:importConstants type="com.example.YourConstants" />
De cette façon, ils sont accessibles à l'habitude Javabean moyen en #{YourConstants}
.
Créer une classe wrapper qui les renvoie par le biais de Javabean de style méthodes de lecture.
Créer un personnalisé EL résolveur qui balaye d'abord la présence d'une constante et, si l'absence, puis délégué à la résolution par défaut, sinon renvoie la valeur de la constante à la place.
Mise à jour: depuis EL 3.0 (JSR-341, une partie de Java EE 7), il est possible de constantes de référence dans EL à peu près de la même façon que <o:importConstants>
. Pour tous java.lang.*
classes, ils sont implicitement déjà importé et disponible comme ${Boolean.TRUE}
et ${Integer.MAX_VALUE}
. Pour les constantes personnalisées, vous devez utiliser ImportHandler#importClass()
ou peut - #importPackage()
.
Pour les JSP, vous pouvez configurer ce applicationwide dans un servlet contexte d'écoute comme suit:
@WebListener
public class Config implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
JspFactory.getDefaultFactory().getJspApplicationContext(event.getServletContext()).addELContextListener(new ELContextListener() {
@Override
public void contextCreated(ELContextEvent event) {
event.getELContext().getImportHandler().importClass("com.example.YourConstants");
}
});
}
// ...
}
Pour JSF, vous pouvez configurer ce applicationwide dans une application étendue de haricot comme suit:
@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");
}
});
}
}
A noté que la première version de l'actuel seulement "prêt pour la production" Java EE 7 mise en œuvre, GlassFish 4.0, a un bogue dans lequel ce ne parvient toujours pas à travailler. Voir aussi cette réponse: Constantes dans EL 3.0 - Fonction " T " est introuvable.