Ricardo, boa tarde!
Cara pesquisei e tentei fazer mais nunca da certo.
Segue minha JSP, tentei fazer deixando apenas os atributos que vão direto para a entidade Produto. Porem não aparece nem o formulário de cadastro da erro logo na primeira linha onde tem o .
O erro é :
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'produto' available as request attribute
<%@ 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://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!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">
<title>Mercadinho-JT - Cadastro de Produtos</title>
</head>
<body>
<form:form id="formularioCadProdutos" action="/mercadinho-jt/produtos" method="POST" modelAttribute="produto">
<div>
<label>Código de Barras</label>
<form:input type="text" id="codigoBarras" name="codigoBarras" path="codigoBarras"/>
</div>
<div>
<label>Nome Produto</label>
<form:input type="text" id="nomeProduto" name="nomeProduto" path="nome"/>
</div>
<div>
<label>Qunatidade</label>
<form:input type="text" id="quantidade" name="quantidade" path="quantidade"/>
</div>
<div>
<label>Número da Nota Fiscal</label>
<form:input type="text" id="numeroNF" name="numeroNF" path="numeroNF"/>
</div>
<div>
<label>Preço de Compra</label>
<form:input type="text" id="vlCompra" name="vlCompra" path="vlCompra"/>
</div>
<div>
<label>Preço de Venda</label>
<form:input type="text" id="vlVenda" name="vlVenda" path="vlVenda"/>
</div>
<div>
<!-- MARCA É UMA ENTIDADE, E A ENTIDADE PRODUTO TEM UM ATIBUTO DO TIPO MARCA QUE RECEBE O CÓDIGO DA MARCA -->
<label>Marca Produto</label>
<select id="marcaProduto" name="marcaProduto">
<option value="">Selecione a Marca</option>
<c:forEach items="${marcas }" var="marcas">
<option value="${marcas.idMarca }">${marcas.nome }</option>
</c:forEach>
</select>
</div>
<div>
<!-- FORNECEDOR É UMA ENTIDADE, E A ENTIDADE PRODUTO TEM UM ATIBUTO DO TIPO FORNECEDOR QUE RECEBE O CÓDIGO DO FORNECEDOR -->
<label>Forncedor</label>
<select id="fornecedor" name="fornecedor">
<option value="">Selecione o Fornecedor</option>
<c:forEach items="${fornecedores }" var="fornecedor">
<option value="${fornecedor.id_Fornecedor }"> ${fornecedor.nome}</option>
</c:forEach>
</select>
</div>
<div>
<!-- CATEGÓRIA É UMA ENTIDADE, E A ENTIDADE PRODUTO TEM UM ATIBUTO DO TIPO CATEGÓRIA QUE RECEBE O CÓDIGO DA CATEGÓRIA -->
<label>Categória do Produto</label>
<select id="categoria" name="categoria">
<option value="">Selecione a Categória</option>
<c:forEach items="${categorias }" var="categoria">
<option value="${categoria.id_Categoria }"> ${categoria.nome}</option>
</c:forEach>
</select>
</div>
<button type="submit" id="btn-cadastrarProduto">Cadastrar Produto</button>
</form:form>
</body>
</html>
O meu Controller está assim:
@RequestMapping(method=RequestMethod.POST)
public ModelAndView cadastrarProduto(@ModelAttribute("produto") @Validated Produto produto, BindingResult result, RedirectAttributes redirectAttributes){
System.out.println(produto.getNome());
if(result.hasErrors()){
return executa();
}
//dao.create(produto);
redirectAttributes.addFlashAttribute("sucesso","Produto Cadastrado Com Sucesso!!");
return new ModelAndView("redirect:produtos");
}
Como eu havia dito sobre a outra entidade que seria Categoria que possui na entidade Produto um atributo que uso para inserir na tabela produto no DB. Eu tenho outras duas entidades que possuem basicamente a mesma ideia onde tenho um <select que seleciono a opção e pego o código como esta demonstrado na pagina jsp. Se você puder me ajudar nessa questão, pois realmente não estou conseguindo fazer. Caso não seja possível irei ficar com a forma que já havia feito.
Obrigado, agradeço desde já!!!