JSTL y EL en Tomcat 5.x

Wednesday March 15th 2006, 3:45 pm
Filed under: Java

Este es un problema que aparentemente le ocurre a bastante gente, incluyéndome.

La mayoría de los artículos sobre JSTL dicen que hay que poner el siguiente tag para poder usar los tags de JSTL con expresiones EL:

< %@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

Pero al escribir en el JSP algo asi como:

<c:if test="${param.isPopup}" >

nos encontramos conque el JSP no se muestra, y aparece una linda excepción:

According to TLD or attribute directive in tag file, attribute test does not accept any expressions

Lo qué? No era que se podian usar las expresiones EL? Con esto uno se puede romper la cabeza varias horas, hasta que en algún lugar alguien sugiere usar:

< %@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>

Entonces todo funciona bien, pero cómo puede ser si ese uri es para run time expressions, las antiguas y limitadas expresiones de JSP?

La respuesta a esto yace en Tomcat. La version 5.x soporta JSP 2.0, que incluye soporte para expresiones EL. Entonces, al usar la version EL de los tags JSTL, las expresiones se intentan evaluar dos veces: una por Tomcat, y otra por los tags. La versión RT no intenta evaluar la expresión EL que ya evaluó Tomcat, y por lo tanto funciona.

La solución correcta? Usar el uri de la versión 1.1 de JSTL, que es este:

< %@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

Corolario:

No olvidemos que como Tomcat evalúa las expresiones EL directamente, éstas se pueden escribir en el código HTML sin necesidad de usar el tag <c:out>, por ejemplo:

<h1>${form.pageTitle}</h1>


| show comments »
2 Comments so far
Leave a comment



Leave a comment
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(required)

(required)