[RESOLVIDO] problema ao remover utilizando confirmDialog

Bom dia a todos,

Estou enfrentando o seguinte problema, quando eu acabo de incluir um usuário e depois tento remover outro usuário ele está removendo não o usuário que eu selecionei mais sim o ultimo usúario incluso, ou me parece o ultimo usuário da lista.

Segue os codigos.

	 <p:column>
			<p:commandButton id="showDialogButton" onclick="confirmation.show()" value="Remover" type="button"/>
				<p:confirmDialog id="confirmDialog" message="Tem certeza que deseja remover o usu&#225;rio?"  
                		header="Remover Usu&#225;io" severity="alert" widgetVar="confirmation">
                   <p:commandButton id="confirm" value="Sim" update="messages" oncomplete="confirmation.hide()"  
                   		 action="#{perfilUsuarioBean.remove(perfilUsuario)}" />  
        		   <p:commandButton id="decline" value="N&#227;o" onclick="confirmation.hide()" type="button" />  
                </p:confirmDialog>
		 </p:column>
public void remove(PerfilUsuario perfilUsuario){  
		DAO<PerfilUsuario> dao = new DAO<PerfilUsuario>(PerfilUsuario.class);
		dao.remove(perfilUsuario);
		this.perfilUsuarios = dao.listaTodos();
	}  

Mais no primefaces ele faz com o actionListener eu não sei bem a diferença entre eles mais quando eu tento remover com o actionListener ele da um erro informando que não conseguiu encontrar o metodo.

Method not found: br.com.sisapropriacao.mb.PerfilUsuarioBean@b41cfa.removeEvento(br.com.sisapropriacao.modelo.PerfilUsuario)
	at org.apache.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:225)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:251)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)

Segue o metodo utilizando o ActionEvent:

	public void removeEvento(ActionEvent actionEvent, PerfilUsuario perfilUsuario){  
		DAO<PerfilUsuario> dao = new DAO<PerfilUsuario>(PerfilUsuario.class);
		dao.remove(perfilUsuario);
		this.perfilUsuarios = dao.listaTodos();
	}  
 <p:column>
			<p:commandButton id="showDialogButton" onclick="confirmation.show()" value="Remover" type="button"/>
				<p:confirmDialog id="confirmDialog" message="Tem certeza que deseja remover o usu&#225;rio?"  
                		header="Remover Usu&#225;io" severity="alert" widgetVar="confirmation">
                   <p:commandButton id="confirm" value="Sim" update="messages" oncomplete="confirmation.hide()"  
                   		 actionListener="#{perfilUsuarioBean.removeEvento(perfilUsuario)}" />  
        		   <p:commandButton id="decline" value="N&#227;o" onclick="confirmation.hide()" type="button" />  
                </p:confirmDialog>
		 </p:column>

Desde já, obrigado a todos.

A assinatura do seu método deve ser: public void removeEvento(ActionEvent actionEvent)

No seu botão remover você pode chamar <p:commandButton> <f:setActionPropertyListener …

Você não ta atualizando sua dataTable na página!

Ficaria assim ?

 <p:column>
			<p:commandButton id="showDialogButton" onclick="confirmation.show()" value="Remover" type="button"/>
				<p:confirmDialog id="confirmDialog" message="Tem certeza que deseja remover o usu&#225;rio?"  
                		header="Remover Usu&#225;io" severity="alert" widgetVar="confirmation">
                   <p:commandButton id="confirm" value="Sim" update="messages" oncomplete="confirmation.hide()"  
                   		 actionListener="#{perfilUsuarioBean.removeEvento(perfilUsuario)}">
                   		<f:setPropertyActionListener target="#{perfilUsuario}" value="#{perfilUsuarioBean.removeEvento(perfilUsuario)}">
                   </p:commandButton>  
        		   <p:commandButton id="decline" value="N&#227;o" onclick="confirmation.hide()" type="button" />  
                </p:confirmDialog>
		 </p:column>

