2016-10-10 11 views
0

午後の良い人!私は、DataTableを使ってPrimefaceを編集して更新しようとしていますが、beanにアップグレードされたinputTextの値を送信しません。プロセスはほぼ正確に発生し、値は送信され、更新されますが、古い値はすでにデータテーブルにロードされています。Datatable Primefacesエディタは編集のために更新された値を送信しません

誰もがこの上で私を助けることができます:)

は私の英語を許して。 I ....非常によく話したり書いていない

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

関連する問題