Problema confirmDialog Primefaces

7 respostas
E

E ai,
Pessoal estou com o seguinte problema, no me MB tenho um método para deletar um registro.
Se chamo ele direto com um p:commandButton ele funciona blz.
Mas se chamo um p:confirmDialog ele nem passa no método. Rodei com debug e pus um breakpoint no metódo e não chega lá.
O q pode ser?

Abaixo meus códigos.
O Delete da linha 42 chama o confirmDialog e neste o delete não executa
O delete da linha 43 chama o mb direto e ali deleta certinho.

XHTML

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">


    <ui:decorate template="/temas/padrao.xhtml">

        <ui:define name="centro">
            <p:growl id="growl" showDetail="true" life="5000"/>

            <h:form id="form1">
                <p:tabView id="tabview" >
                    <p:tab id="tab1" title="Clientes/Fornecedores">

                    </p:tab>
                    <p:tab id="tab2" title="Bancos">

                    </p:tab>
                    <p:tab id="tab3" title="Categorias">
                        <p:dataTable var="cat" value="#{categoriasBean.listaCategorias}" rowKey="#{cat.categoriasPK.idCategorias}" 
                                     selection="#{categoriasBean.categoria}" selectionMode="single"
                                     paginator="true" rows="10">
                            <p:column headerText="id">
                                <h:outputText value="#{cat.categoriasPK.idCategorias}"/> 

                            </p:column>
                            <p:column headerText="usuario">
                                <h:outputText value="#{cat.categoriasPK.idUsuario}"/> 

                            </p:column>
                            <p:column headerText="Descrição">
                                <h:outputText value="#{cat.descricao}"/> 

                            </p:column>
                            <f:facet name="footer">
                                <p:commandButton id="newCat" value="Novo" action="#{categoriasBean.novo}" update=":dialogNew" oncomplete="dialNew.show()"/>
                                <p:commandButton id="editCat" value="Editar" update=":dialogUpdate" oncomplete="dialUpdate.show()"/>
                                <p:commandButton id="deleteCat" value="Remover" onclick="confirmDelete.show()"/>
                                <p:commandButton id="deleteCat2" 
                                                 value="Remover Sem Conf" 
                                                 action="#{categoriasBean.remover}" 
                                                 onclick="return confirm('Tem certeza que deseja excluir?')" 
                                                 update=":form1,:growl"/>
                            </f:facet>
                        </p:dataTable>
                    </p:tab>

                </p:tabView>    


            </h:form>
            <p:confirmDialog id="confDelete" 
                             message="Excluir Registro?" 
                             header="Exclusão" 
                             severity="alert" 
                             widgetVar="confirmDelete"
                             closable="false"
                             appendToBody="true">
                <h:form>
                    <p:commandButton id="sim" 
                                     value="Sim" 
                                     update=":form1,:grow1" 
                                     oncomplete="confirmDelete.hide()" 
                                     action="#{categoriasBean.remover}"
                                     process="@all"
                                     ajax="false"
                                     type="button"/>
                    <p:commandButton id="nao" 
                                     value="Não" 
                                     onclick="confirmDelete.hide()" 
                                     type="button"/>
                </h:form>

            </p:confirmDialog>

        </ui:define>

    </ui:decorate>
    <p:dialog id="dialogNew" header="Categoria" widgetVar="dialNew" modal ="true">
        <h:form id="formNew">
            <p:panelGrid id="panel1" columns="2">

                <h:outputText value="Descrição:"/>
                <p:inputText value="#{categoriasBean.categoria.descricao}"/>
            </p:panelGrid>    
            <p:commandButton value="Salvar" action="#{categoriasBean.salvar}" update=":form1,:growl" onsuccess="dialNew.hide()"/>


        </h:form>

    </p:dialog>
    <p:dialog id="dialogUpdate" header="Categoria" widgetVar="dialUpdate" modal ="true">
        <h:form id="formUpd" >
            <p:panelGrid id="panel2" columns="2">
                <h:outputText value="id"/>
                <h:inputText value="#{categoriasBean.categoria.categoriasPK.idCategorias}" readonly="true"/>
                <h:outputText value="Descrição:"/>
                <p:inputText value="#{categoriasBean.categoria.descricao}"/>
            </p:panelGrid>    
            <p:commandButton value="Salvar" action="#{categoriasBean.update}" update=":form1,:growl" onsuccess="dialUpdate.hide()"/>


        </h:form>                
    </p:dialog>
    <h:form id="formDel">

    </h:form>
</html>


MB

@ManagedBean
@SessionScoped
public class CategoriasBean {

    @EJB
    CategoriasFacade facade = new CategoriasFacade();
    Categorias categoria;// = new Categorias();
    List<Categorias> listaCategorias;

    public List<Categorias> getListaCategorias() {
        //listaCategorias = facade.findAll();
        listaCategorias = facade.categoriasUsuarioLogado();
        return listaCategorias;
    }

