confirmDialog não funciona no primefaces [RESOLVIDO]

14 respostas
warquia

Bom dia amigos, estou com um problema em um componente primefaces, o confirmDialog não dispara o form, ou seja ele não executa nenhuma ação no sistema.
Quando clico em “Sim, desejo” não acontece nada. um detalhe importante usando “<:h” da certo.

Obs: já coloquei ajax = false, immediate= true

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
    </h:head>


    <h:body>
        <h:form id="formCadastroPessoas">
            <p:commandButton id="excluirButton" title="Excluir Registro"
                             oncomplete="confirmationDialog.show()"
                             icon="ui-icon-closethick"/>

            <p:confirmDialog widgetVar="confirmationDialog"
                             message="Deseja realmente excluir o registro?" severity="alert"
                             header="Excluir cadastro" appendToBody="true">

                <p:commandButton value="Sim, desejo" id="btnSim" type="button" update="formCadastroPessoas" 
                                 ajax="false" actionListener="#{paginaBean.abrepagina('homepage.jsf')}"
                                 widgetVar="confirmationDialog"
                                 oncomplete="confirmationDialog.hide()" />                

                <p:commandButton value="Não" onclick="confirmationDialog.hide()" type="button"/>  

            </p:confirmDialog>
        </h:form>
    </h:body>
</html>

Obrigado,
Warquia P.

14 Respostas

lele_vader

Mostra o método abre página.
Acho que actionListener pode-se passar parâmetros não.
teria que ser action.

lele_vader

Além do update só funcionar para requisições ajax eu acho.

CristianPalmaSola10

Concordo com o lele_vader naum conheco forma nenhum de se passar parametros a não ser na url, faz um teste tira o parametro do metodo e faz a chamada novamente…
Eu ja tentei passar parametros para metodos em algumas ocassioes mas nao rolou…

warquia

Obs: Nem chega a dispará o método

public void abrepagina(String NomePagina) throws IOException {
        //Redireciona para uma pagina
        FacesContext faces = FacesContext.getCurrentInstance();
        ExternalContext context = faces.getExternalContext();
        context.redirect(NomePagina);
    }
Outra coisa já tentei com AJAX também, observe:
<p:confirmDialog widgetVar="confirmationDialog"
                                     message="Deseja realmente excluir o registro?" severity="alert"
                                     header="Excluir cadastro" appendToBody="true">

                        <h:commandButton value="Sim, desejo" id="btnSim" type="button" update="formCadastroPessoas" ajax="false">
                            <p:ajax event="click" listener="#{pessoaBean.excluir()}"  oncomplete="confirmationDialog.hide()"/>
                        </h:commandButton> 

                        <h:commandButton value="Não" onclick="confirmationDialog.hide()" type="button"/>  
                    </p:confirmDialog>
CristianPalmaSola10

Se voce fazer assim

public void abrepagina() throws IOException {  
    //Redireciona para uma pagina  
    FacesContext faces = FacesContext.getCurrentInstance();  
    ExternalContext context = faces.getExternalContext();  
    context.redirect("homrpage.jsf");  
}

e tenta usar seu botao assim

&lt;p:commandButton value="Sim, desejo" id="btnSim" update="formCadastroPessoas"   
                                 actionListener="#{paginaBean.abrepagina()}"  
                                 widgetVar="confirmationDialog"  
                                 oncomplete="confirmationDialog.hide()" /&gt;

dai funcionou ?

lele_vader

Um action listener tem que ter um parâmetro ActionEvent não ?

public void evento(ActionEvent event){

}

agora se passar action você pode passar assim

public String evento(String string){

return string;

}
A

Esse type=“button” não faz requisição, remova isso.

pedruhenrik

não sei bem se é o q vc precisa.
MAS eu uso algo "parecido" da seguinte forma:

