Olá pessoal…
Tenho um dataTable e dentro dele tenho a opção de excluir, só que antes de excluir eu quero que seja mostrado uma msg de confirmação.
Já vi vários exemplos mais ainda não dei conta de fazer funcionar. Pois quando eu confirmo a exclusão ele não altera nada na tabela.
Obs: estou usando Hibernate junto com Primefaces no Jsf.
Vai ai o código…
<h:bodystyleClass="corpo"><h:formid="formListaUsusarios"><center><h2>Escolhaumaopção</h2></center><p:dockposition="top"maxWidth="30"><p:menuitemvalue="Novo"icon="resources/Imagens/user_into.png"url="usuario_cadastro.jsf"/><p:menuitemvalue="Imprimir"icon="resources/Imagens/Print.png"/><p:menuitemvalue="Sair"icon="resources/Imagens/sair_2.png"url="tela_Principal.jsf"/></p:dock><br/><br/><br/><p:messages/><p:dataTableid="tabela"value="#{usuarioBean.lista_Todos}"var="usuario"paginator="true"rows="5"paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"widgetVar="tabela_usuarios"rowsPerPageTemplate="5,10,15"emptyMessage="Não existem usuarios cadastrado no sistema."cellpadding="2"styleClass="tabela"headerClass="cabecalho"columnClasses="primeiro, ultimo"><f:facetname="header">UsuariosCadastrados</f:facet><f:facetname="footer">FimdaListagemdeUsuarios</f:facet><p:columnid="coluna_id"style="text-align: center; width:35px;"><f:facetname="header">Id</f:facet><h:outputTextid="id"value="#{usuario.idUsuario}"/><p:tooltipfor="id"value="Id do usuario no sistema"showEffect="fade"hideEffect="fade"/></p:column><p:columnstyle="text-align: center; width:100px;"><f:facetname="header">Status</f:facet><h:commandLinkid="status"action="#{usuarioBean.active}"><h:graphicImagelibrary="Imagens"name="Status_#{usuario.status}.png"style="border:0"width="30"height="30"/><f:setPropertyActionListenertarget="#{usuarioBean.usuario}"value="#{usuario}"/></h:commandLink><p:tooltipfor="status"value="Status do usuario no sistema"showEffect="fade"hideEffect="fade"/></p:column><p:columnid="coluna_nome"sortBy="#{usuario.nome}"filterBy="#{usuario.nome}"style="text-align: lefth; width:250px;"><f:facetname="header">Nome</f:facet><h:outputTextvalue="#{usuario.nome}"/></p:column><p:columnid="coluna_email"sortBy="#{usuario.email}"filterBy="#{usuario.email}"style="text-align: lefth; width:250px;"><f:facetname="header">E-mail</f:facet><h:outputTextvalue="#{usuario.email}"/></p:column><p:columnstyle="text-align: lefth; width:250px;"><f:facetname="header">Login</f:facet><h:outputTextvalue="#{usuario.login}"/></p:column><p:columnstyle="text-align: lefth; width:200px;"><f:facetname="header">Senha</f:facet><h:outputTextvalue="#{usuario.senha}"/></p:column><p:columnstyle="text-align: center; width:80px;"><f:facetname="header">Nivel</f:facet><h:outputTextvalue="#{usuario.nivel}"/></p:column><p:columnstyle="text-align: center;"><f:facetname="header">Editar</f:facet><h:commandLinkaction="#{usuarioBean.edit}"><h:graphicImagelibrary="Imagens"name="TextEdit.png"style="border:0"width="30"height="30"/><f:setPropertyActionListenertarget="#{usuarioBean.usuario}"value="#{usuario}"></f:setPropertyActionListener><f:setPropertyActionListenertarget="#{usuarioBean.destino}"value="listagem"></f:setPropertyActionListener></h:commandLink></p:column><p:columnstyle="text-align: center;"><f:facetname="header">Excluir</f:facet><p:commandLinkonclick="confirmation.show()"><h:graphicImagelibrary="Imagens"name="RecycleBin1.png"style="border:0"width="30"height="30"/><f:setPropertyActionListenertarget="#{usuarioBean.usuario}"value="#{usuario}"/></p:commandLink></p:column></p:dataTable></h:form><h:formid="dlg"><p:confirmDialogmessage="Deseja realmente excluir este registro?"hideEffect="explode"header="Aviso"severity="alert"widgetVar="confirmation"modal="true"><!--caso seja sim chamo o metodo excluir, e fecho o modal com o oncomplete, tenho o process que estou dizendo para processar o form, e update para atualizar a tabela--><p:commandButtonvalue="Sim"action="#{usuarioBean.delete}"oncomplete="confirmation.hide();"ajax="false"/><!--caso seja não somente fecha o modal--><p:commandButtonvalue="Não"onclick="confirmation.hide();"type="button"ajax="false"/></p:confirmDialog></h:form></h:body>
Já adiantando, se estiver usando a versão 3.3, está com bug no confirmDialog. Tente com a versão 3.2.
edit: falo das versões do primefaces.
L
Leandro_Karlos
Muito obrigado pela resposta ErickRAR;
obs: estou usando a versão 3.2 já.
<?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:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:p="http://primefaces.org/ui"xmlns:ui="http://java.sun.com/jsf/facelets"><h:head><linktype="text/css"rel="stylesheet"href="resources/css/estilo.css"/><scripttype="text/javascript"src="PrimeFacesLocales.js"></script><linkrel="shortcut icon"href="resources/Imagens/favicon.ico"type="resources/Imagens/ico"/><title>Listagem de Usuários Cadastrados</title></h:head><h:bodystyleClass="corpo"><h:formid="formListaUsusarios"><center><h2>Escolha uma opção</h2></center><p:dockposition="top"maxWidth="30"><p:menuitemvalue="Novo"icon="resources/Imagens/user_into.png"url="usuario_cadastro.jsf"/><p:menuitemvalue="Imprimir"icon="resources/Imagens/Print.png"/><p:menuitemvalue="Sair"icon="resources/Imagens/sair_2.png"url="tela_Principal.jsf"/></p:dock><br/><br/><br/><p:messages/><p:dataTableid="tabela"value="#{usuarioBean.lista_Todos}"var="usuario"paginator="true"rows="5"paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"widgetVar="tabela_usuarios"rowsPerPageTemplate="5,10,15"emptyMessage="Não existem usuarios cadastrado no sistema."cellpadding="2"styleClass="tabela"headerClass="cabecalho"columnClasses="primeiro, ultimo"><f:facetname="header">Usuarios Cadastrados</f:facet><f:facetname="footer">Fim da Listagem de Usuarios</f:facet><p:columnid="coluna_id"style="text-align: center; width:35px;"><f:facetname="header">Id</f:facet><h:outputTextid="id"value="#{usuario.idUsuario}"/><p:tooltipfor="id"value="Id do usuario no sistema"showEffect="fade"hideEffect="fade"/></p:column><p:columnstyle="text-align: center; width:100px;"><f:facetname="header">Status</f:facet><h:commandLinkid="status"action="#{usuarioBean.active}"><h:graphicImagelibrary="Imagens"name="Status_#{usuario.status}.png"style="border:0"width="30"height="30"/><f:setPropertyActionListenertarget="#{usuarioBean.usuario}"value="#{usuario}"/></h:commandLink><p:tooltipfor="status"value="Status do usuario no sistema"showEffect="fade"hideEffect="fade"/></p:column><p:columnid="coluna_nome"sortBy="#{usuario.nome}"filterBy="#{usuario.nome}"style="text-align: lefth; width:250px;"><f:facetname="header">Nome</f:facet><h:outputTextvalue="#{usuario.nome}"/></p:column><p:columnid="coluna_email"sortBy="#{usuario.email}"filterBy="#{usuario.email}"style="text-align: lefth; width:250px;"><f:facetname="header">E-mail</f:facet><h:outputTextvalue="#{usuario.email}"/></p:column><p:columnstyle="text-align: lefth; width:250px;"><f:facetname="header">Login</f:facet><h:outputTextvalue="#{usuario.login}"/></p:column><p:columnstyle="text-align: lefth; width:200px;"><f:facetname="header">Senha</f:facet><h:outputTextvalue="#{usuario.senha}"/></p:column><p:columnstyle="text-align: center; width:80px;"><f:facetname="header">Nivel</f:facet><h:outputTextvalue="#{usuario.nivel}"/></p:column><p:columnstyle="text-align: center;"><f:facetname="header">Editar</f:facet><h:commandLinkaction="#{usuarioBean.edit}"><h:graphicImagelibrary="Imagens"name="TextEdit.png"style="border:0"width="30"height="30"/><f:setPropertyActionListenertarget="#{usuarioBean.usuario}"value="#{usuario}"></f:setPropertyActionListener><f:setPropertyActionListenertarget="#{usuarioBean.destino}"value="listagem"></f:setPropertyActionListener></h:commandLink></p:column><p:columnstyle="text-align: center;"><f:facetname="header">Excluir</f:facet><p:commandLinkonclick="confirmation.show()"><h:graphicImagelibrary="Imagens"name="RecycleBin1.png"style="border:0"width="30"height="30"/><f:setPropertyActionListenertarget="#{usuarioBean.usuario}"value="#{usuario}"/></p:commandLink></p:column></p:dataTable></h:form><h:formid="dlg"><p:confirmDialogmessage="Deseja realmente excluir este registro?"hideEffect="explode"header="Aviso"severity="alert"widgetVar="confirmation"modal="true"><!--caso seja sim chamo o metodo excluir, e fecho o modal com o oncomplete, tenho o process que estou dizendo para processar o form, e update para atualizar a tabela--><p:commandButtonvalue="Sim"action="#{usuarioBean.delete}"oncomplete="confirmation.hide();"ajax="false"/><!--caso seja não somente fecha o modal--><p:commandButtonvalue="Não"onclick="confirmation.hide();"type="button"ajax="false"/></p:confirmDialog></h:form></h:body></html>
E
ErickRAR
Tente retirando o “ajax=false” e atualizando o outro form:
<p:confirmDialogmessage="Deseja realmente excluir este registro?"hideEffect="explode"header="Aviso"severity="alert"widgetVar="confirmation"modal="true"><!--caso seja sim chamo o metodo excluir, e fecho o modal com o oncomplete, tenho o process que estou dizendo para processar o form, e update para atualizar a tabela--><p:commandButtonvalue="Sim"action="#{usuarioBean.delete}"oncomplete="confirmation.hide();"update=":formListaUsusarios"/><!--caso seja não somente fecha o modal--><p:commandButtonvalue="Não"onclick="confirmation.hide();"type="button"/></p:confirmDialog>
Se não funcionar, troque de action para actionListener. Não deve ter diferença nesse caso, mas é como está no exemplo do primefaces.
L
Leandro_Karlos
Ainda não deu certo…
Fiz alguns testes ele percorre todos os metodos que tem que percorrer mais não faz nada no banco.
Me retorna esta msg:
Dentro do delete
Dentro do URN Excluir - é uma classe com regras do negocio, somente passa por ela no caso de excluir.
Dentro do Dao deletar
Jul 24, 2012 9:01:23 PM org.hibernate.event.internal.DefaultDeleteEventListener deleteTransientEntity
INFO: HHH000114: Handling transient entity in delete processing
E
ErickRAR
Poste os métodos do usuarioBean e o do banco para deletar.
L
Leandro_Karlos
publicStringdelete(){System.out.println("Dentro do delete");UsuarioRNusuarioRN=newUsuarioRN();usuarioRN.excluir(usuario);lista_Todos=null;returnnull;}publicvoidexcluir(Usuariousuario){System.out.println("Dentro do URN Excluir");usuarioDAO.deletar(usuario);}publicvoiddeletar(Usuariousuario){System.out.println("Dao deletar");session.delete(usuario);}
Só lembrando funciona legal sem a msg de confirmação.
E
ErickRAR
Então deve ser algum bug do primefaces mesmo, pois o resto parece estar correto.
Mas você pode fazer o seu proprio “confirmdialog”. Só criar um dialog com dois botoes, um para confirmar e outro para cancelar.
L
Leandro_Karlos
To pirando com isso já tem quatro dias e não da certo…
Devo usar uma outra versão então?
Ok vou ver aqui…
ErickRAR do jeito que vc me passou eu coloquei e não ta dando certo.
Devo colocar fora do outro form mesmo? Ou dentro dele?
E
ErickRAR
Fora do outro form, e o commandButton dentro do dataTable com a lista de usuários.
L
Leandro_Karlos
Dentro não da certo também…
L
Leandro_Karlos
Não deu certo…
Nem sei mais o que fazer…
L
Leandro_Karlos
É meu amigo ErickRAR na versão 2.2.1 do primefaces ele não aceita o <f:setPropertyActionListener/>.
To perdido…
O mais interessante é que quando eu chamo o método delete dentro do dataTable da certo;
Mais quando tem que confirmar da errado.
E
ErickRAR
Não pode atualizar a versão para 3.2?
L
Leandro_Karlos
Estou com a 3.2, será que a ultima como vc disse não daria certo?
E
ErickRAR
Tente também. Eu tenho a versão 3.3 aqui, e meu confirmDialog é parecido com esse abaixo. Ele não funciona nessa versão, mas se eu alterar para 3.2,funciona normalmente.
<p:confirmDialogmessage="Deseja realmente excluir este registro?"hideEffect="explode"header="Aviso"severity="alert"widgetVar="confirmation"modal="true"><!--caso seja sim chamo o metodo excluir, e fecho o modal com o oncomplete, tenho o process que estou dizendo para processar o form, e update para atualizar a tabela--><p:commandButtonvalue="Sim"actionListener="#{usuarioBean.excluir}"oncomplete="confirmation.hide();"update=":formListaUsusarios"/><!--caso seja não somente fecha o modal--><p:commandButtonvalue="Não"onclick="confirmation.hide();"type="button"/></p:confirmDialog>
Será que o problema esta no hibernate?
Como já disse ele percorre todos os metodos mas não faz nada no banco.
Mas não é não sem confirmar deleta normal…
L
Leandro_Karlos
Então ErickRAR o que me dizes…
Tentei de tudo que sei e não deu certo.
Será que tenho que fazer na unha mesmo?
L
Leandro_Karlos
Pelo que to vendo tem muitos com este problema.
Estive pesquisando aki no guj e encontrei muitos com o mesmo dilema mas nenhum chegou a uma solução.
Acho que não foi uma boa escolha de frame…
E
ErickRAR
Veja no fórum deles se há alguma coisa.
L
Leandro_Karlos
E ai colega…
Kara to sem saber o que fazer com esse problema.
L
Leandro_Karlos
Amigos ainda estou com o mesmo problema…
Alguém pode me ajudar?