2016-10-10 3 views
0

Добрый день! Я пытаюсь сделать обновление через редактируемое по Данному прайму, но не отправляет значение inputText, обновленное до bean-компонента. Процесс выполняется почти правильно, значение отправляется и обновляется, но старое значение уже загружено в datatable.Редактор 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

Почему вы используете немедленное = "true" на вашем p: ajax? –

+0

просто попробуй ... если я возьму, не получится. – sounobre

ответ

0

Персонал удалось решить. на самом деле проблема была в моем listaprodutos получить ... после ввода if и else, проверка, был ли список продуктов нулевым, функционировал нормально. Замечательная вещь, как указывал друг, всегда проверяет значения, передаваемые сетевым браузером. Объятия

0

Я думаю, вы должны использовать другой тип события, потому что rowEditInit является выполнение когда вы нажимаете значок карандаша, а после издания, когда вы нажимаете значок сохранения, выполняется событие rowEdit. Поэтому попробуйте:

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

Также простите мой английский :)

+0

Я пробовал, что ... не работал ... :( – sounobre

Смежные вопросы