2
respostas

JSP não interpreta as Expression Language

Boa noite comunidade,

O que está ocorrendo é que ao acessar a url http://localhost:8080/lanshow/produtos o resultado no browser é o seguinte: Lista de Produtos ${sucesso } Nome Descrição ${produto.nome } ${produto.descricao }

e ao acessar o form e mandar o submit, a url fica assim: http://localhost:8080/lanshow/produtos/${s:mvcUrl('PC#inserir').build() } consequentemente estoura um 404

segue o codigo: Lista:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2> Lista de Produtos</h2>

    <div>${sucesso }</div>

    <table>
        <tr>
            <td>Nome</td>
            <td>Descrição</td>
        </tr>

        <c:forEach items="${produtos }" var="produto">
            <tr>
                <td>${produto.nome }</td>
                <td>${produto.descricao }</td>
            </tr>
        </c:forEach>


    </table>

</body>
</html>

form:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

    <form:form action="${s:mvcUrl('PC#inserir').build() }" method="POST"
        modelAttribute="produto">
        <div>
            <label for="nome">Nome</label>
            <form:input path="nome" />
            <form:errors path="nome" />
        </div>

        <div>
            <label for="descricao">Descrição</label>
            <form:textarea path="descricao" rows="10" cols="20" />
            <form:errors path="descricao" />
        </div>

        <div>
            <label for="valor">Valor</label>
            <form:input path="valor" />
            <form:errors path="valor" />
        </div>

        <div>
            <label for="situacao">Situação</label>
            <form:input path="situacao" />
            <form:errors path="situacao" />
        </div>

        <button type="submit">Cadastrar</button>
    </form:form>
</body>
</html>

Controller:

package br.com.aos.lanshow.controllers;

import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import br.com.aos.lanshow.daos.DAOProduto;
import br.com.aos.lanshow.models.Produto;

@Controller
@RequestMapping("/produtos")
public class ProdutosController {

    @Autowired
    private DAOProduto daoProduto;

    @RequestMapping("/form")
    public ModelAndView form(Produto produto) {
        ModelAndView modelAndView = new ModelAndView("produto/form");

        return modelAndView;
    }

    @RequestMapping(method = RequestMethod.POST)
    public ModelAndView inserir(@Valid Produto produto, BindingResult result,
            RedirectAttributes redirectAttributes) {

        if(result.hasErrors()) {
            return form(produto);
        }

        daoProduto.inserir(produto);
        redirectAttributes.addFlashAttribute("sucesso", "Produto cadastrado com sucesso!");
        return new ModelAndView("redirect:produtos");
    }

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView listar() {
        List<Produto> produtos = daoProduto.listar();
        ModelAndView modelAndView = new ModelAndView("produto/lista");
        modelAndView.addObject("produtos", produtos);
        return modelAndView;

    }

}

Alguém já passou por isso?

Desde já agradeço.

2 respostas

Boa noite Artur,

Minha hipótese inicial: tenta tirar os espaços antes do fecha-chaves nas JSPs.

Avisa aí se deu certo.

Abraço.

Já tinha tentado isso =D

Solucionou dessa forma: https://stackoverflow.com/questions/793983/jsp-el-expression-is-not-evaluated/25372735#25372735

Primeiro foi inserindo essa linha no inicio da JSP <%@ page isELIgnored="false" %>

Depois vi nesse mesmo poste que tem a vê com o header que o maven cria. Mudei o header do pom.xml que o maven gerou para esse projeto, para o header que foi criado no projeto que fiz acompanhando o curso(que funcionava), removi a linha que tinha colocado na JSP que informei acima (que creio que não seja a melhor solução) e tudo ficou bem. =D

Segue os headers

Antigo:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>br.com.aos.lanshow</groupId>
    <artifactId>lanshow</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>lanshow Maven Webapp</name>
    <url>http://maven.apache.org</url>

Novo:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>br.com.aos.lanshow</groupId>
    <artifactId>lanshow</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

Sinceramente não entendi direito o que interferiu, mas agora está OK.

Se alguém entendeu o porque funcionou, me explique por gentileza. =D

Obrigado pelo apoio.

Bons estudos à todos.