&lt;p:dialog id="usuario" header="Encaminhar para Usuário"
			widgetVar="usuario" modal="true" height="210" width="970"
			draggable="true" resizable="false" closable="true"&gt;
			&lt;h:form&gt;
				&lt;p:panel id="panelDialogUsuario"&gt;
					<br />
					&lt;table&gt;
						&lt;tr&gt;
							&lt;td&gt;&lt;h:outputLabel value="Unidade" /&gt;
							&lt;/td&gt;
							&lt;td&gt;&lt;p:outputPanel id="first" rendered="true"&gt;
									&lt;h:selectOneMenu value="#{unidadeController.unidade.cnpj}"
										valueChangeListener="#{unidadeController.filtrarSetorsPorunidade}"
										label="unidade Destinatario"&gt;
										&lt;f:selectItem itemLabel="Selecione a unidade"&gt;&lt;/f:selectItem&gt;
										&lt;f:selectItems value="#{unidadeController.unidadesList}" var="unidade"
											itemLabel="#{unidade.razaoSocial}" itemValue="#{unidade.cnpj}"&gt;&lt;/f:selectItems&gt;
										&lt;p:ajax event="valueChange"
											update="second third fourth fifth sixth" /&gt;
									&lt;/h:selectOneMenu&gt;
								&lt;/p:outputPanel&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
						&lt;tr&gt;
							&lt;td&gt;&lt;h:outputLabel value="Setor"&gt;&lt;/h:outputLabel&gt;
							&lt;/td&gt;
							&lt;td colspan="2"&gt;&lt;p:outputPanel id="second" rendered="true"&gt;
									&lt;h:selectOneMenu value="#{unidadeController.nome1}"
										valueChangeListener="#{unidadeController.filtrarSetors1}"
										label="Setor Destinatario"&gt;
										&lt;f:selectItem itemLabel="Selecione o Setor"
											noSelectionOption="true"&gt;&lt;/f:selectItem&gt;
										&lt;f:selectItems value="#{unidadeController.dps1}" var="dp"
											itemLabel="#{dp.nome}" itemValue="#{dp.nome}"&gt;
										&lt;/f:selectItems&gt;
										&lt;p:ajax event="valueChange" update="third fourth fifth sixth"&gt;&lt;/p:ajax&gt;
									&lt;/h:selectOneMenu&gt;
								&lt;/p:outputPanel&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
						&lt;tr&gt;
							&lt;td&gt;&lt;/td&gt;
							&lt;td colspan="2"&gt;&lt;p:outputPanel id="third" rendered="true"&gt;
									&lt;h:selectOneMenu value="#{unidadeController.nome2}"
										valueChangeListener="#{unidadeController.filtrarSetors2}"
										label="Setor Destinatario"
										rendered="#{not empty unidadeController.dps2}"&gt;
										&lt;f:selectItem itemLabel="Selecione o Setor"&gt;&lt;/f:selectItem&gt;
										&lt;f:selectItems value="#{unidadeController.dps2}" var="dp"
											itemLabel="#{dp.nome}" itemValue="#{dp.nome}"&gt;&lt;/f:selectItems&gt;
										&lt;p:ajax event="valueChange"
											update="second third fourth fifth sixth" /&gt;
									&lt;/h:selectOneMenu&gt;
								&lt;/p:outputPanel&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
						&lt;tr&gt;
							&lt;td&gt;&lt;/td&gt;
							&lt;td&gt;&lt;p:outputPanel id="fourth" rendered="true"&gt;
									&lt;h:selectOneMenu value="#{unidadeController.nome3}"
										valueChangeListener="#{unidadeController.filtrarSetors3}"
										label="Setor Destinatario"
										rendered="#{not empty unidadeController.dps3}"&gt;
										&lt;f:selectItem itemLabel="Selecione o Setor"&gt;&lt;/f:selectItem&gt;
										&lt;f:selectItems value="#{unidadeController.dps3}" var="dp"
											itemLabel="#{dp.nome}" itemValue="#{dp.nome}"&gt;&lt;/f:selectItems&gt;
										&lt;p:ajax event="valueChange"
											update="second third fourth fifth sixth" /&gt;
									&lt;/h:selectOneMenu&gt;
								&lt;/p:outputPanel&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
						&lt;tr&gt;
							&lt;td&gt;&lt;/td&gt;
							&lt;td&gt;&lt;p:outputPanel id="fifth" rendered="true"&gt;
									&lt;h:selectOneMenu value="#{unidadeController.nome4}"
										valueChangeListener="#{unidadeController.filtrarSetors4}"
										label="Setor Destinatario"
										rendered="#{not empty unidadeController.dps4}"&gt;
										&lt;f:selectItem itemLabel="Selecione o Setor"&gt;&lt;/f:selectItem&gt;
										&lt;f:selectItems value="#{unidadeController.dps4}" var="dp"
											itemLabel="#{dp.nome}" itemValue="#{dp.nome}"&gt;&lt;/f:selectItems&gt;
										&lt;p:ajax event="valueChange" update="sixth" /&gt;
									&lt;/h:selectOneMenu&gt;
								&lt;/p:outputPanel&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
						&lt;tr&gt;
							&lt;td&gt;&lt;h:outputLabel value="Usuário"&gt;&lt;/h:outputLabel&gt;
							&lt;/td&gt;
							&lt;td&gt;&lt;p:outputPanel id="sixth" rendered="true"&gt;
									&lt;c:if test="#{empty unidadeController.usuarios ? false : true}"&gt;
										&lt;h:selectOneMenu value="#{envelopeController.usuario}"
											label="Usuário Destinatario"&gt;
											&lt;f:selectItem itemLabel="Selecione o Usuário"&gt;&lt;/f:selectItem&gt;
											&lt;f:selectItems value="#{unidadeController.usuarios}"
												var="usuario" itemLabel="#{usuario.nome}"
												itemValue="#{usuario.cpf}"&gt;&lt;/f:selectItems&gt;
										&lt;/h:selectOneMenu&gt;
									&lt;/c:if&gt;

								&lt;/p:outputPanel&gt;
							&lt;/td&gt;
						&lt;/tr&gt;

						&lt;tr&gt;
							&lt;td&gt;&lt;p:commandButton value="OK"
									action="#{envelopeController.setaUsuario}" ajax="false" /&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/table&gt;
				&lt;/p:panel&gt;
			&lt;/h:form&gt;
		&lt;/p:dialog&gt;

