Datatable edit do primefaces não envia valor atualizado para edição.
10/10/2016
0
Boa tarde pessoal! Estou tentando realizar um update através do datatable edit do primefaces, porém não envia o valor do inputtext atualizado para o bean. O processo ocorre quase que corretamente, o valor é enviado e atualizado, porém o valor antigo, já carregado na datatable.
alguém pode me ajudar nessa
listaProduto.xhtml
ProdutoBean
package manager;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.RowEditEvent;
import br.com.estoque.model.Produto;
import br.com.estoque.persistence.ProdutoDao;
@ManagedBean(name="pBean")
@ViewScoped
public class ProdutoBean {
private Produto produto;
private List<Produto> listaproduto;
public ProdutoBean() {
produto = new Produto();
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public List<Produto> getListaproduto() {
try{
listaproduto = new ProdutoDao().listar();
}catch(Exception e){
e.printStackTrace();
}
return listaproduto;
}
public void setListaproduto(List<Produto> listaproduto) {
this.listaproduto = listaproduto;
}
public String cadastrar() {
FacesContext fc = FacesContext.getCurrentInstance();
try{
new ProdutoDao().cadastrar(produto);
fc.addMessage("formproduto", new FacesMessage(produto.getNome() + "produto cadastrado com sucesso"));
produto = new Produto();
}catch(Exception e){
e.printStackTrace();
fc.addMessage("formproduto", new FacesMessage(produto.getNome() + "Não cadastrado"));
}
return null;
}
public void onRowEdit(RowEditEvent event) {
System.out.println(produto);
produto = ((Produto) event.getObject());
System.out.println(produto);
}
public void onRowCancel(RowEditEvent event) {
FacesMessage msg = new FacesMessage("Edit Cancelled");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
alguém pode me ajudar nessa
listaProduto.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui"> <ui:composition template= "template.xhtml"> <ui:define name="conteudo" > <h:form id="form"> <p:growl id="msgs" showDetail="true"/> <p:dataTable var="prod" value="#{pBean.listaproduto}" editable="true" style="margin-bottom:20px" id="listaproduto1" > <p:ajax event="rowEditInit" listener="#{pBean.onRowEdit}" update=":form:msgs" immediate="true" /> <p:ajax event="rowEditCancel" listener="#{pBean.onRowCancel}" update=":form:msgs" /> <p:column headerText="Id"> <h:outputText value="#{prod.id}"/> </p:column> <p:column headerText="Nome"> <p:cellEditor> <f:facet name="output"><h:outputText value="#{prod.nome}"/></f:facet> <f:facet name="input"><p:inputText value="#{prod.nome}" style="width:100%"/></f:facet> </p:cellEditor> </p:column> <p:column headerText="Preço"> <p:cellEditor> <f:facet name="output"><h:outputText value="#{prod.preco}"/></f:facet> <f:facet name="input"><p:inputText value="#{prod.preco}" style="width:100%"/></f:facet> </p:cellEditor> </p:column> <p:column headerText="Fornecedor"> <p:cellEditor> <f:facet name="output"><h:outputText value="#{prod.fornecedor}"/></f:facet> <f:facet name="input"><p:inputText value="#{prod.fornecedor}" style="width:100%"/></f:facet> </p:cellEditor> </p:column> <p:column headerText="Categoria"> <p:cellEditor> <f:facet name="output"><h:outputText value="#{prod.categoria}"/></f:facet> <f:facet name="input"><p:inputText id="cate" value="#{prod.categoria}" style="width:100%"/></f:facet> </p:cellEditor> </p:column> <p:column style="width:32px"> <p:rowEditor /> </p:column> </p:dataTable> </h:form> </ui:define> </ui:composition> </html>
ProdutoBean
package manager;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.RowEditEvent;
import br.com.estoque.model.Produto;
import br.com.estoque.persistence.ProdutoDao;
@ManagedBean(name="pBean")
@ViewScoped
public class ProdutoBean {
private Produto produto;
private List<Produto> listaproduto;
public ProdutoBean() {
produto = new Produto();
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public List<Produto> getListaproduto() {
try{
listaproduto = new ProdutoDao().listar();
}catch(Exception e){
e.printStackTrace();
}
return listaproduto;
}
public void setListaproduto(List<Produto> listaproduto) {
this.listaproduto = listaproduto;
}
public String cadastrar() {
FacesContext fc = FacesContext.getCurrentInstance();
try{
new ProdutoDao().cadastrar(produto);
fc.addMessage("formproduto", new FacesMessage(produto.getNome() + "produto cadastrado com sucesso"));
produto = new Produto();
}catch(Exception e){
e.printStackTrace();
fc.addMessage("formproduto", new FacesMessage(produto.getNome() + "Não cadastrado"));
}
return null;
}
public void onRowEdit(RowEditEvent event) {
System.out.println(produto);
produto = ((Produto) event.getObject());
System.out.println(produto);
}
public void onRowCancel(RowEditEvent event) {
FacesMessage msg = new FacesMessage("Edit Cancelled");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
Diego Sounobre
Curtir tópico
+ 0
Responder
Posts
13/10/2016
Diego Sounobre
Pessoal, consegui resolver. na verdade o problema estava no meu get listaprodutos... após inserir um if e else, testando se lista produto era nulo, funcionou normalmente.
O legal é, como o amigo indicou, verificar sempre os valores passados pelo network do navegador.
Abraços
O legal é, como o amigo indicou, verificar sempre os valores passados pelo network do navegador.
Abraços
Responder
Clique aqui para fazer login e interagir na Comunidade :)