ConfirmDialog - Não está excluindo quando clica no botão de confirmação

Olá Srs…
sou iniciante e estou com o seguinte problema.

Estou com um datatable e criei um confirmDialog para excluir registros, mas na hora que você chama o confirmDialog ele exclui o registro antes que eu clique no botão de sim.

Se alguém puder me auxiliar eu agradeço

Obrigado

MINHA PAGINA

<?xml version='1.0' encoding='UTF-8' ?>
        <p:toolbar>

            <p:toolbarGroup align="left">

            </p:toolbarGroup>

            <p:toolbarGroup align="right">
                <p:commandButton icon="ui-icon-help"/>    
            </p:toolbarGroup>

        </p:toolbar>


        <p:panel header="Cadastro de Departamento" toggleable="true" toggleOrientation="horizontal">
            <p:growl showDetail="true"/>

            <div align="center">
                <h:outputLabel value="Os campos com ( * ) são obrigatórios"/>
            </div>


            <p:panelGrid columns="2">

                <h:outputLabel value="* Nome: " for="nome"/>
                <p:inputText id="nome" style="width: 150px" value="#{departamentoBean.departamento.nome}"/>
                <h:outputLabel value="* Setor " for="set"/>
                <p:inputText id="set" style="width: 150px" value="#{departamentoBean.departamento.setor}"/>

            </p:panelGrid>

            <br/>

            <p:commandButton value="Salvar" action="#{departamentoBean.salvar()}" ajax="false" icon="ui-icon-disk"/>
            <separator/>
            <p:commandButton value="Cancelar" action="#{departamentoBean.limpar()}" ajax="false" icon="ui-icon-close"/>
            <separator/>
            <p:commandButton value="Atualizar" action="#{departamentoBean.atualizar()}" ajax="false" icon="ui-icon-refresh"/>
        </p:panel>


        <h:form id="mensagem">
            <p:dataTable id="tab" value="#{departamentoBean.departamentos}" var="item" scrollable="true" scrollRows="100" >

                <f:facet name="header">
                    Tabela de Departamentos
                </f:facet>

                <p:column style="width: 40px">
                    <f:facet name="header">
                        <h:outputText value="Id"/>
                    </f:facet>
                    <h:outputText value="#{item.idDepartamento}"/>
                </p:column>
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Nome"/>
                    </f:facet>
                    <h:outputText value="#{item.nome}"/>
                </p:column>
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Setor"/>
                    </f:facet>
                    <h:outputText value="#{item.setor}"/>
                </p:column>
                <p:column style="width: 60px">
                    <f:facet name="header">
                        <h:outputText value="Ação"/>
                    </f:facet>

                    <p:commandButton icon="ui-icon-trash" action="#{departamentoBean.apagar()}" ajax="false"
                                     onclick="confirmation.show()">
                        <f:setPropertyActionListener value="#{item}" target="#{departamentoBean.departamento}"/>
                    </p:commandButton>

                    <p:commandButton icon="ui-icon-pencil" action="cadastro-departamento" ajax="false">
                        <f:setPropertyActionListener value="#{item}" target="#{departamentoBean.departamento}"/>
                    </p:commandButton>
                </p:column>
            </p:dataTable>



        </h:form>

        <p:confirmDialog id="confirmDialog" message="Deseja realmente apagar esse departamento ? "
                         header="ATENÇÂO" severity="alert" widgetVar="confirmation" appendToBody="true" >

            <p:commandButton value="Sim" oncomplete="confirmation.hide()"  actionListener="#{departamentoBean.apagar()}"
                             update="mensagem" icon="ui-icon-check">
                <f:setPropertyActionListener value="#{item}" target="#{departamentoBean.departamento}"/>
            </p:commandButton>


            <p:commandButton immediate="true" value="Não" onclick="confirmation.hide()" type="button" icon="ui-icon-cancel"/>       
        </p:confirmDialog>

    </ui:define>
</ui:composition>

[b]BEAN

Apagar[/b]

public void apagar(){
EntityManager em = null;
EntityTransaction trans = null;

    try {
        em = JPAUtil.getEntityManager();
        trans = em.getTransaction();
        trans.begin();
        Departamento departamentoB = em.find(Departamento.class, departamento.getIdDepartamento());
        em.remove(departamentoB);
        trans.commit();
        listar();
        JSFUtil.addMsg("OK ! ", "Departamento apagado com sucesso ! ", FacesMessage.SEVERITY_INFO);
        limpar();
        
    } catch (Exception e) {
        
        JSFUtil.addMsg("Erro ! ", "Houve um erro ao apagar o Departamento ", FacesMessage.SEVERITY_ERROR);
        if (trans != null && trans.isActive()) {
            trans.rollback();
        }
    }
    
}

