Jsf - problema removendo item de um ArrayList

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.
:expressionless:

È vou ficar tentando aqui, muito obrigado pela ajuda!