Dialog PrimeFaces nao executa button

Bom dia pessoal.

Gostaria de saber se alguem já passou por isso, eu já tentei procurar aqui pelo forum mas nao consegui nada que resolvesse o meu problema.

Tenho um xhtml (usando JSF 2.0), onde tenho uma tela que vai ser para passar os parametros para uma chamada de relatorio.
E tenho um xhtml padrao para chamar todos os relatorio, sendo assim gostaria de chamar atravez de um dialog, entao chamo atravez de um include o xhtml.

O grande problema está na hora de clicar no botao para chamar o meu bean, sendo que nao executa o action dele.

meu xhtml que tem a tela para filtro do relatorio:

<h:body>
        <div id="tela" align="center">
            <h:form id="form_rel">
                <h:panelGrid columns="2">
                    <h:outputText value="Data/Hora: " />  
                    <p:calendar locale="pt" value="#{telaAvaliacaoColaborador.data_filtro}" pattern="dd/MM/yyyy" />


                    <h:outputLabel id="latender" value="Usuário:"/>
                    <p:selectOneMenu id="sOMatender" value="#{telaAvaliacaoColaborador.cod_usuario}" height="100" required="true" >
                        <f:selectItem itemLabel="Todos Grupo(s)" itemValue="0" />
                        <f:selectItems id="fsAtender" value="#{telaAvaliacaoColaborador.listaUsuarios()}"
                                       var="item" itemLabel="#{item.descricao}"
                                       itemValue="#{item.id}" />
                    </p:selectOneMenu>

                    <p:commandButton value="Visualizar"
                                     action="#{telaAvaliacaoColaborador.geraRelatorio()}"
                                     icon="ui-icon-print"/>

                </h:panelGrid>
            </h:form>
        </div>
    </h:body>

Aqui tem o meu xhtml que chama por include

<div id="tela_ghu" align="center">
            <p:layout id="ll_guposp" style="height: 500px; width: 770px">
                <p:layoutUnit position="center" size="100" resizable="true" closable="true" collapsible="true" style="text-align: center">
                    <div id="formulario" align="left">
                        <h:form id="bcancelar">
                            <h:panelGrid columns="2">
                                <p:commandButton value=""
                                                 icon="ui-icon-document-b"
                                                 type="button"
                                                 title="Visualizar Relatório"
                                                 onclick="dlgAvaliacaoColb.show();"
                                                 update="dlgAvaliacao"/>
                                <h:outputText value="Relatório Avaliação Colaborador " />
                            </h:panelGrid>
                        </h:form>


                        <h:form id="fdil">
                            <p:dialog id="dlgAvaliacao" header="Relatório Avaliação Colaborador" modal="true" widgetVar="dlgAvaliacaoColb" dynamic="true" appendToBody="true" resizable="false">  
                                <div id="tela_todos" align="left">
                                    <form id="fm_parada">
                                        <ui:include src="relTelaAvaliacaoColaborador.xhtml"/>
                                    </form>
                                </div>
                            </p:dialog> 
                        </h:form>
                    </div>
                </p:layoutUnit>
            </p:layout>
        </div>

e aqui o meu bean que deveria ser executando quando clicado no botao para visualizar: telaAvaliacaoColaborador.geraRelatorio()

@ManagedBean
@SessionScoped
@ViewScoped
public class TelaAvaliacaoColaborador implements Serializable{

    private ResultSet rs;
    private Date data_filtro;
    private Integer cod_usuario;

    public Integer getCod_usuario() {
        return cod_usuario;
    }

    public void setCod_usuario(Integer cod_usuario) {
        this.cod_usuario = cod_usuario;
    }

    public Date getData_filtro() {
        return data_filtro;
    }

    public void setData_filtro(Date data_filtro) {
        this.data_filtro = data_filtro;
    }

    public ArrayList<listaCamposCombo> listaUsuarios() {

        ArrayList<listaCamposCombo> listaItens = new ArrayList<listaCamposCombo>();
        try {
            rs = Conexao.Consulta("select gu.cod_usuario, gu.nome "
                    + "from geral_usuarios gu "
                    + "where gu.status = 1 "
                    + "and gu.tipo_usuario_hd = 1 "
                    + "order by gu.nome");
        } catch (SQLException ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao Carregar Usuários", ex.getMessage()));
        }
        try {
            while (rs.next()) {
                int id = rs.getInt("cod_usuario");
                String nome = rs.getString("nome");
                listaCamposCombo list = new listaCamposCombo(id, nome);
                listaItens.add(list);
            }
        } catch (SQLException ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao Carregar Usuários - Next", ex.getMessage()));
        }

        return listaItens;
    }