    public void setListaCategorias(List<Categorias> listaCategorias) {
        this.listaCategorias = listaCategorias;
    }

    public Categorias getCategoria() {
        if (categoria == null) {
            categoria = new Categorias();

            categoria.setCategoriasPK(new CategoriasPK());

            HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
            categoria.getCategoriasPK().setIdUsuario((Integer) session.getAttribute("idUsuario"));

        }

        return categoria;
    }

    public void setCategoria(Categorias categoria) {
        this.categoria = categoria;
    }

    /**
     * Creates a new instance of CategoriasBean
     */
    public CategoriasBean() {
    }

    public String novo() {
        categoria = new Categorias();

        categoria.setCategoriasPK(new CategoriasPK());

        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        categoria.getCategoriasPK().setIdUsuario((Integer) session.getAttribute("idUsuario"));
        categoria.getCategoriasPK().setIdCategorias(facade.getMaxCodCategoria().intValue() + 1);

        return null;
    }

    public String salvar() {
        try {

            facade.create(categoria);

            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Salvo com sucesso", "");
            FacesContext.getCurrentInstance().addMessage(null, message);
        } catch (Exception e) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Salvar ", e.toString());
            FacesContext.getCurrentInstance().addMessage(null, message);
        }

        return null;
    }

    public String update() {
        try {
            if (categoria == null) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Nenhum Registro Selecionado", "");
                FacesContext.getCurrentInstance().addMessage(null, message);
            } else {
                facade.edit(categoria);

                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Salvo com sucesso", "");
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
        } catch (Exception e) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Salvar ", e.toString());
            FacesContext.getCurrentInstance().addMessage(null, message);
        }

        return null;
    }

    public String remover() {
        try {
            if (categoria == null) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Nenhum Registro Selecionado", "");
                FacesContext.getCurrentInstance().addMessage(null, message);
            } else {
                facade.remove(categoria);

                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Removido com sucesso", "");
                FacesContext.getCurrentInstance().addMessage(null, message);
            }
        } catch (Exception e) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Remover registro ", e.toString());
            FacesContext.getCurrentInstance().addMessage(null, message);
        }
        return null;

    }
}

Abraço

7 Respostas

F

Boa Tarde, aparece alguma coisa no LOG do Servidor (Glassfish, tomacat…)??

E

Não aparece nada…

Ele nem entra no método remover pelos meus testes no depurar

B

tente por o p:dialog id fora do form princinpal , nao to como meu projeto aki e nao lembro d cabeça, mais como vc disse q nao ta entrando e problema com o form, e lembro q ele tinha uma frescura e nao ia tbm, eu acho q eu tirei do form principal coloquei dentro d outro form fora do da pagina.

E

Não é p:dialog é p:confirmDialog.
E ele está fora do form, da uma olhada no código acima.

B

eles esta fora msm mais nao esta dentro de um

</h:form>
<----- poem um aki <h:form>
<p:confirmDialog id=“confDelete”
message=“Excluir Registro?”
header=“Exclusão”
severity=“alert”
widgetVar=“confirmDelete”
closable=“false”
appendToBody=“true”>
<h:form>

L

seu botão

<p:commandButton id="selectButton" update=":form:meuGridExcluir" oncomplete="exclusao.show()" value="Remover" title="View">

não faço com confirm dialog, eu acho interessante o usuário ver se os dados tao corretos para exclusão denovo :D
mas o fundamento é o mesmo. você ta usando 2 forms não precisa não, pode por o seu confirmdialog no mesmo form do botão .

<p:dialog header="Confirmar Exclusão" widgetVar="exclusao" resizable="false" id="extDlg"  
                      showEffect="fade" hideEffect="explode" modal="true">  

                <h:panelGrid id="meuGridExcluir" columns="2" cellpadding="4" style="margin:0 auto;">  

                    <h:outputText value="Nome:" />  
                    <h:outputText value="#{BeanUsuario.user.nome}" style="font-weight:bold"/>  

                    <h:outputText value="Email:" />  
                    <h:outputText value="#{BeanUsuario.user.email}" style="font-weight:bold"/>  

                    <p:commandButton id="delete" value="Remover" actionListener="#{BeanUsuario.delete}" oncomplete="exclusao.hide()" update="form"/>
                    <p:commandButton id="decline" value="Cancelar" onclick="exclusao.hide()" type="button" />
                </h:panelGrid>  
         </p:dialog>

isso é feito dentro do form, faltou um update no teu botão. precisar dar um update pra poder ele mostrar o dialog. ainda mais que está em outro form (poe tudo no mesmo form, não precisa deste outro form não :D)

L

Cara da uma olhada no link…

http://www.guj.com.br/java/275177-resolvido-facesmessage–confirmdialog

Criado 14 de agosto de 2012
Ultima resposta 15 de ago. de 2012
Respostas 7
Participantes 5