Saltar al contenido

acceder a constantes en JSP (sin scriptlet)

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *