Pessoal, estou com o seguinte problema:
De acordo com a apostila da Caelum, ao utilizar a Anotação @Path("/produtos/{id}’’) não é preciso de um para enviar o ID, pois o ID já é passado na URI. Ao usar essa URI com o método HTTP DELETE, dá ok. O problema é quando uso essa URI com o método HTTP PUT, a lógica é acionada porém o ID não é passado (null).
Segue a lógica do controller:
@Put @Path("/produtos/{id}")
public void alterar(Produto produto) {
System.out.println(produto.getDescricao()); //ok
System.out.println(produto.getNome()); //ok
System.out.println(produto.getPreco()); //ok
System.out.println(produto.getId()); //null
dao.atualiza(produto);
result.redirectTo(this).listar();
}
Segue a lógica do formulário de edição de um produto:
<form action="<c:url value="/produtos/${produto.id}"/>" method="POST">
<fieldset>
<legend>Editar Produto</legend>
<label for="nome">Nome:</label>
<input id="nome" type="text" name="produto.nome" value="${produto.nome}"/>
<label for="descricao">Descrição: </label>
<textarea id="descricao" name="produto.descricao">${produto.descricao}</textarea>
<label for="preco">Preço:</label>
<input id="preco" type="text" name="produto.preco" value="${produto.preco}"/>
<button type="submit" name="_method" value="PUT"> Enviar </button>
</fieldset>
</form>