[RESOLVIDO] Problema com o Datatable do primefaces
9 respostas
F
flavio_previtera
olá pessoal, estou com um problema e não consigo resolver.
tenho um datatable que funciona certo mas quando eu removo a linha selecionada, remove a linha da lista de maneira correta porém quando faço o update do componente a tabela volta com todas as linhas selecionadas, quero que a tabela volte sem nenhuma linha selecionada, como resolvo isso?
figura 1: após inseridos os itens na tabela o funcionamento é normal
figura 2: depois de clicar em remover - remove a linha mas fica tudo selecionado ( neste exemplo a linha 7 foi escolhida e removida com exito).
Olá, você provavelmente possui algum campo no seu bean que representa a linha selecionada, como aqueles selectedItem dos exemplos do primefaces, certo? Se possui, tente no método de remoção, setar nulo nele ou instanciá-lo novamente, assim você diz que não possui nenhuma linha selecionada na tabela.
F
flavio_previtera
sim eu tenho no bean um objeto que representa a linha, e ao chamar o método no botão remover ele esta sendo instanciado novamente.
benignoms
Posta o código. Tanto o MB quanto o xhtml
F
flavio_previtera
codigo da view:
<?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"><ui:compositionxmlns:ui="http://java.sun.com/jsf/facelets"xmlns:p="http://primefaces.prime.com.tr/ui"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"><p:dialogid="dialogReq"header="Senha para nova requisicao"widgetVar="dlgReq"position="center"resizable="false"width="500"modal="true"><h:formprependId="false"><p:outputPanelid="requisicao"><center><h:panelGridcolumns="3"columnClasses="coluna_label"><h:outputTextvalue="Digite a senha: *"/><p:passwordvalue="#{cadastroRequisicaoController.funcionarioSenha}"required="true"minLength="5"maxlength="20"feedback="false"/><p:commandButtonimage="ui-icon-search"action="#{cadastroRequisicaoController.verificaSenha()}"update="mensagem panelRequisicao requisicao"oncomplete="dlgRequisicao.show()"/></h:panelGrid></center></p:outputPanel></h:form></p:dialog><p:dialogid="dlgRequisicao"header="Nova Requisicao"widgetVar="dlgRequisicao"position="center"resizable="false"width="500"modal="true"><h:formprependId="false"><p:outputPanelid="panelRequisicao"><h:panelGridcolumns="4"columnClasses="coluna_label,,coluna_label"><h:outputTextvalue="Funcionario: "/><p:inputTextvalue="#{cadastroRequisicaoController.funcionario.pessoa.nome}"size="37"required="true"disabled="true"/><h:outputTextvalue="Data: "/><h:outputTextvalue="#{cadastroRequisicaoController.dataAtual}"><f:convertDateTimepattern="dd/MM/yyyy"/></h:outputText></h:panelGrid><h:panelGridcolumns="2"columnClasses="coluna_label"><h:outputTextvalue="Selecione o setor: *"/><h:selectOneMenuvalue="#{cadastroRequisicaoController.setorFuncionarioItem}"required="true"style="width: 210px; text-transform: uppercase"><f:selectItemitemLabel="Setor"itemValue=""/><f:selectItemsvalue="#{cadastroRequisicaoController.setorFuncionarioListaItens}"/></h:selectOneMenu></h:panelGrid><h:panelGridcolumns="2"columnClasses="coluna_label"><h:outputTextvalue="Status: "/><p:inputTextvalue="#{cadastroRequisicaoController.novaRequisicao.status.descricao}"size="25"disabled="true"/></h:panelGrid><br/><center><p:dataTableid="tabelaRequisicao"var="umItem"value="#{cadastroRequisicaoController.requisicaoItemList}"selectionMode="single"selection="#{cadastroRequisicaoController.requisicaoItemSelecionado}"style="width: 420px"><f:facetname="header">Lista de itens</f:facet><p:columnheaderText="Item">#{umItem.item.descricao}</p:column><p:columnheaderText="Qtd."style="width: 10px"><p:cellEditor><f:facetname="output"><h:outputTextvalue="#{umItem.quantidade}"style="width: 10px"/></f:facet><f:facetname="input"><h:inputTextvalue="#{umItem.quantidade}"size="6"/></f:facet></p:cellEditor></p:column><p:columnstyle="width: 35px"><p:rowEditor/></p:column><f:facetname="footer"><p:commandButtonvalue="Adicionar"update="panelAddItem"oncomplete="itemAddDialog.show()"/> <p:commandButtonvalue="Remover"action="#{cadastroRequisicaoController.removeRequisicaoListaItens()}"update="tabelaDeItens tabelaRequisicao"/></f:facet></p:dataTable><br/><p:separator/><br/><p:commandButtonvalue="Enviar"update="mensagem requisicao panelRequisicao"action="#{cadastroRequisicaoController.criaRequisicao()}"oncomplete="dlgRequisicao.hide()"/></center></p:outputPanel></h:form></p:dialog><p:dialogheader="Item"widgetVar="itemAddDialog"resizable="false"width="500"modal="true"><p:outputPanelid="panelAddItem"style="text-align: left"><h:formprependId="false"><p:dataTableid="tabelaDeItens"var="ite"value="#{cadastroRequisicaoController.listaDeItens}"selectionMode="single"selection="#{cadastroRequisicaoController.itemSelecionado}"onRowSelectUpdate="panelAddItem"onRowUnselectUpdate="outpAddItem"rowUnselectListener="#{cadastroRequisicaoController.resetaItem()}"paginator="true"rows="20"><p:columnfilterBy="#{ite.descricao}"><f:facetname="header"><h:outputTextvalue="Item"/></f:facet><h:outputTextvalue="#{ite.descricao}"/></p:column></p:dataTable><br/><h:panelGridcolumns="4"columnClasses="coluna_label,,coluna_label"><h:outputTextvalue="Descrição: *"/><p:inputTextvalue="#{cadastroRequisicaoController.itemSelecionado.descricao}"required="true"disabled="true"size="34"/><h:outputTextvalue="Qtd.: *"/><p:inputTextvalue="#{cadastroRequisicaoController.requisicaoItem.quantidade}"required="true"size="6"/></h:panelGrid><br/><center><p:commandButtonvalue="Adicionar"action="#{cadastroRequisicaoController.adicionaListaItens()}"process="@this panelAddItem"update="mensagem tabelaRequisicao panelAddItem"oncomplete="itemAddDialog.hide()"/></center></h:form></p:outputPanel></p:dialog></ui:composition>
codigo do bean:
packagecontroller;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;importjavax.annotation.PostConstruct;importjavax.ejb.EJB;importjavax.faces.application.FacesMessage;importjavax.faces.context.FacesContext;importjavax.faces.model.SelectItem;importmodelo.*;importservico.*;importutilitario.Mensagens;/** * * @author fainorti */publicclassCadastroRequisicaoManagedBean{@EJBprivateRequisicaoItemFacadeLocalrequisicaoItemFacade;@EJBprivateTipoParticipacaoFacadeLocaltipoParticipacaoFacade;@EJBprivateRequisicaoFacadeLocalrequisicaoFacade;@EJBprivateItemFacadeLocalitemFacade;@EJBprivateSetorFacadeLocalsetorFacade;@EJBprivateStatusFacadeLocalstatusFacade;@EJBprivateParticipacaoFacadeLocalparticipacaoFacade;@EJBprivateFuncionarioFacadeLocalfuncionarioFacade;/** * VARIAVEIS */privateDatedataAtual;privateParticipacaoparticipacao;privateRequisicaonovaRequisicao;privateFuncionariofuncionario;privateStringfuncionarioSenha;privatebooleanrenderiza;privateStatusstatus;privateList<Setor>funcionarioSetorLista;privateList<SelectItem>setorFuncionarioListaItens;privateIntegersetorFuncionarioItem;privateSetorsetor;privateList<Item>listaDeItens;privateItemitemSelecionado,itemEscolhido;privateRequisicaoItemrequisicaoItem,requisicaoItemSelecionado;privateList<RequisicaoItem>requisicaoItemList;/** * Creates a new instance of CadastroRequisicaoManagedBean */publicCadastroRequisicaoManagedBean(){}@PostConstructpublicvoidnovo(){dataAtual=newDate();participacao=newParticipacao();novaRequisicao=newRequisicao();novaRequisicao.setParticipacaoList(newArrayList<Participacao>());novaRequisicao.setStatus(statusFacade.find(1));funcionario=newFuncionario();funcionario.setFuncionarioCargoList(newArrayList<FuncionarioCargo>());funcionarioSenha=newString();renderiza=false;setor=newSetor();funcionarioSetorLista=newArrayList<Setor>();itemSelecionado=newItem();requisicaoItem=newRequisicaoItem();requisicaoItemList=newArrayList<RequisicaoItem>();listaDeItens=newArrayList<Item>();}publicvoidverificaSenha(){requisicaoItemList=newArrayList<RequisicaoItem>();setorFuncionarioItem=null;try{funcionario=funcionarioFacade.buscaPorSenha(funcionarioSenha);renderiza=true;}catch(Exceptione){renderiza=false;FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_ERROR,"Usuário não encontrado!"+e.toString(),null));}funcionarioSenha=null;}publicvoidresetaItem(){itemSelecionado=newItem();}publicvoidremoveRequisicaoListaItens(){RequisicaoItemr;for(inti=0;i<requisicaoItemList.size();i++){r=requisicaoItemList.get(i);if(r.getItem().getCodigo().equals(requisicaoItemSelecionado.getItem().getCodigo())){requisicaoItemList.remove(i);listaDeItens.add(requisicaoItemSelecionado.getItem());}}requisicaoItemSelecionado=newRequisicaoItem();}publicvoidcriaRequisicao(){try{participacao.setDataParticipacao(dataAtual);participacao.setFuncionario(funcionario);participacao.setTipoParticipacao(tipoParticipacaoFacade.find(1));participacaoFacade.create(participacao);novaRequisicao.setSetor(setor);novaRequisicao.setDataRequisicao(dataAtual);requisicaoFacade.create(novaRequisicao);participacao.setRequisicao(novaRequisicao);novaRequisicao.getParticipacaoList().add(participacao);participacaoFacade.edit(participacao);for(inti=0;i<requisicaoItemList.size();i++){RequisicaoItemr=requisicaoItemList.get(i);r.setRequisicao(novaRequisicao);// requisicaoItemFacade.create(r);novaRequisicao.getRequisicaoItemList().add(r);}requisicaoFacade.edit(novaRequisicao);novo();Mensagens.sucessoGravacao();}catch(Exceptione){}}publicvoidadicionaListaItens(){if(itemSelecionado.getCodigo()!=null){requisicaoItem.setItem(itemSelecionado);requisicaoItemList.add(requisicaoItem);listaDeItens.remove(itemSelecionado);requisicaoItem=newRequisicaoItem();}else{FacesContext.getCurrentInstance().addMessage(null,newFacesMessage(FacesMessage.SEVERITY_ERROR,"Nenhum item foi selecionado!",null));}}/** * Get e SET */publicDategetDataAtual(){returndataAtual;}publicvoidsetDataAtual(DatedataAtual){this.dataAtual=dataAtual;}publicFuncionariogetFuncionario(){returnfuncionario;}publicvoidsetFuncionario(Funcionariofuncionario){this.funcionario=funcionario;}publicStringgetFuncionarioSenha(){returnfuncionarioSenha;}publicvoidsetFuncionarioSenha(StringfuncionarioSenha){this.funcionarioSenha=funcionarioSenha;}publicbooleanisRenderiza(){returnrenderiza;}publicvoidsetRenderiza(booleanrenderiza){this.renderiza=renderiza;}publicStatusgetStatus(){returnstatus;}publicvoidsetStatus(Statusstatus){this.status=status;}publicRequisicaogetNovaRequisicao(){returnnovaRequisicao;}publicvoidsetNovaRequisicao(RequisicaonovaRequisicao){this.novaRequisicao=novaRequisicao;}publicIntegergetSetorFuncionarioItem(){returnsetorFuncionarioItem;}publicvoidsetSetorFuncionarioItem(IntegersetorFuncionarioItem){this.setorFuncionarioItem=setorFuncionarioItem;setor=setorFacade.find(setorFuncionarioItem);}publicList<SelectItem>getSetorFuncionarioListaItens(){setorFuncionarioListaItens=newArrayList<SelectItem>();funcionarioSetorLista=newArrayList<Setor>();for(FuncionarioCargofc:funcionario.getFuncionarioCargoList()){if(fc.getDataFinal()==null){for(SetorFuncionarioCargosfc:fc.getSetorFuncionarioCargoList()){if(sfc.getDataFinal()==null){if(funcionarioSetorLista.contains(sfc.getSetor())){}else{funcionarioSetorLista.add(setorFacade.find(sfc.getSetor().getCodigo()));}}}}}for(Setors:funcionarioSetorLista){SelectItemi=newSelectItem(s.getCodigo(),s.getSigla());setorFuncionarioListaItens.add(i);}returnsetorFuncionarioListaItens;}publicvoidsetSetorFuncionarioListaItens(List<SelectItem>setorFuncionarioListaItens){this.setorFuncionarioListaItens=setorFuncionarioListaItens;}publicItemgetItemSelecionado(){returnitemSelecionado;}publicvoidsetItemSelecionado(ItemitemSelecionado){this.itemSelecionado=itemSelecionado;}publicList<Item>getListaDeItens(){if(listaDeItens.isEmpty()){listaDeItens=newArrayList<Item>();for(Itemk:itemFacade.findAll()){listaDeItens.add(k);}}returnlistaDeItens;}publicvoidsetListaDeItens(List<Item>listaDeItens){this.listaDeItens=listaDeItens;}publicItemgetItemEscolhido(){returnitemEscolhido;}publicvoidsetItemEscolhido(ItemitemEscolhido){this.itemEscolhido=itemEscolhido;}publicList<RequisicaoItem>getRequisicaoItemList(){returnrequisicaoItemList;}publicvoidsetRequisicaoItemList(List<RequisicaoItem>requisicaoItemList){this.requisicaoItemList=requisicaoItemList;}publicRequisicaoItemgetRequisicaoItemSelecionado(){returnrequisicaoItemSelecionado;}publicvoidsetRequisicaoItemSelecionado(RequisicaoItemrequisicaoItemSelecionado){this.requisicaoItemSelecionado=requisicaoItemSelecionado;}publicRequisicaoItemgetRequisicaoItem(){returnrequisicaoItem;}publicvoidsetRequisicaoItem(RequisicaoItemrequisicaoItem){this.requisicaoItem=requisicaoItem;}}
benignoms
Primefaces 2.2 ? Ok, você sobreescreeveu os métodos equals e hashcode da classe Item?
F
flavio_previtera
sim é a versão 2.2.1 do primefaces, eu não sobreescrevi os metodos equals e hashcode, pelo menos não estando ciente disso.
benignoms
Ok, na classe Item faz a sobreescritura dos métodos equals e hashcode, limpa e reconstroi a app e testa.
F
flavio_previtera
eu comentei esta parte na classe do objeto
// @Override// public int hashCode() {// int hash = 0;// hash += (codigo != null ? codigo.hashCode() : 0);// return hash;// }//// @Override// public boolean equals(Object object) {// // TODO: Warning - this method won't work in the case the id fields are not set// if (!(object instanceof RequisicaoItem)) {// return false;// }// RequisicaoItem other = (RequisicaoItem) object;// if ((this.codigo == null && other.codigo != null) || (this.codigo != null && !this.codigo.equals(other.codigo))) {// return false;// }// return true;// }
e ao que parece funcionou perfeitamente, mas o que voce quis dizer com sobreescrever?
agradeço sua ajuda benigno,
porque isso acontece?
benignoms
Override = sobreescrever. Acho que é bug da versão… por que você não usa a versão 3.2? Houve um grande avanço da 2 para a 3.