cuidado com maven-archetype-webapp
Autor: Adolfo Eloy | Publicado: 2012-07-15T16:51:00-07:00

Bizarro!


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:


&lt;%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %&gt;

This page lists all available products:&lt;br&gt;
&lt;c:forEach items="${products}" var="product"&gt;
    &lt;c:out value="${product.name}"/&gt;
    &lt;a href="view.html?id=&lt;c:out value="${product.id}"/&gt;"&gt;[View]&lt;/a&gt;&nbsp;
    &lt;a href="edit.html?id=&lt;c:out value="${product.id}"/&gt;"&gt;[Edit]&lt;/a&gt;&nbsp;&lt;br&gt;
    &lt;hr&gt;
&lt;/c:forEach&gt;
&lt;br&gt;
&lt;a href="edit.html"&gt;[Add]&lt;/a&gt;


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:


&lt;%@ page isELIgnored="false" %&gt;
&lt;%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %&gt;

This page lists all available products:&lt;br&gt;
&lt;c:forEach items="${products}" var="product"&gt;
    &lt;c:out value="${product.name}"/&gt;
    &lt;a href="view.html?id=&lt;c:out value="${product.id}"/&gt;"&gt;[View]&lt;/a&gt;&nbsp;
    &lt;a href="edit.html?id=&lt;c:out value="${product.id}"/&gt;"&gt;[Edit]&lt;/a&gt;&nbsp;&lt;br&gt;
    &lt;hr&gt;
&lt;/c:forEach&gt;
&lt;br&gt;
&lt;a href="edit.html"&gt;[Add]&lt;/a&gt;


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:


&lt;!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" &gt;

&lt;web-app&gt;
  &lt;display-name&gt;Archetype Created Web Application&lt;/display-name&gt; 
&lt;/web-app&gt;


Bastou corrigir a forma de declaração do web-app para utilizar um schema atualizado e acabou a gambiarra:


&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;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"&gt;

  &lt;display-name&gt;Archetype Created Web Application&lt;/display-name&gt;
  
&lt;/web-app&gt;


É isso aí... se alguém tiver o mesmo problema já fica mais fácil resolver.