Constantes en los beans y JSTL

A veces, en una aplicación web con JSTL nos vendría bien tener una constante definida en uno de los beans de java, estilo

public class UnaClase {
   public static final String UNA_CONSTANTE = "algo";
   …
}

y luego poder llamarla desde JSTL con algo como

<jsp:useBean id="bean" class="com.chuidiang.UnaClase"></jsp:useBean>

<c:out value="${bean.UNA_CONSTANTE}" />

Desgraciadamente, eso no funciona. JSTL presupone que UNA_CONSTANTE es un atributo del bean y va a convertir ese ${bean.UNA_CONSTANTE} en una llamada al método bean.getUNA_CONSTANTE() que no existe.

La solución es fácil, basta con crear un método getUNA_CONSTANTE() en el bean que devuelva el valor de la constante. Unicamente tenemos que tener en cuenta que ese método no puede ser static, puesto que si no JSTL tampoco lo llamará (por debajo, probablemente usa la introspección de java y no busca métodos estáticos). El bean quedaría así

public class UnaClase {
   public static final String UNA_CONSTANTE = "algo";

   public String getUNA_CONSTANTE () {
      return UnaClase.UNA_CONSTANTE;
   }

}

que sí funciona como esperamos.

Esta entrada ha sido publicada en java y etiquetada como , , . Guarda el enlace permanente.

4 respuestas a Constantes en los beans y JSTL

  1. Guido dijo:

    Me parece que ensucia un poco el código, yo no sé si podría dormir tranquilo. Probablemente sea preferible utilizar alguna taglib específica como la «Unstandard Tag Library» de Apache, que incluye este tipo de funciones tantas veces pedidas por los desarrolladores:
    http://jakarta.apache.org/taglibs/sandbox/doc/unstandard-doc/index.html#useConstants

    Saludos.

  2. Chuidiang dijo:

    No la conocía. Un ejemplo específico para el uso de constantes con esa extensión unstandard tag library en http://blog.tallan.com/2010/07/01/the-unstandard-tag-library-using-constants-within-jsps/

    Gracias y se bueno.

  3. dsromero dijo:

    Pues aunque no quede tan limpio como usando la taglib que comentáis (la cual tampoco conocía dicho sea de paso) me parece una solución muy útil, sobre todo si no puedes agregar librerías al proyecto así como así.

    Un saludo.

  4. Nacho dijo:

    Me parece suciete. En estos casos, mejor un .properties que puedes cargar tanto en Java como en JSTL.

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.