Datatable Primefaces编辑器不会发送更新的值进行编辑

时间:2016-10-10 11:42:21

标签: java ajax primefaces

人们,下午好!我正在尝试通过数据表编辑Primefaces进行更新,但不会将inputText的值发送到bean。该过程几乎正确发生,值已发送和更新,但旧值已加载到数据表中。

任何人都可以帮助我:)

原谅我的英语。我不会说话或写得很好......

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

2 个答案:

答案 0 :(得分:0)

我认为您应该使用其他类型的事件,因为当您单击铅笔图标时正在执行 rowEditInit ,并且在您单击保存图标后正在执行事件 rowEdit 。因此,试试:

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

同时原谅我的英语:)

答案 1 :(得分:0)

员工设法解决了。实际上问题出在我的listaprodutos get ...输入if和else之后,测试产品列表是否为null,正常运行。 很酷的是,正如朋友指出的那样,总是检查网络浏览器传递的值。 拥抱