Jan 17

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.

Entradas relacionadas:

4 Responses to “Constantes en los beans y JSTL”

  1. Guido Says:

    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 Says:

    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 Says:

    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 Says:

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

Leave a Reply