Ir para conteúdo
Entre para seguir isso  
Guilherme do Vale

CellEdit do datatable perde a edição

Recommended Posts

ola pessoal,
Estou com um problema chato que não consigo resolver. Criei um datatable com cellEditor dentro de uma tab e, dentro dessa tab, eu coloquei um ajax que muda a lista do datatable toda vez que muda para outra tab. O problema é que, quando eu clico em outra tab e carrega o outro datatable eu perco a edição das células e só aparece o output da célula. Gostaria de uma ajuda pra saber o que está acontecendo e como resolver:
xhtml
   <p:tabView value="#{cadastroContasBean.listaTabela}" dynamic="true"
     closeable="true" activeIndex="#{cadastroContasBean.idTabela}"
     var="tabela" style="heigth:100%;width:100%" id="tabView">
     <p:tab title="tab" closable="true" id="tab">
     <div>
     <p:dataTable binding="#{cadastroContasBean.dataTable}" var="gasto"
     value="#{cadastroContasBean.listaGasto}" scrollable="true"
     scrollHeight="150" editable="true" editMode="cell" id="Tabela"
     widgetVar="wTabela">
     <p:column headerText="Nome">
     <p:cellEditor>
     <f:facet name="output">
     <p:outputLabel value="#{gasto.nome}" />
     </f:facet>
     <f:facet name="input">
     <p:inputText id="inputTextNome" required="true"
     value="#{cadastroContasBean.nome}" style="width:96%"
     binding="#{cadastroContasBean.inputTextNome}">
     <p:ajax event="change" update="Tabela"
     listener="#{cadastroContasBean.atualizaVT('inputTextNome')}"
     execute="inputTextNome" process="@this">
     </p:ajax>
     </p:inputText>
     </f:facet>
     </p:cellEditor>
     </p:column>
     <p:column headerText="Quantidade">
     <p:cellEditor>
     <f:facet name="output">
     <p:outputLabel value="#{gasto.quantidade}" />
     </f:facet>
     <f:facet name="input">
     <p:inputText id="inputQtd" required="true"
     value="#{cadastroContasBean.qtd}" style="width:96%"
     onkeydown="MascaraNumero()" onkeyup="MascaraNumero()"
     binding="#{cadastroContasBean.inputTextQtd}">
     <p:ajax event="change" update="Tabela"
     listener="#{cadastroContasBean.atualizaVT('inputTextQtd')}"
     execute="inputQtd" process="@this" />
     </p:inputText>
     </f:facet>
     </p:cellEditor>
     </p:column>
     <p:column headerText="Valor">
     <p:cellEditor>
     <f:facet name="output">
     <p:outputLabel value="#{gasto.valor}">
     <f:convertNumber currencySymbol="R$" type="currency" />
     </p:outputLabel>
     </f:facet>
     <f:facet name="input">
     <p:inputText id="inputValor" required="true"
     value="#{cadastroContasBean.valor}" style="width:96%"
     binding="#{cadastroContasBean.inputTextValor}">
     <f:convertNumber pattern="#,##0.00"></f:convertNumber>
     <f:validator validatorId="MoedaValidator" />
     <p:ajax event="change" update="Tabela"
     listener="#{cadastroContasBean.atualizaVT('inputTextValor')}"
     execute="inputValor" process="@this">
     </p:ajax>
     </p:inputText>
     </f:facet>
     </p:cellEditor>
     </p:column>
     <p:column headerText="Valor Total" id="vt">
     <p:outputLabel id="outputVT" value="#{gasto.valorTotal}">
     <f:convertNumber currencySymbol="R$" type="currency" />
     </p:outputLabel>
     </p:column>
     </p:dataTable>
     <div id="addGasto">
     <p:commandButton value="Add gasto" style="width:100%"
     actionListener="#{cadastroContasBean.addGasto}" update="Tabela"></p:commandButton>
     </div>
     </div>
     <div>
     <p:outputLabel value="Comentários: " for="comentario"></p:outputLabel>
     <p:inputTextarea value="#{tabela.comentarios}" id="comentario"
     autoResize="true" style="width: 100%; height: 50%"></p:inputTextarea>
     </div>
     </p:tab>
     <p:ajax event="tabChange" execute="tab"
     listener="#{cadastroContasBean.mudaTab}" process="@this" />
    </p:tabView>
