Prezados, boa tarde.
Estou com um problema em alterar o status de um item na minha tabela de False para True, não acho que o método esteja errado pois quando eu faço o teste na aplicação ele altera na base de dados, porém pelo JSTL não.
Método que ativa o produto:
public void ativarProduto(Produto pProduto){
EntityManager con = ConnectionFactory.getConnection();
pProduto.setStatus(true);
try{
con.getTransaction().begin();
con.persist(pProduto);
con.getTransaction().commit();
}finally{
con.close();
}
}
O arquivo .JSP
<h3>Produtos a habilitar</h3>
<jsp:useBean id="dao" class="br.com.Muambyte.produto.ProdutoDAO"/>
<jsp:useBean id="produto" class="br.com.Muambyte.produto.Produto"/>
<table class="table table-condensed table-striped table-hover table-bordered">
<tr>
<th>Nome</th>
<th>Valor</th>
<th>Status</th>
<th>Quantidade</th>
<th></th>
</tr>
<c:forEach var="produto" items="${dao.listaProdutos}">
<tr>
<td>${produto.nome}</td>
<td>${produto.valor}</td>
<td style="color: red; font-weight: bold;">Produto Desativado</td>
<td>${produto.quantidade}</td>
<td><button action="ativarProduto" type="submit">Habilitar!</button></td>
</tr>
</c:forEach>
</table>
Poderiam me ajudar nesta questão? Eu simplesmente empaquei aí.
Esqueci de informar sobre a classe Produto.
package br.com.Muambyte.produto;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import br.com.Muambyte.pedidoProduto.PedidoProduto;
@Entity
public class Produto implements Serializable{
private static final long serialVersionUID = 1L;
//MEMBROS
@Id @GeneratedValue
private Long produto_id;
@Column(length=30,nullable=false,unique=true)
private String nome;
@Column(nullable=false)
private double valor;
@Column(nullable=false,length=200)
private String descricao;
@Column(columnDefinition="bit default 0")
private boolean status;
@Column(nullable=false)
private int quantidade;
amigão seu método “ativarProduto” recebe um parametro chamado pProduto assim:
public void ativarProduto(Produto pProduto){
Mas quando você requisita esse método você não passa o parametro:
<button action="ativarProduto" type="submit">Habilitar!</button>
Não seria o caso de você fazer isso?
<button action="ativarProduto(${produto})" type="submit">Habilitar!</button>
Então Satangozo, tentei desta forma e não deu certo, será que estou errando na hora de construir a controller?
@RequestMapping("ativarProduto")
public String ativaProduto(Produto produto) {
ProdutoDAO dao = new ProdutoDAO();
dao.ativarProduto(produto);
return "ativado";
}
Onde está seu:
<form></form>
Mesmo que você esteja dando submit se não tem formulário pra enviar ele não vai…
Formulário para apenas alterar o status de um item de uma tabela? Ok, irei tentar.
Mas homiiii… Qualquer alteração CRUD neste tipo de caso é disparado a partir de um form… Seja ela create, update, ou delete =D, existem outras abordagens mas no feijão com arroz devemos ter formulários…