Em primeiro lugar, este post eu criei com o principal intuito de documenção para que eu não caia mais na mesma armadilha, e se cair, já sei onde está a solução mastigada. =P
Palavras-chave: EL, Expression-Language, Spring-MVC, projeto criado com Maven archetype maven-archetype-webapp.
Bom, iniciei um projeto utilizando Spring-MVC. Criei um projeto web com o archetype de projeto web via Maven.
Criei uma JSP conforme abaixo:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> This page lists all available products:<br> <c:forEach items="${products}" var="product"> <c:out value="${product.name}"/> <a href="view.html?id=<c:out value="${product.id}"/>">[View]</a> <a href="edit.html?id=<c:out value="${product.id}"/>">[Edit]</a> <br> <hr> </c:forEach> <br> <a href="edit.html">[Add]</a>Porém, quando eu acessava a página, o resultado era:
This page lists all available products: ${product.name} [View] [Edit] [Add]Olhando a saída acima é fácil perceber que as EL (Expression Languages) não estavam sendo processadas. Para resolver isso, acabei adicionando a diretiva isELIgnored=false no topo da minha JSP:
<%@ page isELIgnored="false" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> This page lists all available products:<br> <c:forEach items="${products}" var="product"> <c:out value="${product.name}"/> <a href="view.html?id=<c:out value="${product.id}"/>">[View]</a> <a href="edit.html?id=<c:out value="${product.id}"/>">[Edit]</a> <br> <hr> </c:forEach> <br> <a href="edit.html">[Add]</a>E assim a saída foi como esperado:
This page lists all available products: test [View] [Edit] Pro Spring Appes [View] [Edit] Pro Velocity [View] [Edit] Pro VS.NET [View] [Edit] [Add]Mas espera aí? Eu teria que ficar adicionando esta diretiva em todas minhas JSPs? Isso é muita gambiarra! Foi então que achei o seguinte post:
JSP 2.0 and losing the c:out tags
onde uma pessoa diz o seguinte:
"What version of the web-app.xml are you using? If you are using the older 2.3 version the EL expressions are ignored by default and you'll need a jsp page directive to set isElIgnored = false."
Nem precisei abrir o web.xml p/ saber se eu estava usando uma "older 2.3 version" na declaração do meu web-app.xml. Bastou eu lembrar que estou usando o archetype do maven: maven-archetype-webapp
O archetype acima gerou um web.xml da seguinte maneira:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> </web-app>
Bastou corrigir a forma de declaração do web-app para utilizar um schema atualizado e acabou a gambiarra:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>Archetype Created Web Application</display-name> </web-app>É isso aí... se alguém tiver o mesmo problema já fica mais fácil resolver.
Nenhum comentário:
Postar um comentário