Primefaces Datatable Edit does not send updated value for editing

Asked

Viewed 355 times

0

I am trying to update through the Edit datatable of the first faces, 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 in datatable.

someone can help me in this

listProdut.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);
    /* 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);
    }

  }
  • I did not understand the end of your question, the value is updated or not ?

  • The updated value is not passed to the bean. o /ː product = ((Product) Event.getObject()); */ takes the initial value of the datatable, not the value of the input I change.

  • You can mark the answer that best helped you as accepted by clicking on v left, just below the vote counter.

  • Ah yes, thank you, I’m new here...rs

3 answers

1

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

Hugs

0

@Nadinael Silva Teixeira Thanks for the help, posting here a piece of code and the return... 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;
        }

Productive

        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;
        }

Console return by clicking on rowEditor v (note that before 4th select from bottom to top, System.out.println( "get " + product list), 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_

0


I never edited this way, but I noticed q in your codes your update is only updating the message. It might be that. try like 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 only added the i Id of the table, but you can only put ":form:", at least to test.

  • I tried this way... it didn’t work friend... it’s breaking my head.... rs

  • Take a look at the browser developer options in the network tab and monitor the ajax response. , see if everything is all right, there is, and try to put the "process" tbm. defining what you want to process. I will update my answer with this.

  • Man, I think my question now is no longer the part of ajax... with the verification of what was being passed, I saw that the value is being passed and updated... I do not know the pq, but Hibernate makes many selects and ends up overwriting the update... get lost again...rs

  • I still don’t know how to use the right stackoverflow... my answer was upstairs...rs

  • Great, :-), these mistakes happen, and that’s good, to keep them alert.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.