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ário?"
header="Remover Usuá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ã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á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>
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ário?"
header="Remover Usuá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ã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 ^^
<p:commandLink update="formBusca containerlista:lista" ajax="true" actionListener="#{perfilUsuarioBean.removeEvento}">
<p:graphicImage url="delete.png" style="border: 0;"/>
<!-- uma imagem para aparecer bunitinha -->
<f:attribute name="nomeASerCapturado" value="#{perfilUsuarioBean.id}"/>
<!--o id do usuario a ser removido -->
</p:commandLink>
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ário selecionado ?"
modal="true"
header="Confirme a remoçã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ã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.