viernes, 18 de marzo de 2011

Problema con templates javascript #{...} en JSP

Trabajando con Tomcat 6 y jsp, me he encontrado con un problema cuando intento utilizar plantillas (templates) para utilizar desde la parte de javascript con jQuery o Prototype.

La sintaxis para utilizar estos templates tiene esta forma #{...}, pero al compilar las JSPs que tienen estos templates en su contenido, Tomcat arroja esta excepción:
(...)

org.apache.jasper.JasperException: /WEB-INF/jsp/home.jsp(45,5) #{..} no está permitido en texto de plantilla
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:102)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:706)
at org.apache.jasper.compiler.Node$ELExpression.accept(Node.java:958)

(...)

Buscando por el problema en Internet, la mejor solución que he encontrado es añadir en la JSP la siguiente sentencia:

<%@page deferredSyntaxAllowedAsLiteral="true"%>


En mi caso lo he incluido justo después de declarar las taglib que utilizo, quedando así:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"
%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"
%><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"
%><%@ taglib prefix="spring" uri="http://www.springframework.org/tags"
%><%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json"
%><%
/*Para evitar error #{..} is not allowed in template text  */
%><%@page deferredSyntaxAllowedAsLiteral="true"%>

Página donde encontré finalmente la mejor solución: http://mail-archives.apache.org/...

Espero que os sirva.