Olá! estou tentando inserir um produto no banco de dados, mas estou tendo um problema para pegar a categoria. Obs: embora o meu select carregue a lista de categorias, quando verifico o controller a categoria vem null. recebo esse erro : org.apache.jasper.JasperException: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'categoria' available as request attribute
Classe ProdutoController
public class ProdutosController {
@Autowired
private ProdutoDAO produtoDAO;
@Autowired
private CategoriaDao categoriaDAO;
@RequestMapping("produtos/form")
public ModelAndView form() {
List<Categoria> categoria = categoriaDAO.listaTodos();
ModelAndView modelAndView = new ModelAndView("produtos/form"); //acrescentar categoria
modelAndView.addObject("categorias", categoria);
return modelAndView;
// return "produtos/form";
}
@RequestMapping(value = "/produtos", method = RequestMethod.POST)
public String grava(@ModelAttribute("produto") Produto produto) {
System.out.println(produto);
System.out.println(produto.getCategoria());
Categoria categoriaForm = categoriaDAO.buscaPorId(produto.getCategoria().getId());
produto.setCategoria(categoriaForm);
produtoDAO.adiciona(produto);
return "produtos/ok";
}
JSP
<form action="/teste/produtos" method="POST" modelAttribute="produto">
<div>
<label>Nome do Produto</label>
<input type="text" name="nome">
</div>
<div>
<label>Descrição</label>
<textarea rows="10" cols="20"
name="descricao"></textarea>
</div>
<div>
<label>Categoria</label>
<form:select path="categoria.id">
<form:option value="NONE"> --SELECT--</form:option >
<form:options items="${categorias}" itemValue="id" itemLabel="nome"></form:options>
</form:select >
</div>
<div>
<label>Valor</label>
<input type="text" name="valor">
</div>
<button type="submit">Cadastrar</button>
</form>
** Produto Model **
@Entity
@Table(name = "PRODUTO")
public class Produto {
@Id
@Column(name = "ID_PRODUTO")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
private String nome;
private String descricao;
private BigDecimal valor;
@ManyToOne
@JoinColumn(name = "ID_CATEGORIA")
private Categoria categoria;
//getters e setters omitidos
** Categoria Model **
@Entity
@Table(name = "CATEGORIA")
public class Categoria {
@Id
@Column(name = "ID_CATEGORIA")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String nome;
@OneToMany(targetEntity=Produto.class, mappedBy="categoria", fetch=FetchType.EAGER)
private List<Produto> produtos;
public Integer getId() {
return id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@OneToMany(mappedBy = "categoria", cascade = CascadeType.ALL)
public List<Produto> getProdutos() {
return produtos;
}
//getters e setters omitidos