Después de tanto luchar hemos encontrado el resultado de esta dificultad que algunos de nuestros lectores de este sitio han presentado. Si tienes algún dato que aportar puedes aportar tu información.
Solución:
No está funcionando en tu ejemplo porque el ATTR_CURRENT_USER
La constante no es visible para las etiquetas JSTL, que esperan que las funciones captadoras expongan las propiedades. No lo he probado, pero la forma más limpia de exponer sus constantes parece ser la biblioteca de etiquetas no estándar.
ETA: El enlace anterior que di no funcionó. Se pueden encontrar nuevos enlaces en esta respuesta: constantes de Java en JSP
Fragmentos de código para aclarar el comportamiento que está viendo: Clase de muestra:
package com.example;
public class Constants
// attribute, visible to the scriptlet
public static final String ATTR_CURRENT_USER = "current.user";
// getter function;
// name modified to make it clear, later on,
// that I am calling this function
// and not accessing the constant
public String getATTR_CURRENT_USER_FUNC()
return ATTR_CURRENT_USER;
Fragmento de la página JSP, que muestra el uso de muestra:
<%-- Set up the current user --%>
<%
session.setAttribute("current.user", "Me");
%>
<%-- scriptlets --%>
<%@ page import="com.example.Constants" %>
Using scriptlets
Constants.ATTR_CURRENT_USER
<%=Constants.ATTR_CURRENT_USER%>
Session[Constants.ATTR_CURRENT_USER]
<%=session.getAttribute(Constants.ATTR_CURRENT_USER)%>
<%-- JSTL --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Using JSTL
Constants.getATTR_CURRENT_USER_FUNC()
Session[Constants.getATTR_CURRENT_USER_FUNC()]
Constants.ATTR_CURRENT_USER
<%--
Commented out, because otherwise will error:
The class 'com.example.Constants' does not have the property 'ATTR_CURRENT_USER'.
cons.ATTR_CURRENT_USER
--%>
Esto da como resultado:
Uso de scriptlets
Constantes.ATTR_CURRENT_USER
usuario actual
Sesión[Constants.ATTR_CURRENT_USER]
Me
Usando JSTL
Constantes.getATTR_CURRENT_USER_FUNC()
usuario actual
Sesión[Constants.getATTR_CURRENT_USER_FUNC()]
Me
Constantes.ATTR_CURRENT_USER
Puede definir Constants.ATTR_CURRENT_USER como una variable con c:set, tal como se muestra a continuación:
<%-- Do somthing --%>
el tema es bastante viejo, pero en fin.. 🙂
Encontré una buena solución para tener constantes disponibles a través de JSTL. Debes preparar un mapa usando la reflexión y ponerlo donde quieras.
El mapa siempre contendrá todas las constantes que defina en la clase Constants. Puede ponerlo en ServletContext usando un oyente y disfrutar de constantes en JSTL como:
$CONSTANTS["CONSTANT_NAME_IN_JAVA_CLASS_AS_A_STRING"]
CONSTANTES aquí hay una key usaste poner el mapa en contexto 🙂
La siguiente es una parte de mi código que construye un mapa de los campos constantes:
Map map = new HashMap();
Class c = Constants.class;
Field[] fields = c.getDeclaredFields();
for (Field field : fields)
int modifier = field.getModifiers();
if (Modifier.isPublic(modifier) && Modifier.isStatic(modifier) && Modifier.isFinal(modifier))
try
map.put(field.getName(), field.get(null));//Obj param of get method is ignored for static fields
catch (IllegalAccessException e) /* ignorable due to modifiers check */
Reseñas y calificaciones
Si guardas alguna desconfianza o forma de innovar nuestro enunciado puedes añadir una apostilla y con placer lo leeremos.