    public void geraRelatorio() throws JRException {    
        Map<String, Object> parametros = new HashMap<String, Object>();
        URL reportURL = TelaAvaliacaoColaborador.class.getResource("/RelAvaliacaoColaborador.jasper");
    }

Tente colocar no seu botão Visualizar:

process="form_rel"

edudebom, nao funcionou com essa opçao

simplesmente nao acontece nada, se eu ao invez de usar <p:commandbutton usar <h:commandbutton, ele fecha o dialog e nao executa nada tbm.

Obrigado

Você tem @SessionScoped e @ViewScoped no seu MB ao mesmo tempo ?

Nao, eu tinha para teste e acabei colando junto no exemplo, mas so deixei o @SessionScoped.

Certo. Chegou a ver se retorna erro antes de enviar o formulário do dialog ? Por exemplo capturar com o growl.

[quote=edudebom]Certo. Chegou a ver se retorna erro antes de enviar o formulário do dialog ? Por exemplo capturar com o growl.

[/quote]

Não, nunca usei o growl para caputrar erros, tens algum exemplo?

Obrigado

http://www.primefaces.org/showcase-labs/ui/growl.jsf

Lembre de dar um update no commandButton.

Fiz exatamente o exemplo do primefaces e nao executou nada


<h:form>  
            <p:growl id="growl" showDetail="true" sticky="true" />  

            <p:panel header="Growl">  
                <h:panelGrid columns="2">  
                    <h:outputText value="Your Name: *" />   
                    <p:inputText value="#{telaAvaliacaoColaborador.cod_usuario}" required="true" label="Name"/>  
                </h:panelGrid>  

                <p:commandButton value="Save" actionListener="#{telaAvaliacaoColaborador.geraRelatorio}" update="growl"/>  
            </p:panel>  

        </h:form>  

ok. Coloque um requiredMessage no teu input e envie o form com ele em branco somente para testar.

Ok, agora funcionou pefeitamente, executando a mensagem e tbm minha classe, mas tudo isso sem um dialog, se eu colocar um dialog, nao funciona, nao executa o botao

Veja se esse exemplo de Dialog te ajuda…

http://www.primefaces.org/showcase-labs/ui/datatableRowSelectionSingle.jsf

Veja tambem sobre o jeito que voce fez seu dialog… voce fez em outro form porque?

Abraços

Gleidson Henrique,

Esse exemplo mostra os campos dentro do dialog, isso já está fazendo, mostrando legal, mesmo usando o ui:include

O meu problema está na hora da execução do botao, já coloquei o botao dentro do form que eu chamo pelo INCLUDE e fora tbm, ou seja, no dialog e mesmo assim nao executa o meu action ou actionlistener

Tenho form no meu dialog e na minha tela com os campos, também testei somente com o form na tela dos campos, mas infelizmente nao tive sucesso.
O que eu to querendo fazer, seria a mesma coisa de usar um dialog para trazer campos, e gravar, usando INCLUDE para nao “encher” de telas um unico xhtml, ate ficando mais facil para manutençao.

Se tiveres algum exemplo com o include e o dialog executando um action/actionlistener

Obrigado!!

Alguém tem alguma sugestão??

Obrigado!

Pessoal, estou com o mesmo problema, alguém já passou por isso?

Att.

Joao.Gabriel, eu consegui fazer com que fosse executado o action/actionListener do botao, porém parcialmente resolveu meu problema

escrevia assim o dialog

<p:dialog id="dlgAvaliacao" header="Relatório Avaliação Colaborador" modal="true" widgetVar="dlgAvaliacaoColb" dynamic="true" appendToBody="true" resizable="false">    
                                <div id="tela_todos" align="left">  
                                    <form id="fm_parada">  
                                        <ui:include src="relTelaAvaliacaoColaborador.xhtml"/>  
                                    </form>  
                                </div>  
                            </p:dialog>   

e tiver que tirar a parte do modal e do appendToBody, pois como uso <p:layout simplesmente nao executa metodos, assim acabei deixando como modal=false e sem o appendToBody, executou legal

o meu outro problema está em ter “N” dialogs no mesmo xhtml, tudo que coloco no primeiro dialog funciona, nos restantes, acontece o mesmo problema, nao executa o actions/actionlisteners

sendo assim acabei tirando em dialogs e criando forms normamente.
nao sei se isso é um problema do <p:layout ou o que, estou usando a versao do Primefaces 3.3.

Abraços

Olá josivanl,

Desculpe pela demora da resposta.

Primeiro, obrigado pela ajuda, acabei no fim adotando a mesma solução que você, ou seja, passei a trabalhar com apenas um dialog para evitar o problema que estávamos tendo.

Att.

Pessoal, a propósito, esse tópico tem a ver com quem está utilizando essas mesmas tecnologias.

Link: http://www.guj.com.br/java/284157-jsf-2-com-include-dinamico-de-pagina-dentro-de-jars

Att.

Josivanl, estou com o mesmo problema, porém testei sem o <p:layout/> e o <p:layoutUnit/> e funcionou o action do botão. Faz um teste aí!!!

Eu tb estou com o mesmo problema. Quando retiro o appendToBody e coloco modal=“false” funciona, mas não fica legal pq perde o foco do dialog aberto.
Tentei colocar também no javascript depois de dar um hidden no dialog dar um submit forçando, mas também não dá o submit.
Tentei trocar o p:commandButton pelo h:commandButton e também não.

Alguém aí tem alguma idéia?