<p:column> <p:commandButton id="showDialogButton" onclick="confirmation.show()" value="Remover" type="button"/> <p:confirmDialog id="confirmDialog" message="Tem certeza que deseja remover o usuário?" header="Remover Usuáio" severity="alert" widgetVar="confirmation"> <p:commandButton id="confirm" value="Sim" update="messages" oncomplete="confirmation.hide()" actionListener="#{perfilUsuarioBean.removeEvento(perfilUsuario)}" /> <p:commandButton id="decline" value="Não" onclick="confirmation.hide()" type="button" /> </p:confirmDialog> </p:column>

atualiza as mensagens e sua dataTable … update=“messages, idDaSuaDataTable”

public void removeEvento(PerfilUsuario perfilUsuario){ DAO<PerfilUsuario> dao = new DAO<PerfilUsuario>(PerfilUsuario.class); dao.remove(perfilUsuario); this.perfilUsuarios = dao.listaTodos(); }

Está removendo só que continua removendo não o que eu seleciono na <p:dataTable> mais sim o ultimo registro dela. Alguma dica ?

Deixe de uma forma visualmente bonita ^^

&lt;p:commandLink update="formBusca containerlista:lista" ajax="true" actionListener="#{perfilUsuarioBean.removeEvento}"&gt;
       &lt;p:graphicImage url="delete.png" style="border: 0;"/&gt;
       &lt;!-- uma imagem para aparecer bunitinha --&gt;
       &lt;f:attribute name="nomeASerCapturado" value="#{perfilUsuarioBean.id}"/&gt;
       &lt;!--o id do usuario a ser removido --&gt;
&lt;/p:commandLink&gt;

capturando o usuario e executando a ação

public void removeEvento(ActionEvent e) {
        String id = (e.getComponent().getAttributes().get("nomeASerCapturado")).toString(); //captura a propriedade
        cdao.excluir(UsuarioBean.class, Integer.parseInt(id));
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario removido com sucesso!"));
        recarregaListaDoDatatable();
    }

assim eu creio ser a forma mais direta para fazer a exclusão, você não perde tempo com o componente, simplesmente encontar o id da tabela que você setou

Entendi, amanhã de manhã tento implementar e posto o resultado.

Depois de quebrar um pouco a cabeça eu consegui resolvar…Então lá vai galera…

Obs.: Não fiz com o ActionEvent pois estava sentindo dificuldade com o mesmo, então segue os codigos.

//Coluna onde possui o botão para remover que acaba sendo uma imagem
	                 <p:column style="width:58px;">
				<p:commandLink oncomplete="confirmationDialog.show()">
//O valor do value ele se refere a variavel da minha datatable e o target e o perfilselecionado na minha datatable
				      <f:setPropertyActionListener value="#{perfilUsuario}" target="#{perfilUsuarioBean.selectPerfil}" />
				       <h:graphicImage value="/resources/imagens/ele.jpg" style="width: 13px; height: 13px; border-style: none;" title="Delete" />
			       </p:commandLink>
			</p:column>
		 
        </p:dataTable>

//Após o datable eu chamo o confirmDialog
        <p:confirmDialog widgetVar="confirmationDialog"
			message="Tem certeza que deseja remover o usu&#225;rio selecionado ?"
			modal="true"
			header="Confirme a remo&#231;&#227;o" severity="alert" >
			//Se o valor for sim eu chamo a função no meu manegedBean 
			<p:commandButton value="Sim" action="#{perfilUsuarioBean.remove}"
			update="tbperfilUsuario" oncomplete="confirmationDialog.hide()"/>
			<p:commandButton value="N&#227;o" onclick="confirmationDialog.hide()" type="button"/>
		</p:confirmDialog>	
		</h:form>  
No meu bean:
//Aqui eu não sei se é uma boa pratica ou teria alguma outra forma de melhorar isso
    public String remove(){
		DAO<PerfilUsuario> dao = new DAO<PerfilUsuario>(PerfilUsuario.class);
//Aqui eu não sei se é uma boa pratica ou teria alguma outra forma de melhorar isso, mais aqui eu pego o perfilSelecionado passado pelo <f:setPropertyActionListener>
		dao.remove(getSelectPerfil());
		this.perfilUsuarios = dao.listaTodos();
		return "usuario?faces-redirect=true";
 	}

Além da galera ai de cima esse link também me ajudou pacas…

http://forum.primefaces.org/viewtopic.php?f=3&t=11635

Obrigado galera.