Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Tela de cadastro de preços de produtos, erro com JSTL

Fiz a tela igual ao quer está no exercício, mas quando rodo e abro no navegador, o JSTL não está funcionando, pois não faz o laço para aparecer três campos de valores, pois aparece apenas um campo e com o label da seguinte forma: ${tipoPreco}

5 respostas

Edson, posta aqui seus códigos.

Oi Edson,

Verifique se você importou a tag JSTL que está querendo usar. No caso do c:forEach, você tem que colocar no início da página:

<%@ taglib prefix="c" 
           uri="http://java.sun.com/jsp/jstl/core" %>

Se não for isso, poste seu código para darmos uma olhada.

Controller e JSP

@Controller
public class ProdutosController {

    @Autowired
    private ProdutoDAO produtoDao;

    @RequestMapping("/produtos/form")
    public ModelAndView form() {
        ModelAndView modelAndView = new ModelAndView("produtos/form");
        modelAndView.addObject("tipos", TipoPreco.values());

        return modelAndView;
    }

    @RequestMapping("/produtos")
    public String gravar(Produto produto) {
        System.out.println(produto);        
        produtoDao.gravar(produto);
        return "produtos/ok";
    }
}



<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>Livros de String, Android, Java, JSF e muito mais - Casa do código</title>
</head>
<body>
    <form action="/casadocodigo/produtos" method="post">
        <div>
            <label>Titulo</label> <input type="text" name="titulo">
        </div>

        <div>
            <label>Descrição</label>
            <textarea rows="10" cols="20" name="descricao"></textarea>
        </div>

        <div>
            <label>Páginas</label> <input type="text" name="paginas">
        </div>

        <c:forEach var="tipoPreco"  items="${tipos}" varStatus="status">
            <div>
                <label>${tipoPreco}</label>
                <input type="text" name="precos[${status.index}].valor">
                <input type="hidden" name="precos[${status.index}].tipo" value="${tipoPreco}">
            </div>
        </c:forEach>

        <button type="submit">Cadastrar</button>
    </form>

</body>
</html>

Puts, não é só colocar o código entre backticks??

solução!

Descobri o problema, estava bem longe do controller e do JSP, o web.xm estava errado, ao invés de:

<?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"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <display-name>casadocodigo</display-name>
</web-app>

estava

<!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>