Desde o início quando estava testando o adicionar, os campos ficavam nulos, porém adicionava. Não me preocupei antes, mas agora comecei testar as validações e não está funcionando.
Debugando vi que nenhum valor do formulário está sendo passado para o método adiciona da classe ProdutoController. Como são parâmetros de entrada do início do processo, isso deveria já vir preenchido, por este motivo não sei nem por onde começar.
Por favor poderiam me auxiliar para descobrir o problema? Consigo saber o conteúdo ${produto.campo} da jsp em tempo de debug?
Obrigada.
formulario.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../bootstrap/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="../base.css">
<title>Novo formulário</title>
</head>
<body>
<form action="<c:url value="/produto/adiciona" />" method="post">
Nome:<input class="form-control" type="text" name="${produto.nome }" />
Valor:<input class="form-control" type="text" name="${produto.valor }" />
Quantidade:<input class="form-control" type="text" name="${produto.quantidade }" />
<input class="btn btn-primary" type="submit" name="adiciona" value="Adicionar" />
</form>
<c:forEach items="${errors}" var="erro">
${erro.category } - ${erro.message}
</c:forEach>
</body>
</html>
ProdutoController
package br.com.caelum.vraptor.controller;
import java.util.List;
import javax.inject.Inject;
import javax.validation.Valid;
import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.dao.ProdutoDao;
import br.com.caelum.vraptor.model.Produto;
import br.com.caelum.vraptor.validator.Validator;
@Controller
public class ProdutoController {
private final Result result;
private final ProdutoDao dao;
private final Validator validator;
@Inject
public ProdutoController(Result result, ProdutoDao dao, Validator validator) {
this.result = result;
this.dao = dao;
this.validator = validator;
}
public ProdutoController() {
this(null, null, null);
}
public void sobre(){}
@Get
public void formulario(){}
@Get
public List<Produto> lista(){
return dao.lista();
}
@Post
public void adiciona(@Valid Produto produto){
validator.onErrorUsePageOf(this).formulario();
dao.adiciona(produto);
result.include("mensagem", "Produto adicionado com sucesso!");
result.redirectTo(this).lista();
}
public void remove(Produto produto){
dao.remove(produto);
result.include("mensagem", "Produto removido com sucesso!");
result.redirectTo(this).lista();
}
}
ProdutoDao
package br.com.caelum.vraptor.dao;
import java.util.List;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import br.com.caelum.vraptor.model.Produto;
public class ProdutoDao {
private final EntityManager em;
@Inject
public ProdutoDao(EntityManager em) {
this.em = em;
}
public ProdutoDao() {
this(null);
}
public void adiciona(Produto produto) {
em.getTransaction().begin();
em.persist(produto);
em.getTransaction().commit();
}
public void remove(Produto produto) {
em.getTransaction().begin();
em.remove(busca(produto));
em.getTransaction().commit();
}
public Produto busca(Produto produto) {
return em.find(Produto.class, produto.getId());
}
@SuppressWarnings("unchecked")
public List<Produto> lista() {
return em.createQuery("select p from Produto p").getResultList();
}
}
Produto
package br.com.caelum.vraptor.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
public class Produto {
@GeneratedValue @Id
private Long id;
@NotNull(message="{nome.obrigatorio}")
@NotEmpty(message="{nome.obrigatorio}")
@Size(min=2, message="{nome.quantidade.minima}")
private String nome;
@Min(value=0, message="{produto.valor.negativo}")
private Double valor;
@Min(value=0, message="{produto.quantidade.negativa}")
private Integer quantidade;
public Produto() {
}
public Produto(String nome, Double valor, Integer quantidade) {
this.nome = nome;
this.valor = valor;
this.quantidade = quantidade;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Double getValor() {
return valor;
}
public void setValor(Double valor) {
this.valor = valor;
}
public Integer getQuantidade() {
return quantidade;
}
public void setQuantidade(Integer quantidade) {
this.quantidade = quantidade;
}
}