Tenho um dataTable onde adiciono os contatos da pessoa numa lista… até ai blz
com a lista preenchida, quando clico no botão excluir, ao invés de remover o item desejado ele remove o que está acima dele
não entendo o que tá acontecendo… ele leva o objeto certo no método mas na hora que ele dá o remove deleta o Objeto errado!
Pesquisei em alguns foruns e vi que tem que implementar os metodos hashCode e o equals mesmo assim não esta funcionando.
Segue codigo:
packagebr.com.estub.boletim.modelo;importjava.io.Serializable;importjava.math.BigDecimal;importjava.util.Calendar;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.Id;importjavax.persistence.ManyToOne;importjavax.persistence.Temporal;importjavax.persistence.TemporalType;importorg.hibernate.proxy.HibernateProxy;@EntitypublicclassItemBoletimimplementsSerializable{@Id@GeneratedValueprivateLongid;@Column(nullable=false)@Temporal(TemporalType.DATE)privateCalendardata=Calendar.getInstance();privateBigDecimalfrete;privateBigDecimalcustoDeslocamento;privateBigDecimalmaoDeObraTercerizada;privateBigDecimalrefeicao;privateBigDecimalhospedagem;privateBigDecimaldocumentacao;privateBigDecimaloutrasDespesas;@ManyToOneprivateBoletimboletim;publicLonggetId(){returnid;}publicvoidsetId(Longid){this.id=id;}publicCalendargetData(){returndata;}publicvoidsetData(Calendardata){this.data=data;}publicBigDecimalgetFrete(){returnfrete;}publicvoidsetFrete(BigDecimalfrete){this.frete=frete;}publicBigDecimalgetCustoDeslocamento(){returncustoDeslocamento;}publicvoidsetCustoDeslocamento(BigDecimalcustoDeslocamento){this.custoDeslocamento=custoDeslocamento;}publicBigDecimalgetMaoDeObraTercerizada(){returnmaoDeObraTercerizada;}publicvoidsetMaoDeObraTercerizada(BigDecimalmaoDeObraTercerizada){this.maoDeObraTercerizada=maoDeObraTercerizada;}publicBigDecimalgetRefeicao(){returnrefeicao;}publicvoidsetRefeicao(BigDecimalrefeicao){this.refeicao=refeicao;}publicBigDecimalgetHospedagem(){returnhospedagem;}publicvoidsetHospedagem(BigDecimalhospedagem){this.hospedagem=hospedagem;}publicBigDecimalgetDocumentacao(){returndocumentacao;}publicvoidsetDocumentacao(BigDecimaldocumentacao){this.documentacao=documentacao;}publicBigDecimalgetOutrasDespesas(){returnoutrasDespesas;}publicvoidsetOutrasDespesas(BigDecimaloutrasDespesas){this.outrasDespesas=outrasDespesas;}publicBoletimgetBoletim(){returnboletim;}publicvoidsetBoletim(Boletimboletim){this.boletim=boletim;}@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+((id==null)?0:id.hashCode());returnresult;}@Overridepublicbooleanequals(Objectobj){if(this==obj)returntrue;if(obj==null)returnfalse;if(getClass()!=obj.getClass())returnfalse;ItemBoletimother=(ItemBoletim)obj;if(id==null){if(other.id!=null)returnfalse;}elseif(!id.equals(other.id))returnfalse;returntrue;}// @Override // public boolean equals(Object obj) { // if (this == obj) // return true; // if (obj == null) // return false; // if(obj.getClass().getName().toLowerCase().contains("javassist")){ // obj = (Object) ((HibernateProxy) obj).getHibernateLazyInitializer().getImplementation(); // } // if (getClass() != obj.getClass()) // return false; // ItemBoletim other = (ItemBoletim) obj; // if (id == null) { // if (other.id != null) // return false; // } else if (!id.equals(other.id)) // return false; // return true; // } }
Metodo que exlui meu item
publicvoidacaoExcluirItem(ItemBoletimitemBoletim){System.out.println("*******EXLUINDO ITEM DA LISTA******");this.boletim.getItens().remove(itemBoletim);}
xhtml
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:p="http://primefaces.prime.com.tr/ui"><ui:compositiontemplate="_templete.xhtml"><ui:definename="titulo">Cadastra Boletim de Caixa</ui:define><ui:definename="conteudo"><h2></h2><h:formid="formulario"><h:panelGridcolumns="2"><h:outputLabelvalue="Contrato:* "for="contrato"/><p:inputMaskid="contrato"value="#{boletimMB.contrato.codigo}"mask="a*-99/9999"required="true"label="Campo Contrato"/><h:outputLabelvalue="Boletim:* "for="boletim"/><p:inputTextid="boletim"value="#{boletimMB.boletim.codigo}"required="true"label="Campo Boletim"/></h:panelGrid><h:formid="formItem"><p:fieldsetlegend="Itens do Boletim"toggleable="true"><h:panelGridcolumns="4"><h:outputLabelvalue="Data:* "for="data"/><p:calendarpattern="dd/MM/yyyy"mode="popup"showOn="button"id="data"required="true"label="Campo Data"value="#{boletimMB.item.data.time}"><f:convertDateTimepattern="dd/MM/yyyy"/></p:calendar><h:outputLabelvalue="Frete: "for="frete"/><p:inputTextid="frete"value="#{boletimMB.item.frete}"/><h:outputLabelvalue="Custo de Deslocamento: "for="cust"/><p:inputTextid="cust"value="#{boletimMB.item.custoDeslocamento}"/><h:outputLabelvalue="Mão de Obra Tercerizada: "for="maoDeObra"/><p:inputTextid="maoDeObra"value="#{boletimMB.item.maoDeObraTercerizada}"/><h:outputLabelvalue="Refeição: "for="ref"/><p:inputTextid="ref"value="#{boletimMB.item.refeicao}"/><h:outputLabelvalue="Hospedagem: "for="hosp"/><p:inputTextid="hosp"value="#{boletimMB.item.hospedagem}"/><h:outputLabelvalue="Documentação: "for="doc"/><p:inputTextid="doc"value="#{boletimMB.item.documentacao}"/><h:outputLabelvalue="Outras Despesas: "for="outras"/><p:inputTextid="outras"value="#{boletimMB.item.outrasDespesas}"/><f:facetname="footer"><h:panelGrouplayout="block"style="text-align: center"><p:commandButtonajax="false"action="#{boletimMB.guardaItem}"id="btnIncluir"value="Guarda Item"></p:commandButton></h:panelGroup></f:facet></h:panelGrid></p:fieldset><p:dataTableid="listar"var="item"value="#{boletimMB.boletim.itens}"widgetVar="carsTable"paginator="true"rows="3"rowsPerPageTemplate="5,10,15"selectionMode="single"><f:facetname="header">
Itens Boletim
</f:facet><p:column><f:facetname="header">Data</f:facet><h:outputTextvalue="#{item.data.time}"></h:outputText></p:column><p:columnheaderText="Frete"><h:outputTextvalue="#{item.frete}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="Custo de Deslocamento"><h:outputTextvalue="#{item.custoDeslocamento}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="Mão de Obra Tercerizada"><h:outputTextvalue="#{item.maoDeObraTercerizada}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="refeicao"><h:outputTextvalue="#{item.refeicao}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="Hospedagem"><h:outputTextvalue="#{item.hospedagem}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="Documentação"><h:outputTextvalue="#{item.documentacao}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="Outras Despesas"><h:outputTextvalue="#{item.outrasDespesas}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:column><f:facetname="header"><h:outputTextvalue="Ações"/></f:facet><h:panelGroup><p:commandButtontype="button"value="Excluir"onclick="conf#{item.id}.show()"image="ui-icon-close"></p:commandButton><p:confirmDialogmessage="Deseja excluir este registro?"showEffect="bounce"hideEffect="explode"header="Confirmação de Exclusão"severity="alert"widgetVar="conf#{item.id}"><p:commandButtonajax="false"type="push"value="Sim"action="#{boletimMB.acaoExcluirItem(item)}"immediate="true"image="ui-icon-check"><f:paramvalue="#{item.id}"name="itemId"/></p:commandButton><p:commandButtonvalue="Não"onclick="conf#{item.id}.hide()"type="button"image="ui-icon-close"/></p:confirmDialog></h:panelGroup></p:column><f:facetname="footer"><h:panelGrouplayout="block"style="text-align: center"><p:commandButtonaction="#{boletimMB.acaoSalvar}"value="Salvar"><!-- <f:ajax execute=":formulario" render=":formulario :formulario:formularioItem"></f:ajax> --></p:commandButton></h:panelGroup></f:facet></p:dataTable></h:form></h:form></ui:define></ui:composition></html>
Cara, eu tive um problema parecido uma vez, sinceramente não conseguia entender o que ocorria, eu cheguei a debugar e tudo mais, mas ocorria algo parecido com o que você descreveu…
No final, eu passei a enviar o índice do registro na lista, e removia o registro pelo índice mesmo.
G
gilmar_rj
Como eu faria para poder passar o indice no xhtml?
Eu passo o objeto item dessa forma:
action="#{boletimMB.acaoExcluirItem(item)}"
Rodrigo_Sasaki
na sua tag dataTable deve haver uma propriedade rowKeyVar, que você associa pro nome que quiser… e aí envia. assim:<p:dataTable id="table" rowKeyVar="rowKey" /> e aí na chamada ao método: action="#{boletimMB.acaoExcluirItem(rowKey)}"
J
jo_user
Recebo qual item quero alterar ou excluir da minha lista desta forma
public void alteraProduto(ActionEvent event){
UIComponent link = event.getComponent();
UIParameter param = (UIParameter) link.findComponent("editId");
}
G
gilmar_rj
Olá digaoneves !
Fiz o que vc falou mas esta dando erro, se o metodo que esta recebendo.
publicvoidacaoExcluirItem(StringitemBoletim){System.out.println("*******EXLUINDO ITEM DA LISTA******");this.boletim.getItens().remove(itemBoletim);}
Esse metodo esta recebendo uma String não sei se esta certo mas eu ja coloquei Integer, Long e tambem não funcionou.
Rodrigo_Sasaki
Cara, acabei de criar esse botão aqui e funcionou normalmente:<h:commandButton id="botao" value="Opa" action="#{meuMB.teste(rowKey)}">E meu método está assim: public void teste(Integer number){
System.out.println(number);
} você fez algo diferente do que eu fiz aí?
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:f="http://java.sun.com/jsf/core"xmlns:h="http://java.sun.com/jsf/html"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:p="http://primefaces.prime.com.tr/ui"><ui:compositiontemplate="_templete.xhtml"><ui:definename="titulo">Cadastra Boletim de Caixa</ui:define><ui:definename="conteudo"><h2></h2><h:formid="formulario"><h:panelGridcolumns="2"><h:outputLabelvalue="Contrato:* "for="contrato"/><p:inputMaskid="contrato"value="#{boletimMB.contrato.codigo}"mask="a*-99/9999"required="true"label="Campo Contrato"/><h:outputLabelvalue="Boletim:* "for="boletim"/><p:inputTextid="boletim"value="#{boletimMB.boletim.codigo}"required="true"label="Campo Boletim"/></h:panelGrid><h:formid="formItem"><p:fieldsetlegend="Itens do Boletim"toggleable="true"><h:panelGridcolumns="4"><h:outputLabelvalue="Data:* "for="data"/><p:calendarpattern="dd/MM/yyyy"mode="popup"showOn="button"id="data"required="true"label="Campo Data"value="#{boletimMB.item.data.time}"><f:convertDateTimepattern="dd/MM/yyyy"/></p:calendar><h:outputLabelvalue="Frete: "for="frete"/><p:inputTextid="frete"value="#{boletimMB.item.frete}"/><h:outputLabelvalue="Custo de Deslocamento: "for="cust"/><p:inputTextid="cust"value="#{boletimMB.item.custoDeslocamento}"/><h:outputLabelvalue="Mão de Obra Tercerizada: "for="maoDeObra"/><p:inputTextid="maoDeObra"value="#{boletimMB.item.maoDeObraTercerizada}"/><h:outputLabelvalue="Refeição: "for="ref"/><p:inputTextid="ref"value="#{boletimMB.item.refeicao}"/><h:outputLabelvalue="Hospedagem: "for="hosp"/><p:inputTextid="hosp"value="#{boletimMB.item.hospedagem}"/><h:outputLabelvalue="Documentação: "for="doc"/><p:inputTextid="doc"value="#{boletimMB.item.documentacao}"/><h:outputLabelvalue="Outras Despesas: "for="outras"/><p:inputTextid="outras"value="#{boletimMB.item.outrasDespesas}"/><f:facetname="footer"><h:panelGrouplayout="block"style="text-align: center"><p:commandButtonajax="false"action="#{boletimMB.guardaItem}"id="btnIncluir"value="Guarda Item"></p:commandButton></h:panelGroup></f:facet></h:panelGrid></p:fieldset><p:dataTableid="listar"var="item"value="#{boletimMB.boletim.itens}"widgetVar="carsTable"paginator="true"rows="3"rowsPerPageTemplate="5,10,15"selectionMode="single"rowKeyVar="rowKey"><f:facetname="header">
Itens Boletim
</f:facet><p:column><f:facetname="header">Data</f:facet><h:outputTextvalue="#{item.data.time}"></h:outputText></p:column><p:columnheaderText="Frete"><h:outputTextvalue="#{item.frete}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="Custo de Deslocamento"><h:outputTextvalue="#{item.custoDeslocamento}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="Mão de Obra Tercerizada"><h:outputTextvalue="#{item.maoDeObraTercerizada}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="refeicao"><h:outputTextvalue="#{item.refeicao}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="Hospedagem"><h:outputTextvalue="#{item.hospedagem}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="Documentação"><h:outputTextvalue="#{item.documentacao}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:columnheaderText="Outras Despesas"><h:outputTextvalue="#{item.outrasDespesas}"><f:convertNumbertype="currency"currencySymbol="R$ "locale="pt_BR"></f:convertNumber></h:outputText></p:column><p:column><f:facetname="header"><h:outputTextvalue="Ações"/></f:facet><h:panelGroup><p:commandButtontype="button"value="Excluir"onclick="conf#{item.id}.show()"image="ui-icon-close"></p:commandButton><p:confirmDialogmessage="Deseja excluir este registro?"showEffect="bounce"hideEffect="explode"header="Confirmação de Exclusão"severity="alert"widgetVar="conf#{item.id}"><p:commandButtonajax="false"type="push"value="Sim"action="#{boletimMB.acaoExcluirItem(rowKey)}"immediate="true"image="ui-icon-check"></p:commandButton><p:commandButtonvalue="Não"onclick="conf#{item.id}.hide()"type="button"image="ui-icon-close"/></p:confirmDialog></h:panelGroup></p:column><f:facetname="footer"><h:panelGrouplayout="block"style="text-align: center"><p:commandButtonaction="#{boletimMB.acaoSalvar}"value="Salvar"><!-- <f:ajax execute=":formulario" render=":formulario :formulario:formularioItem"></f:ajax> --></p:commandButton></h:panelGroup></f:facet></p:dataTable></h:form></h:form></ui:define></ui:composition></html>
meu bean
packagebr.com.estub.boletim.mb;importjava.io.Serializable;importjava.util.List;importjavax.faces.bean.ManagedBean;importjavax.faces.bean.ManagedProperty;importjavax.faces.bean.ViewScoped;importorg.hibernate.cache.ReadWriteCache.Item;importbr.com.estub.boletim.modelo.Boletim;importbr.com.estub.boletim.modelo.Contrato;importbr.com.estub.boletim.modelo.ItemBoletim;importbr.com.estub.boletim.service.BoletimService;importbr.com.estub.boletim.util.JSFUtil;@ManagedBean(name="boletimMB")@ViewScopedpublicclassBoletimMBimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@ManagedProperty("#{boletimService}")privateBoletimServicemodelo;privateBoletimboletim=newBoletim();privateList<Boletim>boletins=null;privateItemBoletimitem=newItemBoletim();privateContratocontrato=newContrato();publicBoletimServicegetModelo(){returnmodelo;}publicvoidsetModelo(BoletimServicemodelo){this.modelo=modelo;}publicBoletimgetBoletim(){returnboletim;}publicvoidsetBoletim(Boletimboletim){this.boletim=boletim;}publicList<Boletim>getBoletins(){if(this.boletins==null){this.boletins=modelo.listaTodos();}returnthis.boletins;}publicvoidsetBoletins(List<Boletim>boletins){this.boletins=boletins;}publicItemBoletimgetItem(){returnitem;}publicvoidsetItem(ItemBoletimitem){this.item=item;}publicContratogetContrato(){returncontrato;}publicvoidsetContrato(Contratocontrato){this.contrato=contrato;}publicStringacaoSalvar(){System.out.println("*****SALVANDO BOLETIM*****");this.boletim.setContrato(contrato);this.modelo.salvar(this.boletim);this.setBoletim(newBoletim());return"boletimListar.xhtml";}publicvoidalterar(){this.modelo.altera(boletim);}publicvoidguardaItem(){this.item.setBoletim(boletim);this.boletim.getItens().add(this.item);this.item=newItemBoletim();}publicvoidacaoExcluirItem(IntegeritemBoletim){System.out.println("*******EXLUINDO ITEM DA LISTA******");System.out.println(itemBoletim);//this.boletim.getItens().remove(itemBoletim);}publicStringacaoExcluir(){System.out.println("***EXCLUINDO BOLETIM***");Longid=JSFUtil.getParametroLong("boletimId");BoletimobjetoDoBanco=this.modelo.getBuscaPorId(id);this.modelo.remover(objetoDoBanco);this.boletins=null;return"boletimListar";}publicStringacaoAbrirAlteracao(){Longid=JSFUtil.getParametroLong("boletimId");BoletimobjetoDoBanco=this.modelo.getBuscaPorId(id);this.setBoletim(objetoDoBanco);return"boletim";}publicvoidlimpaFormulario(){this.setBoletim(newBoletim());this.setContrato(newContrato());this.setItem(newItemBoletim());}}
Rodrigo_Sasaki
Evite postar todo o seu código, cara… a não ser que seja necessário. Fica difícil de achar seu problema, poste só o código que for relevante.
Vamos lá, veja essa parte da sua stacktrace
java.lang.NullPointerException
at java.lang.Class.isAssignableFrom(Native Method)
Está sendo lançada uma NullPointerException, aí, creio eu que provavelmente em um método equals(), verifique o equals da classe em questão, e veja se é lá que a exceção é lançada.