Olá Galera!
Tenho um dataTable onde adiciono os itens do boletim 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… já debuguei e tudo, ele leva o objeto certo no método mas na hora que ele dá o remove deleta o Objeto errado!
Já sobrescrevi os metodos “equals()” e “hashCode()” na minha classe Boletim e ItemBoletim mas não deu certo.
o método que recebe o evento para remover
<p:commandButton ajax="false" type="push" value="Sim"
action="#{boletimMB.acaoExcluirItem(item)}" immediate="true"
image="ui-icon-check">
</p:commandButton>
public void acaoExcluirItem(ItemBoletim itemBoletim) {
System.out.println("*******EXLUINDO ITEM DA LISTA******");
System.out.println(itemBoletim);
this.boletim.getItens().remove(itemBoletim);
}
Alguém pode me ajudar?
Tente assim:
O botão
<p:commandButton
onclick="confirmDeleteItemBoletim.show()"
icon="ui-icon-trash" ajax="true" >
<p:ajax update=":form"/>
<f:setPropertyActionListener
target="#{boletimMB.ItemBoletimSelecionado}"
value="#{item}" />
</p:commandButton>
Um confirm só por segurança
<p:confirmDialog message="Excluir item?" severity="alert"
widgetVar="confirmDeleteItemBoletim" visible="false" appendToBody="true"
modal="true">
<p:commandButton value="Sim" update=":form"
oncomplete="confirmDeleteItemBoletim.hide()"
actionListener="#{boletimMB.excluirItemBoletim}" icon="ui-icon-check" />
<p:commandButton value="Não" onclick="confirmDeleteItemBoletim.hide()"
type="button" icon="ui-icon-closethick" />
</p:confirmDialog>
E o boletimMB
public ItemBoletim getItemBoletimSelecionado() {
return itemBoletim;
}
public void setItemBoletimSelecionado(ItemBoletim itemBoletim) {
this.itemBoletim = itemBoletim;
}
public void excluirItemBoletim(ActionEvent actionEvent){
this.boletim.getItens().remove(itemBoletim);
}
Olá ErickRAR !
Fiz o que vc falou ainda não funcionou, acontece a mesma coisa, coloquei um break point e sempre exclui o primeiro item da tabela não o que eu selecionei.
segue meu codigo:
<h:form id="lista">
<p:dataTable id="listas" var="item" value="#{boletimMB.boletim.itens}"
widgetVar="carsTable" paginator="true" rows="3"
rowsPerPageTemplate="5,10,15" selectionMode="single">
<f:facet name="header">
Itens Boletim
</f:facet>
<p:column>
<f:facet name="header">Data</f:facet>
<h:outputText value="#{item.data.time}"></h:outputText>
</p:column>
<p:column headerText="Frete">
<h:outputText value="#{item.frete}">
<f:convertNumber type="currency" currencySymbol="R$ "
locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="Custo de Deslocamento">
<h:outputText value="#{item.custoDeslocamento}">
<f:convertNumber type="currency" currencySymbol="R$ "
locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="Mão de Obra Tercerizada">
<h:outputText value="#{item.maoDeObraTercerizada}">
<f:convertNumber type="currency" currencySymbol="R$ "
locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="refeicao">
<h:outputText value="#{item.refeicao}">
<f:convertNumber type="currency" currencySymbol="R$ "
locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="Hospedagem">
<h:outputText value="#{item.hospedagem}">
<f:convertNumber type="currency" currencySymbol="R$ "
locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="Documentação">
<h:outputText value="#{item.documentacao}">
<f:convertNumber type="currency" currencySymbol="R$ "
locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column headerText="Outras Despesas">
<h:outputText value="#{item.outrasDespesas}">
<f:convertNumber type="currency" currencySymbol="R$ "
locale="pt_BR"></f:convertNumber>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Ações" />
</f:facet>
<h:panelGroup>
<p:commandButton ajax="false" type="push" value="Alterar"
action="#{pessoaMB.acaoAbrirAlteracao}" immediate="true"
image="ui-icon-pencil">
<f:param value="#{item.id}" name="itemId" />
</p:commandButton>
<p:commandButton type="button" value="Excluir"
onclick="confirmDeleteItemBoletim.show()" image="ui-icon-close"
ajax="false">
<f:setPropertyActionListener
target="#{boletimMB.ItemBoletimSelecionado}" value="#{item}" />
</p:commandButton>
<p:confirmDialog message="Deseja excluir este registro?"
showEffect="bounce" hideEffect="explode"
header="Confirmação de Exclusão" severity="alert"
widgetVar="confirmDeleteItemBoletim" visible="false"
appendToBody="true" modal="true">
<p:commandButton type="push" value="Sim" update="lista"
oncomplete="confirmDeleteItemBoletim.hide()"
actionListener="#{boletimMB.excluirItemBoletim}"
image="ui-icon-check">
</p:commandButton>
<p:commandButton value="Não"
onclick="confirmDeleteItemBoletim.hide()" type="button"
image="ui-icon-close" />
</p:confirmDialog>
</h:panelGroup>
</p:column>
<f:facet name="footer">
<h:panelGroup layout="block" style="text-align: center">
<p:commandButton ajax="false" id="btnSalvar"
action="#{boletimMB.acaoSalvar}" value="Salvar">
<!-- <f:ajax execute=":formulario" render=":formulario :formulario:formularioItem"></f:ajax> -->
</p:commandButton>
</h:panelGroup>
</f:facet>
</p:dataTable>
</h:form>
Managed Bean
private ItemBoletim itemBoletim = new ItemBoletim();
public ItemBoletim getItemBoletimSelecionado() {
return itemBoletim;
}
public void setItemBoletimSelecionado(ItemBoletim itemBoletim) {
this.itemBoletim = itemBoletim;
}
public void excluirItemBoletim(ActionEvent actionEvent) {
System.out.println("*******EXLUINDO ITEM DA LISTA******");
System.out.println(itemBoletim);
this.boletim.getItens().remove(itemBoletim);
}
Tente com ajax = true, como coloquei anteriormente.
<p:commandButton value="Excluir"
onclick="confirmDeleteItemBoletim.show()"
image="ui-icon-close" ajax="true" >
<p:ajax update=":lista"/>
<f:setPropertyActionListener
target="#{boletimMB.ItemBoletimSelecionado}"
value="#{item}" />
</p:commandButton>
Também coloque o confirmDialog fora do dataTable, dentro de um <p:dialog>
Eu fiz o que vc falou tirei a confirmação de dentro da tabela e coloquei dentro de um <p:dialog> da seguinte forma:
<p:dialog>
<p:confirmDialog message="Deseja excluir este registro?"
showEffect="bounce" hideEffect="explode"
header="Confirmação de Exclusão" severity="alert"
widgetVar="confirmDeleteItemBoletim" visible="false"
appendToBody="true" modal="true">
<p:commandButton type="push" value="Sim" update=":lista"
oncomplete="confirmDeleteItemBoletim.hide()"
actionListener="#{boletimMB.excluirItemBoletim}"
image="ui-icon-check">
</p:commandButton>
<p:commandButton value="Não"
onclick="confirmDeleteItemBoletim.hide()" type="button"
image="ui-icon-close" />
</p:confirmDialog>
</p:dialog>
agora ele não esta exluindo os itens, será que fiz alguma coisa de errado?
Cara, se está realmente como falou, não sei como ajudar. Normalmente ou é o f:setPropertyActionListener que as pessoas esquecem, ou o ajax, que alteram para true/false.
È vou ficar tentando aqui, muito obrigado pela ajuda!