Esse seu bean contem a anotação @ManagedBean ?

se sim tente por no action="#{departamentoBean.apagar}"

E quando for por código a uma tag para facilitar a visualização “[code ][ /code]”, muitas pessoas nem dão atenção se o código não estiver dentro dessas TAGs.

//Seu código aqui!

Oi, sim meu Bean possui a anotação @ManagedBean

Eu agora estou com outro problema, eu li um artigo de uma pessoa falando sobre a anotação de request, ele falou para mudar no comandbutton para ajax-true, e agora quando eu clico no apagar ele não muda nada na tabela, mas quando eu renderizo a pagina o item é deletado.

isso ocorre eu acho, por causa da requisição que não está sendo finalizada quando clico no botão, ai quando eu clico em renderizar a pagina ele funciona.

Bom eu acho né.

e se você da um update no form.

Exp:

Srs, eu li essa explicação aqui em um artigo:
[color=blue][i]
"Qual é o escopo do seu “clienteService” ? Para funcionar não pode ser de Request.
Se for de request, quando vc esta clicando no primeiro botão da “datatable” ele esta enviando o registro para o clienteService e acabando a requisição, abre o dialog de confirmação. Depois quando vc clica em “sim” é uma nova requisição, com isso o seu objeto enviado foi perdido, que é o que esta acontecendo.

Outra coisa, sua requisição tem que ser ajax=true, se vc ficar ajax=false ele vai perder porque vai fazer uma requisição completa.
Se vc fizer o seguinte em qualquer escopo sem ser o de request vai funcionar: "[/i][/color]

Bom eu fiz o que ele falou, mas no escopo de sessão não teve nenhuma alteração, e no escopo de request quando eu mudo para ajax=true que por default já é true, aparentemente ele não apaga, mas seu eu dar um F5 na pagina, ele é deletado. E no meu bean no método de apagar, eu faço um listar depois do comit, então ele tinha que atualizar o datatable. Acredito que no meu bean o método apagar não esteja errado porque quando eu não uso o confirDialog, ele apaga normalmente.

Será que é por causa da requisição que não está sendo encerrada ?

MEU CONFIRMDIALOG

[color=darkblue]<p:confirmDialog id=“confirmDialog” message="Deseja realmente apagar esse departamento ? "
header=“ATENÇÂO” severity=“alert” widgetVar=“confirmation” appendToBody=“true” >

            <p:commandButton value="Sim" oncomplete="confirmation.hide()" process="@this" actionListener="#{departamentoBean.apagar()}"
                              update="mensagem" icon="ui-icon-check">
                <f:setPropertyActionListener value="#{item}" target="#{departamentoBean.departamento}"/>
            </p:commandButton>


            <p:commandButton immediate="true" value="Não" onclick="confirmation.hide()" type="button" icon="ui-icon-cancel"/>       
        </p:confirmDialog>[/color]

MEU BOTÃO EXCLUIR

<p:commandButton icon=“ui-icon-trash” process="@this" action="#{departamentoBean.apagar()}" ajax=“true"
onclick=“confirmation.show()”>
<f:setPropertyActionListener value=”#{item}" target="#{departamentoBean.departamento}"/>
</p:commandButton>

Se mas alguém puder me ajudar…

opa. Desculpe não ter respondido antes rafael.kbeca .

Eu tentei sim essa opção do update, mas nada, não deu certo

Consegui resolver o problema.
O erro esta sendo no update, o certo seria dar o update na tabela e não no form. ai deu certo.

<p:confirmDialog id=“confirmDialog” message="Deseja realmente apagar esse departamento ? "
header=“ATENÇÂO” severity=“alert” widgetVar=“confirmation” appendToBody=“true” >

                <p:commandButton value="Sim" oncomplete="confirmation.hide()" process="@this" actionListener="#{departamentoBean.apagar()}"
                                 [color=red]update="tab"[/color] icon="ui-icon-check">
                    <f:setPropertyActionListener value="#{item}" target="#{departamentoBean.departamento}"/>
                </p:commandButton>

                <p:commandButton immediate="true" value="Não" onclick="confirmation.hide()" type="button" icon="ui-icon-cancel"/>       
            </p:confirmDialog>

Obrigado e fica a Dica !!!