Primefaces edittable edit does not send updated value to edit

0

I'm trying to perform an update through the editfile of the firstfaces, but it does not send the updated inputtext value to the bean. The process occurs almost correctly, the value is sent and updated, but the old value, already loaded into the datatable.

Someone can help me on this

ProductList.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>

ProductBean

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);
    /* Aqui tudo retorna nulo */

     produto = ((Produto) event.getObject());

        System.out.println(produto);
    /* Aqui retornam os valores iniciais do datatable */   
 }



    public void onRowCancel(RowEditEvent event) {
        FacesMessage msg = new FacesMessage("Edit Cancelled");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

  }
    
asked by anonymous 09.10.2016 / 22:14

3 answers

0

I've never edited this way, but I noticed that in your codes your update is updating only the message. It might be that. try this:

<p:ajax event="rowEditCancel" listener="#{pBean.onRowCancel}" process=":form:listaproduto1" update=":form:msgs :form:listaproduto1" />
<p:ajax event="rowEditInit" listener="#{pBean.onRowEdit}" process=":form:listaproduto1"    update=":form:msgs :form:listaproduto1" immediate="true"  />

I just added the i id of the table, but you can by just ": form:", at least for testing.

    
11.10.2016 / 05:48
1

I managed to solve it. actually the problem was in my get list products ... after inserting an if and else, testing if product list was null, worked normally. The cool thing is, as your friend indicated, always check the values passed by the browser network.

Hugs

    
13.10.2016 / 13:48
0

@Nadinael Silva Teixeira Thanks for the help, posting here a piece of code and the one that returns ... I really appreciate the help

pBean

         public List<Produto> getListaproduto() {
            try{

            System.out.println( "get " + listaproduto);

                listaproduto = new ProdutoDao().listar();



            }catch(Exception e){
                e.printStackTrace();
            }


            return listaproduto;
        }

Product

        public List<Produto> listar()throws Exception {
        session = HibernateUtil.getSessionFactory().openSession();
        query = session.createQuery("select p from Produto p");

        List<Produto> lista = query.list();
        session.close();

            return lista;
        }

Return from the Console when clicking the rowEditor v (note that before the 4th select from the bottom, System.out.println ("get" + productlist) returns the correct value I passed, id = 2 product , category = 258)

                    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 258]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    get [Produto [id= 1, nome= tetse, preco= 534534.0, fornecedor= teste, categoria= teste], Produto [id= 2, nome= 123, preco= 123.0, fornecedor= 123, categoria= 123]]
    Hibernate: 
        select
            produto0_.id as id1_0_,
            produto0_.categoria as categori2_0_,
            produto0_.fornecedor as forneced3_0_,
            produto0_.nome as nome4_0_,
            produto0_.preco as preco5_0_ 
        from
            Produto produto0_
    
12.10.2016 / 16:04