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

<!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

Diego Sounobre

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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar