Olá gostaria de saber como seria o código para excluir e alterar um produto no banco de dados por meio de um botoes na lista de produtos, já tentei de tudo e não consegui implementar.
Atenciosamente
Leonardo
Olá gostaria de saber como seria o código para excluir e alterar um produto no banco de dados por meio de um botoes na lista de produtos, já tentei de tudo e não consegui implementar.
Atenciosamente
Leonardo
Oi Leonardo, acho que a primeira coisa é você postar aqui para a gente a sua tentativa :). Teoricamente, cada um dos botões apontaria para um link com o id do produto que deve ser deletado e editado. E aí métodos diferentes no controller seriam acionados.
Então alberto não sei o que passar no @RequestMapping, e como referenciar na lista.jsp
ProdutosController
@RequestMapping(value="", method=RequestMethod.POST)
public String excluir(Produto produto) {
produtoDao.excluir(produto);
return "produtos";
}
ProdutoDAO
public void excluir(Produto produto){
manager.remove(produto);
}
lista.jsp
<%@ 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://www.springframework.org/tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Livros de Java, Android, iPhone, Ruby, PHP e muito mais - Livraria do Programador</title>
<c:url value="/resources/css" var="cssPath" />
<link rel="stylesheet" href="${cssPath}/bootstrap.min.css">
<link rel="stylesheet" href="${cssPath}/bootstrap-theme.min.css">
<style type="text/css">
body{padding-top: 60px 0px;}
</style>
</head>
<body>
<nav class="navbar navbar-inverse">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="${s:mvcUrl('HC#index').build()}">Livraria do Programador</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="${s:mvcUrl('PC#form').build()}">Cadastro de Produtos</a></li>
<li><a href="${s:mvcUrl('PC#listar').build()}">Lista de Produtos</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</div>
</nav>
<div class="container">
<h1>Lista de Produtos</h1>
<p> ${message} </p>
<table class="table table-bordered table-striped table-hover">
<tr>
<th>Título</th>
<th>Descrição</th>
<th>Páginas</th>
<th>Ação</th>
</tr>
<c:forEach items="${produtos}" var="produto">
<tr>
<td>
<a href="${s:mvcUrl('PC#detalhe').arg(0, produto.id).build()}">${produto.titulo}</a>
</td>
<td>${produto.descricao}</td>
<td>${produto.paginas}</td>
<td>
<form action="${s:mvcUrl('PC#excluir').build() }" method="post">
<button type="submit" >excluir</button>
</form>
</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
O Path variable representa estes ids que vem da requisição
@RequestMapping("{codigo}")
public ModelAndView edicao(@PathVariable("codigo") Objeto objeto) {
//...
}
@RequestMapping(value="{codigo}", method = RequestMethod.DELETE)
public String excluir(@PathVariable Long codigo, RedirectAttributes attributes) {
//...
}
No caso do editar, um link comum resolve, já no caso do delete, como os navegadores só implementam get e post, vc precisa passar um campo hidden com o method
<td>
<form action='/remover'" method="POST">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="remover"/>
</form>
</td>
depois para ajustar a aparência vc pode ciar o botão com aparência de links, ou os links em forma de botão, como uso bootstrap eu coloco tudo com aparência de botão.
Olá, peço desculpas pela demora
Consegui fazer o remover, ao clicar no link remover o produto é removido do banco de dados. Segue o que eu fiz: Metodo da classe ProdutosController
@RequestMapping(method = RequestMethod.GET, value = "remover/{id}")
public String remover(@PathVariable("id") Integer id) {
produtoDao.remover(id);
return "redirect:/produtos";
}
classe ProdutoDAO
public void remover(Integer id) {
manager.remove(findById(id));
}
link com a pagina de listagem lista.jsp
<c:forEach items="${produtos }" var="produto">
<tr>
<td>
<a href="${s:mvcUrl('PC#detalhe').arg(0,produto.id).build() }">${produto.titulo }</a>
</td>
<td>${produto.descricao }</td>
<td>${produto.precos }</td>
<td>${produto.paginas }</td>
<td>
<a href="<c:url value='produtos/remover'/>/${produto.id}">Remover</a>
</td>
</tr>
</c:forEach>
Porém continuo com dificuldade com o Editar, nao sei como fazer para redirecionar exibindo os dados do produto no form de cadastro
Segue os códigos:
classe ProdutosController
@RequestMapping(method = RequestMethod.POST, value = "produtos/{id}/form")
public ModelAndView atualizar(@PathVariable("id") Integer id, @Valid Produto produto, BindingResult result) {
if (result.hasErrors()) {
return form(produto);
}
produtoDao.atualizar(produto);
return new ModelAndView("redirect:produtos/form-update");
}
classe ProdutoDAO
public void atualizar(Produto produto) {
manager.merge(produto);
}
link na listagem de produtos lista.jsp
<c:forEach items="${produtos }" var="produto">
<tr>
<td>
<a href="${s:mvcUrl('PC#detalhe').arg(0,produto.id).build() }">${produto.titulo }</a>
</td>
<td>${produto.descricao }</td>
<td>${produto.precos }</td>
<td>${produto.paginas }</td>
<td>
<a href="<c:url value='produtos/${produto.id}/form'/>">Alterar</a>
<a href="<c:url value='produtos/remover'/>/${produto.id}">Remover</a>
</td>
</tr>
</c:forEach>
</table>
E a página form-update.jsp
<%@ 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://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Livro de Java, Android, iPhone, Ruby, PHP e muito mais - Livraria do Programador</title>
<c:url value="/resources/css" var="cssPath" />
<link rel="stylesheet" href="${cssPath }/bootstrap.min.css">
<link rel="stylesheet" href="${cssPath }/bootstrap-theme.min.css">
<style type="text/css">
body {
padding: 60px 0px;
}
</style>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="${s:mvcUrl('HC#index').build() }">Livraria do Programador</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="${s:mvcUrl('PC#listar').build() }">Lista de Produtos</a></li>
<li><a href="${s:mvcUrl('PC#form').build() }">Cadastro de Produtos</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<div class="container">
<h1>atualizar produto</h1>
<form:form action="${s:mvcUrl('PC#atualizar').build() }" method="PUT"
commandName="produto" enctype="multipart/form-data">
<div class="form-group">
<label>Titulo</label>
<form:input path="titulo" cssClass="form-control" />
<form:errors path="titulo" />
</div>
<div class="form-group">
<label>Descição</label>
<form:textarea path="descricao" cssClass="form-control" />
<form:errors path="descricao" />
</div>
<div class="form-group">
<label>Páginas</label>
<form:input path="paginas" cssClass="form-control"/>
<form:errors path="paginas" />
</div>
<div class="form-group">
<label>Data de Lançamento</label>
<form:input path="dataLancamento" cssClass="form-control"/>
<form:errors path="dataLancamento"/>
</div>
<c:forEach items="${tipos }" var="tipoPreco" varStatus="status">
<div class="form-group">
<label>${tipoPreco }</label>
<form:input path="precos[${status.index }].valor" cssClass="form-control" />
<form:hidden path="precos[${status.index }].tipo" value="${tipoPreco }" />
</div>
</c:forEach>
<button type="submit" class="btn btn-primary">Atualizar</button>
</form:form>
</div>
</body>
</html>