att,

warquia

Amigos fiz o que vocês me pediram e não deu certo: Não passei por Como parâmetro, tirei o type=“Button” e nada.
Se não for pedir muito teria como vcs testarem na sua maquina para ver o que acontece?

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
    </h:head>


    <h:body>
        <h:form id="formCadastroPessoas">
            <p:commandButton id="excluirButton" title="Excluir Registro"
                             oncomplete="confirmationDialog.show()"
                             icon="ui-icon-closethick"/>

            <p:confirmDialog widgetVar="confirmationDialog"
                             message="Deseja realmente excluir o registro?" severity="alert"
                             header="Excluir cadastro" appendToBody="true">

                <p:commandButton value="Sim, desejo" id="btnSim" update="formCadastroPessoas" 
                                 ajax="false" actionListener="#{paginaBean.homePage()}"
                                 oncomplete="confirmationDialog.hide()" />                

                <p:commandButton value="Não" onclick="confirmationDialog.hide()" type="button"/>  

            </p:confirmDialog>
        </h:form>
    </h:body>
</html>

Bean

package br.com.canion.mascate.bean;

import java.io.IOException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

@ManagedBean
@RequestScoped
public class PaginaBean {

    private String pathPagina;

    public PaginaBean() {
        pathPagina = "/homePage.xhtml";
    }

    public String getPathPagina() {
        return pathPagina;
    }

    public void setPathPagina(String pathPagina) {
        this.pathPagina = pathPagina;
    }

    public void homePage() {
        setPathPagina("/homePage.xhtml");
    }
    public void abrepagina(String NomePagina) throws IOException {
        //Redireciona para uma pagina
        FacesContext faces = FacesContext.getCurrentInstance();
        ExternalContext context = faces.getExternalContext();
        context.redirect(NomePagina);
    }

}
lele_vader

Troca o actionListener por action no parametro do
E tira o update.

<p:confirmDialog widgetVar="confirmationDialog"  
                             message="Deseja realmente excluir o registro?" severity="alert"  
                             header="Excluir cadastro" appendToBody="true">  
  
                <p:commandButton value="Sim, desejo" id="btnSim"   
                                 ajax="false" action="#{paginaBean.abrepagina('homepage.jsf')}"  
                                 widgetVar="confirmationDialog"  
                                 oncomplete="confirmationDialog.hide()" />                  
  
                <p:commandButton value="Não" onclick="confirmationDialog.hide()"/>    
  
            </p:confirmDialog>

No bean coloca assim, pois não tenho certeza se actions podem ser void

Por sinal seu método não está no padrão camel case, pode ser por isso também que não entra.

public String abrePagina(String NomePagina) throws IOException {  
        //Redireciona para uma pagina  
        FacesContext faces = FacesContext.getCurrentInstance();  
        ExternalContext context = faces.getExternalContext();  
        context.redirect(NomePagina);  
        return null;
    }

Debuga e ve se entra no abrePagina

warquia

Também não deu certo. mas descobrir uma coisa se eu não usar o parâmetro appendToBody=“true” o confirmDialog Funcionar 100% mas tem um probleminha ele fica por atrás da tela(atrás do div de modal).

lele_vader

Caramba.
Pensei que não tivesse funcionado nunca.

warquia

Só que agora ficou com a mensagem por traz do Modal. Tem ideia de como resolver isso?

warquia

Amigos conseguir resolver de acordo com esse post:

http://www.guj.com.br/java/284180-problema-com-template-jsf-2-e-confirmdialog-do-primefaces

Para resolver foi preciso jogar <h:form> dentro do confirmDialog

<p:confirmDialog widgetVar="confirmationDialogExcluir" severity="alert" 
                                 message="Deseja realmente excluir o registro #{pessoaBean.pessoa.cdstrNome}? " 
                                 header="Excluir cadastro" appendToBody="true">
                    <h:form id="formConfirmDialogExcluir">                    
                        <p:commandButton value="Sim, desejo" id="btnSim" ajax="false" action="#{pessoaBean.excluir()}" oncomplete="confirmationDialogExcluir.hide()" />
                        <p:commandButton value="Não" onclick="confirmationDialogExcluir.hide()" type="button"/>  
                    </h:form>                                               
                </p:confirmDialog>

Obrigado a todos pela ajuda.

Criado 6 de dezembro de 2012
Ultima resposta 6 de dez. de 2012
Respostas 14
Participantes 5