MB
public void mudaTab(TabChangeEvent event) {
     tabelaAtual = (Tabela)event.getData();
     idTabela =(tabelaAtual).getId();
     listarGastos();
    }
    public void listarGastos(){
     listaGasto = tabelaAtual.getListaGastos();
    }
Tabela
 public class Tabela {


     @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 
     private Integer id;
     private String comentarios;


     @OneToMany (mappedBy="tabela")
     private List<Gastos> listaGastos = new ArrayList<Gastos>();


     @ManyToOne
     private MesAno mesano;


     public List<Gastos> getListaGastos() {
     return listaGastos;
     }
     public void setListaGastos(List<Gastos> listaGastos) {
     this.listaGastos = listaGastos;
     }
     public MesAno getMesano() {
     return mesano;
     }
     public void setMesano(MesAno mesano) {
     this.mesano = mesano;
     }
     public String getComentarios() {
     return comentarios;
     }
     public void setComentarios(String comentarios) {
     this.comentarios = comentarios;
     }
     public Integer getId() {
     return id;
     }
     public void setId(Integer id) {
     this.id = id;
     } 
    }

Obs: não consigo identar o xhtml ¬¬

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Conteúdo Similar

    • Por Brxlx
      Estou tentando inserir essa lógica no scroll da minha página, ele pega corretamente a condição do ife entra no laço. Para todos os demais elementos da página que geram o scroll, ele rola certo, apenas para o button#conheca que não consigo fazer o cálculo da altura. Preciso que ele pegue o offset e some com a altura, devido ao menu que abre em mobile, mas ele está sendo sobrescrito pelo scrollTop anterior.
      Com qual função devo verificar para executar corretamente a lógica?
      if($(window).width() <= 768){ $("html, body, button:not(#conheca)").animate({ scrollTop: (target.offset().top - $(window).height()) }, 1000, "easeInOutExpo"); return false; $("#conheca").on("click", function(){ $('#conheca').animate({ scrollTop: (target.offset().top + $(window).height()) }, 1000, "easeInOutExpo"); return false; }); }else{ $('html, body').animate({ scrollTop: (target.offset().top) }, 1000, "easeInOutExpo"); return false; }
    • Por zetabyte00
      Por favor, gostaria de opniões sobre esse site :
       
      Como está meu HTML/CSS, digo o desenvolvimento front-end, sou iniciante.
       
      O visual está ficando legal? É um site teste, um pseudo currículo.
       
       
    • Por thailangodoy
      Boa tarde Galera,
      Estou iniciando meus estudos na área de java Web e tenho encontrado algumas barreiras para adquirir novas habilidades. Devido a dificuldades financeiras não estou podendo investir em cursos pagos. Então optei pelo velho amigo youtube.
       
      A primeira dificuldade que encontrei foi em escolher a IDE. Optei pela NetBeans a versão 8.2 ela oferece muitos recursos bacanas e atalhos para programação e isso me ajuda a gravar alguns comandos.
       
      Agora estou tendo problema com a ferramentaa DynamicWeb disponível no eclipse. Como faço para utilizar esse recurso no netbeans? 
    • Por Vitorkgb
      Boa tarde pessoal, alguém poderia me ajudar?, estou usando JSF, porém estou com uma necessidade, criei um botão na minha página xhtml que executa um método (Dentro de um ManagedBean na vdd), nesse método precisaria executar uma URL e pegar um parâmetro, porém essa URL teria que ser executada dentro do método mesmo, sem abrir qualquer navegador, com o parâmetro pego ai sim vou jogar na próxima tela, alguém saberia como posso fazer isso? executar uma URL e pegar seu parâmetro gerado sem abrir o navegador?
      Desde já obrigado,
      Vitor
    • Por manoveio1
      Estou desenvolvendo um sisteminha em, pra fins de conhecimento. Estou usando eclipse, photon ,postgres, hibernate, maven e primefaces. Ele está gravando os dados normalmente no banco de dados. A data e hora ele esta pegando automaticamente do sistema. Até ai esta blz. O problema está qdo atualizo os dados, a data e a hora nao estao atualizando, porem outros dados estao.
      Segue os dados:
      meu domain:
      package br.pro.silvio.prati.domain; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Temporal; import javax.persistence.TemporalType; @SuppressWarnings("serial") @Entity public class Area extends GenericDomain { @Column(name = "nome",length =20, nullable = false) private String nome; @Column( name = "status",length =10) private String status; @Column(name = "cadpor",length =20) private String cadpor; @Column(name ="datcad") @Temporal(TemporalType.DATE) private Date datcad = new java.sql.Date(System.currentTimeMillis()); @Column(name = "hora") @Temporal(TemporalType.TIME) private Date hora =new java.sql.Date(System.currentTimeMillis()); public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getCadpor() { `return cadpor;` } public void setCadpor(String cadpor) { this.cadpor = cadpor; } public Date getDatcad() { return datcad; } public void setDatcad(Date datcad) { this.datcad = datcad; } public Date getHora() { return hora; } public void setHora(Date hora) { this.hora = hora; } } meu dao generico:
      package br.pro.silvio.prati.dao; import java.lang.reflect.ParameterizedType; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import br.pro.silvio.prati.util.HibernateUtil; public class GenericDAO<Entidade> { private Class<Entidade> classe; @SuppressWarnings("unchecked") public GenericDAO() { this.classe = (Class<Entidade>) ((ParameterizedType) getClass().getGenericSuperclass()) .getActualTypeArguments()[0]; } public void salvar(Entidade entidade) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); Transaction transacao = null; try { transacao = sessao.beginTransaction(); sessao.save(entidade); transacao.commit(); } catch (RuntimeException erro) { if (transacao != null) { transacao.rollback(); } throw erro; } finally { sessao.close(); } } @SuppressWarnings("unchecked") public List<Entidade> listar() { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); try { Criteria consulta = sessao.createCriteria(classe); List<Entidade> resultado = consulta.list(); return resultado; } catch (RuntimeException erro) { throw erro; } finally { sessao.close(); } } @SuppressWarnings("unchecked") public Entidade buscar(Long codigo) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); try { Criteria consulta = sessao.createCriteria(classe); consulta.add(Restrictions.idEq(codigo)); Entidade resultado = (Entidade) consulta.uniqueResult(); return resultado; } catch (RuntimeException erro) { throw erro; } finally { sessao.close(); } } public void excluir(Entidade entidade) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); Transaction transacao = null; try { transacao = sessao.beginTransaction(); sessao.delete(entidade); transacao.commit(); } catch (RuntimeException erro) { if (transacao != null) { transacao.rollback(); } throw erro; } finally { sessao.close(); } } public void editar(Entidade entidade) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); Transaction transacao = null; try { transacao = sessao.beginTransaction(); sessao.update(entidade); transacao.commit(); } catch (RuntimeException erro) { if (transacao != null) { transacao.rollback(); } throw erro; } finally { sessao.close(); } } public void merge(Entidade entidade) { Session sessao = HibernateUtil.getFabricaDeSessoes().openSession(); Transaction transacao = null; try { transacao = sessao.beginTransaction(); sessao.merge(entidade); transacao.commit(); } catch (RuntimeException erro) { if (transacao != null) { transacao.rollback(); } throw erro; } finally { sessao.close(); } } } meu dao:
      package br.pro.silvio.prati.dao; import br.pro.silvio.prati.domain.Area; public class AreaDAO extends GenericDAO<Area>{ } meu bean:
      package br.pro.silvio.prati.bean; import java.io.Serializable; import java.util.List; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.event.ActionEvent; import org.omnifaces.util.Messages; import br.pro.silvio.prati.dao.AreaDAO; import br.pro.silvio.prati.domain.Area; @SuppressWarnings("serial") @ManagedBean @ViewScoped public class AreaBean implements Serializable { private Area area; private List<Area> areas; public Area getArea() { return area; } public void setArea(Area area) { this.area = area; } public List<Area> getAreas() { return areas; } public void setAreas(List<Area> areas) { this.areas = areas; } @PostConstruct public void listar() { try { AreaDAO areaDAO = new AreaDAO(); areas = areaDAO.listar(); } catch (RuntimeException erro) { Messages.addGlobalError("Ocorreu um erro ao tentar listar as AREAS"); erro.printStackTrace(); } } public void novo() { area = new Area(); } public void salvar() { try { AreaDAO areaDAO = new AreaDAO(); areaDAO.merge(area); novo(); areas = areaDAO.listar(); Messages.addGlobalInfo("Area salvo com sucesso"); } catch (RuntimeException erro) { Messages.addGlobalError("Ocorreu um erro ao tentar salvar a AREA"); erro.printStackTrace(); } } public void excluir(ActionEvent evento) { try { area = (Area) evento.getComponent().getAttributes().get("areaSelecionado"); AreaDAO areaDAO = new AreaDAO(); areaDAO.excluir(area); areas = areaDAO.listar(); Messages.addGlobalInfo("Estado removido com sucesso"); } catch (RuntimeException erro) { Messages.addFlashGlobalError("Ocorreu um erro ao tentar remover o estado"); erro.printStackTrace(); } } public void editar(ActionEvent evento){ area = (Area) evento.getComponent().getAttributes().get("areaSelecionado"); } } meu xhtml:
      <?xml version="1.0" encoding="UTF-8" ?> <!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:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:p="http://primefaces.org/ui"> <h:head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Are</title> </h:head> <h:body> <p:growl id="mensagem" /> <h:form id="formListagem"> <p:panel header="AREA - Listagem"> <p:dataTable id="tabela" emptyMessage="Nenhum registro encontrado." paginator="true" value="#{areaBean.areas}" var="item" rows="8"> <f:facet name="header"> <p:commandButton value="Novo" oncomplete="PF('dialogo').show();" actionListener="#{areaBean.novo}" update=":formCadastro:painel"> <f:actionListener type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" /> </p:commandButton> </f:facet> <p:column headerText="Código" sortBy="#{item.codigo}" filterBy="#{item.codigo}"> <h:outputText value="#{item.codigo}" /> </p:column> <p:column headerText="Descricao" sortBy="#{item.nome}" filterBy="#{item.nome}"> <h:outputText value="#{item.nome}" /> </p:column> <p:column headerText="Status" sortBy="#{item.status}" filterBy="#{item.status}"> <h:outputText value="#{item.status}" /> </p:column> <p:column headerText="Cadastrado por" sortBy="#{item.cadpor}" filterBy="#{item.cadpor}"> <h:outputText value="#{item.cadpor}" /> </p:column> <p:column headerText="Data" sortBy="#{item.datcad}" filterBy="#{item.datcad}"> <h:outputText value="#{item.datcad}"> <f:convertDateTime locale="pt_BR" /> </h:outputText> </p:column> <p:column headerText="Hora"> <h:outputText value="#{item.hora}" /> </p:column> <p:column headerText="Opções"> <p:commandButton icon="ui-icon-trash" actionListener="#{areaBean.excluir}" update=":mensagem :formListagem:tabela"> <p:confirm header="Confirmação" message="Deseja excluir 'AREA'?" icon="ui-icon-alert" /> <f:attribute name="areaSelecionado" value="#{item}" /> </p:commandButton> <p:commandButton icon="ui-icon-pencil" actionListener="#{areaBean.editar}" update=":formCadastro:painel" oncomplete="PF('dialogo').show();"> <f:attribute name="areaSelecionado" value="#{item}" /> <f:actionListener type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" /> </p:commandButton> </p:column> </p:dataTable> <p:confirmDialog global="true" showEffect="fade" hideEffect="fade"> <p:commandButton value="Sim" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" /> <p:commandButton value="Não" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" /> </p:confirmDialog> </p:panel> </h:form> <p:dialog header="AREA - Cadastro" widgetVar="dialogo" draggable="false" resizable="false" modal="true" closable="false"> <h:form id="formCadastro"> <h:panelGrid id="painel" columns="2"> <p:outputLabel value="Descrição:" /> <p:inputText maxlength="30" size="20" value="#{areaBean.area.nome}" required="true" requiredMessage="O campo Descricao é obrigatório!" /> <p:outputLabel value="Situação:" /> <p:selectOneMenu value="#{areaBean.area.status}" required="true" requiredMessage="O campo Situacao é obrigatório!"> <f:selectItem itemValue="" itemLabel="Selecione.." /> <f:selectItem itemValue="Ativo" itemLabel="Ativo" /> <f:selectItem itemValue="Inativo" itemLabel="Inativo" /> </p:selectOneMenu> </h:panelGrid> <h:panelGrid columns="2"> <p:commandButton value="Salvar" actionListener="#{areaBean.salvar}" update=":mensagem :formCadastro:painel :formListagem:tabela" /> <p:commandButton value="Fechar" oncomplete="PF('dialogo').hide();" /> </h:panelGrid> </h:form> </p:dialog> </h:body> </html> ele grava de boa a data e a hora , mas quando é pra atualizar, só atualiza outros campos mas não a data e a hora. o que pode ser?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.