domingo, 15 de julho de 2012

cuidado com maven-archetype-webapp

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:

<%@ 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