2008-09-24 17 views
16

Tengo una clase que define los nombres de varias constantes, p. Ej.Constantes de Java en JSP

class Constants { 
    public static final String ATTR_CURRENT_USER = "current.user"; 
} 

me gustaría utilizar estas constantes dentro de un JSP sin utilizando el código Scriptlet tales como:

<%@ page import="com.example.Constants" %> 
<%= Constants.ATTR_CURRENT_USER %> 

Parece que hay una etiqueta en el Apache unstandard taglib que proporciona esta funcionalidad. Sin embargo, no puedo encontrar ninguna forma de descargar este taglib. Estoy comenzando a preguntarme si ha quedado obsoleto y la funcionalidad se ha movido a otra biblioteca de etiquetas (Apache).

¿Alguien sabe dónde puedo conseguir esta biblioteca, o si no está disponible, si hay alguna otra forma de que pueda acceder a las constantes en un JSP sin usar el código scriptlet?

Cheers, Don

Respuesta

-3

¿Por qué desea imprimir el valor de la constante en la JSP? Seguramente los está definiendo para que en el JSP pueda extraer objetos de la sesión y solicitarlos antes de presentarlos.

 

<%@ page import="com.example.Constants" %> 
<%@ page import="com.example.model.User" %> 
<% 
User user = (User) session.getAttribute(Constants.ATTR_CURRENT_USER); 
%> 

<h1>Welcome <%=user.getFirstName()%></h1> 

+1

Si pudiera volver a escribir esto sin usar Scriptlet, se le han respondido a mi pregunta. –

2

El inicio de la aplicación, se puede añadir el Constantes de clase a la ServletContext y luego acceder a ella en cualquier página JSP

servletContext.setAttribute("Constants", com.example.Constants); 

y luego acceder a ella en una página JSP

<c:out value="${Constants.ATTR_CURRENT_USER}"/> 

(es posible que tenga que crear getters para cada constante)

+13

Realmente quiero evitar crear getters para cada constante –

+2

La función setAttribute de servletContext recibe Object como parámetro de valor. ¿Estás seguro de que podemos transferir com.example.Constants? – nhthai

+0

¿dónde está el "inicio de la aplicación"? –

0

¿Qué tipo de funcionalidad desea? ¿utilizar? ¿Esa etiqueta debería poder acceder a cualquier campo de clase pública por nombre de clase y nombre de campo?

Scriptlets vinculados hechos en tiempo de compilación, pero el acceso de campo de la clase taglib tiene que usar dicha API java como reflejo en el tiempo de ejecución. ¿En serio necesitas eso?

1

Resulta que hay another tag library que proporciona la misma funcionalidad. También funciona para las constantes de Enum.

0

Usaré jakarta-taglibs-unstandard-20060829.jar en mi proyecto pero, es cierto, parece not available for download anymore.

Tengo que en mi pom.xml con el fin de conseguir que la biblioteca, pero creo que va a trabajar sólo porque esa biblioteca es ahora en mi repositorio local (no puedo encontrar en los repositorios oficiales):

<dependency> 
     <groupId>jakarta</groupId> 
     <artifactId>jakarta-taglibs-unstandard</artifactId> 
     <version>20060829</version> 
    </dependency> 

No sé si hay otra alternativa.

Espero que sí porque era una buena forma de acceder a las constantes en JSP.

1

Parece que un duplicado de accessing constants in JSP (without scriptlet)

Mi respuesta fue:

propiedades estáticas no son accesibles en EL. La solución alternativa que uso es crear una variable no estática que se asigna al valor estático.

public final static String MANAGER_ROLE = 'manager'; 
public String manager_role = MANAGER_ROLE; 

Utilizo lombok para generar el getter y el setter, así que está bastante bien. Su EL ve así:

${bean.manager_role} 

código completo en http://www.ninthavenue.com.au/java-static-constants-in-jsp-and-jsf-el

Cuestiones relacionadas