2016-10-10 74 views
0

下午好!我試圖通過數據表編輯Primefaces來進行更新,但不會將inputText的值升級到bean。該過程幾乎正確發生,該值被髮送並更新,但舊值已加載到數據表中。Datatable Primefaces編輯器不會發送更新的值以供編輯

任何人都可以幫助我:)

原諒我的英語。我不會說或寫的非常好....

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); 
    } 
} 
+0

爲什麼你在p:ajax上使用immediate =「true」? –

+0

只是一個嘗試...如果我拿,不好。 – sounobre

回答

0

工作人員設法解決。實際上問題出在我的listaprodutos上後......進入if和else之後,測試產品列表是否爲空,正常運行。 正如朋友指出的那樣,很酷的事情是,總是檢查網絡瀏覽器傳遞的值。 擁抱

0

我認爲你應該使用其他類型的事件,因爲rowEditInit是執行當你點擊鉛筆圖標,並在編輯後點擊保存圖標時正在執行事件rowEdit。因此嘗試:

<p:ajax event="rowEdit" listener="#{pBean.onRowEdit}" update=":form:msgs"/> 

也原諒我的英文:)

+0

我試過......沒有工作...... :( – sounobre