Problema confirmDialog Primefaces

7 respostas
elwerle

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

felipehts

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

elwerle

Não aparece nada…

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

b10machado

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.

elwerle

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

b10machado

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