[RESOLVIDO]Atualizar Jsf para exibir mensagem no xhtml

34 respostas
R

Olá galera, tudo certo ? Bem, na minha aplicação estou tentando atualizar uma mensagem em que quando o usuário digita o código de algo que não existe, exibiria uma mensagem na tela : código inválido…
Porém, na página xhtml não exibe, mas se eu der um System.out… está aparecendo no console…
Abaixo o código xhtml:

<td align="right">Editora:</td>  
                                            <h:panelGrid id="pnl_editora" columns="3">  
                                                <p:inputMask id="codigo_editora" size="6"   mask="9?9999" required="false" requiredMessage="O campo editora deve ser informado." placeHolder="" value="#{acervoJsfBean.codigoEditoraParaRegistro}" >  
                                                    <f:ajax render="codigo_editoraMostra"  event="change" listener="#{acervoJsfBean.atualizarEditoraPorCodigo(event)}"/>  
                                                </p:inputMask>  
                                                <p:inputText id="codigo_editoraMostra" disabled="true" required="false" requiredMessage="O campo editora deve ser informado." value="#{acervoJsfBean.crudObj.aceeditora.ediDescricao}" style="width: 230px"/>  
                                                <p:commandButton icon="ui-icon-search" onclick="EditoraDlg.show()"/>  
                                            </h:panelGrid>

No bean:

public void atualizarEditoraPorCodigo(AjaxBehaviorEvent event) {  
       fillEditoraPorCodigo(this.codigoEditoraParaRegistro);  
   }  
  
   private void fillEditoraPorCodigo(String codigo) {  
       if (codigo != null && !codigo.trim().equals("")) {  
           Editoras editora = e.findEditoraByCodigo(codigo);  
           if (editora != null) {  
               aceeditora = editora.getEdiDescricao();  
               crudObj.setAceeditora(editora);  
           } else {  
               nomeEditoraParaRegistro = null;  
               codigoEditoraParaRegistro = null;  
               warn("Código Inválido"); ----> essa mensagem que estou TENTANDO COLOCAR NA TELA....  
               System.err.println("A editora com o código " + codigo + " não existe."); ---> essa esta sendo exibida quando nao é encontrado o codigo digitado  
           }  
       } else {  
           crudObj.setAceeditora(null);  
       }  
   }

Estou tentando a um bom tempo atualizar isso aki, mas não estou conseguindo…Se alguém puder ajudar, agradeço muito.

34 Respostas

D

coloca a tag

<h:messages />

no seu xhtml

vê se funciona

mas de qualquer forma vc precisa postar o código desse método warn()

pra saber se esta fazendo tudo certo

R

E como vc está printando esta mensagem?

Tipo… vc precisa especificar um lugar para printar ela… como um message ou até mesmo um growl (já que vc está utilizando primefaces)

R

Bom dia.
Bem, esse warn é o mesmo exemplo do PrimeFaces. Eu tenho na minha aplicação outros warn’s, info’s e estão funcionando normal, mas com esse tipo, em que o usuário digita no campo e dá um Tab para ver se EXISTE OU NAO o código nao to conseguindo de jeito nenhum. Não sei oke estou fazendo de errado.
Abaixo, um que está funcionando.

public void excluirPagamentoMultas() throws Exception {  
     try {  
         if (empxex.getEmxexMultapaga().equals("S") && empxex.getEmxexDtpagaMulta() != null) {  
             empxex.setEmxexMultapaga("N");  
             empxex.setEmxexDtpagaMulta(null);  
             salvaObjeto(empxex);  
             info("Pagamento excluído com sucesso.");  
         } else {  
             warn("A multa não foi paga.");  
         }  
     } catch (Exception exception) {  
         fatal("Erro grave: " + exception.getMessage());  
     }  
}

Não sei se é porque nos outros eu clico em algum botão para exibir a mensagem ou algo similar e nesse SOMENTE dou um TAB. Se puder ajudar, agradeço mto, mto mesmo. Vlw

C

Para te dar uma resposta mais concreta é preciso ver o que você faz no teu método warn()

Mas parece estar faltando algo no teu xhtml. Por exemplo, não tem um p:message ou um p:growl

Como você está fazendo uma chamada ajax, talvez você precise usar o update na tag p:ajax (para atualizar uma p:message ou p:growl)

Espero ter ajudado

sds

R

cgraf:
Para te dar uma resposta mais concreta é preciso ver o que você faz no teu método warn()

Mas parece estar faltando algo no teu xhtml. Por exemplo, não tem um p:message ou um p:growl

Como você está fazendo uma chamada ajax, talvez você precise usar o update na tag p:ajax (para atualizar uma p:message ou p:growl)

Espero ter ajudado

sds

Se ele utilizar o Faces Message não precisa dar update na tag messages … se utilizar growl vai precisar…

R

Estou utilizando o vários Grows no meu xhtml… Ele é meio extenso… Total da tela dá umas 700 e pocas linhas… Poderia postar ela ou uma aprte para analizarem se preciso dar ou tirar algum update ??? Vlw

D

como vc esta usando ajax vc tem que da um update no lugar onde esta contido a tag grows ou messages

R

Neste método warn seu vc precisa setar a mensagem assim (Exemplo):

FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Successful", "Remove successfully"));

e colocar o id do growl no update do botão

R

Amigos, se alguém ainda puder ajudar, abaixo está o código xhtml:
Sendo que, a parte que eu postei está da linha 294 a 303 e tenho na linha 41 isso : <p:growl id=“grow2” life=“4000”/>

R

Então…

No commandButton que é clicado… adiciona o atributo update=“grow2” … ve se funciona…

E o método warn que vc criou no seu ben precisa adicionar a mensagem no faces message

R

ralphsilver:
Então…

No commandButton que é clicado… adiciona o atributo update=“grow2” … ve se funciona…

E o método warn que vc criou no seu ben precisa adicionar a mensagem no faces message

Bem, vou tentar fazer isso, mas se ele clicar no botão vai ABRIR o dialog… E eu queria que a mensagem aparecesse depois que o cara dá um TAB… Conseguiu entender ?
Vlw e obrigado pela ajuda.

D
<f:ajax render="codigo_editoraMostra, grow2" event="change" listener="#{acervoJsfBean.atualizarEditoraPorCodigo(event)}"/>

so colocar o id do growl no render do f:ajax

uma dica, vc pode colocar apenas um growl no seu tamplete e todas as telas usar esse mesmo growl pra exibir a mensagem

R

ralphsilver:
Então…

No commandButton que é clicado… adiciona o atributo update=“grow2” … ve se funciona…

E o método warn que vc criou no seu ben precisa adicionar a mensagem no faces message

Bem, vou tentar fazer isso, mas se ele clicar no botão vai ABRIR o dialog… E eu queria que a mensagem aparecesse depois que o cara dá um TAB… Conseguiu entender oque estou tentando dizer e também o código da página ?
Vlw e obrigado pela ajuda.

D

coloca a parte do xhtml do dialog que esta executando o metodo que vai lançar a mensagem

ta f%$# ver nesse seu xhtml

R

DaniloAndrade:
<f:ajax render="codigo_editoraMostra, grow2" event="change" listener="#{acervoJsfBean.atualizarEditoraPorCodigo(event)}"/>

so colocar o id do growl no render do f:ajax

uma dica, vc pode colocar apenas um growl no seu tamplete e todas as telas usar esse mesmo growl pra exibir a mensagem

Bhá cara, testei aqui e deu um pau feio na tela…Não funcionou… Alguma outra dica?? Obrigado pela ajuda…

R

DaniloAndrade:
coloca a parte do xhtml do dialog que esta executando o metodo que vai lançar a mensagem

ta f%$# ver nesse seu xhtml

Blz, entendo qeu o negócio tá tenso… Só um minuto e já posto cara… Vlw pela ajuda que vc e os outros estão dando ae :slight_smile:

D

Ricardo Fávero Júnior:
ralphsilver:
Então…

No commandButton que é clicado… adiciona o atributo update=“grow2” … ve se funciona…

E o método warn que vc criou no seu ben precisa adicionar a mensagem no faces message

Bem, vou tentar fazer isso, mas se ele clicar no botão vai ABRIR o dialog… E eu queria que a mensagem aparecesse depois que o cara dá um TAB… Conseguiu entender oque estou tentando dizer e também o código da página ?
Vlw e obrigado pela ajuda.

vc fez isso

<f:ajax render="codigo_editoraMostra, grow2" event="change" listener="#{acervoJsfBean.atualizarEditoraPorCodigo(event)}"/> //colocou o id do growl no render do f:ajax

troca o event para blur

R

DaniloAndrade:
Ricardo Fávero Júnior:
ralphsilver:
Então…

No commandButton que é clicado… adiciona o atributo update=“grow2” … ve se funciona…

E o método warn que vc criou no seu ben precisa adicionar a mensagem no faces message

Bem, vou tentar fazer isso, mas se ele clicar no botão vai ABRIR o dialog… E eu queria que a mensagem aparecesse depois que o cara dá um TAB… Conseguiu entender oque estou tentando dizer e também o código da página ?
Vlw e obrigado pela ajuda.

vc fez isso

<f:ajax render="codigo_editoraMostra, grow2" event="change" listener="#{acervoJsfBean.atualizarEditoraPorCodigo(event)}"/> //colocou o id do growl no render do f:ajax

troca o event para blur


Ok, vou testar

D

eu não lembro direiro, mas no update vc separa o id usando a “,” mas no f:ajax no render acho que deve-se separar os ids com o espaço

R

DaniloAndrade, abaixo a parte do dialog e o botão no xhtml. Deixa eu te explicar como funciona: o usuário pode selecionar a editora por 2 jeitos :
1º --> Se ele souber o código da mesma, ele digita no Input e dá um tab (faz com que apareça o nome da editora que ele escolheu). Se o código não for encontrado, daí vem a dita warn…
2º --> Senão, ele clica no ComandButton e escolhe a editora por lá… Aki, nesse caso, não tem nda de mensagem…
Abaixo o código:

<p:tab title="Cadastro" id="tabForm" rendered="#{sec:ifNotGranted('USR')}" >
                            <p:growl id="grow2" life="4000"/>
                            <p:focus for="aceTitulo"/>

                          
                            <p:dialog resizable="false" appendToBody="false" header="Pesquisa de Editora"
                                      widgetVar="EditoraDlg" id="editoraDlg" modal="true" style="position: fixed">
                                <p:panel header="Filtros de Consulta" id="parametrosEditoras">
                                    <table border="0" cellpadding="2" cellspacing="0" style="margin-right: 40px">
                                        <tr>
                                            <td align="right">Código:</td>
                                            <td>
                                                <p:inputMask id="inputPesquisaEditora1" onfocus="this.value='';" mask="9?9999" placeHolder="" size="6" value="#{editorasJsfBean.ediCodigo}"/>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td align="right">Descrição:</td>
                                            <td>
                                                <p:inputText id="inputPesquisaEditora2" onfocus="this.value='';" size="40" value="#{editorasJsfBean.ediDescricao}"/>
                                            </td>
                                        </tr>
                                    </table>
                                    <br/>

                                    <p:commandButton id="butonConsultarEditora" actionListener="#{editorasJsfBean.atualizar()}" value="Consultar" image="search" update="tabelaEditoras" process="parametrosEditoras" onfocus="inputPesquisaEditora1"/>
                                </p:panel>
                                <div style="height:500px;overflow-x:auto;overflow-y:scroll;width: 1000px">
                                    <p:dataTable id="tabelaEditoras"
                                                 rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}"
                                                 rowIndexVar="rowIx"
                                                 var="editora"
                                                 value="#{editorasJsfBean.editorasList}"
                                                 emptyMessage="Nenhum registro encontrado."
                                                 paginator="true"
                                                 paginatorPosition="bottom"
                                                 lazy="true"
                                                 rows="10" pageLinks="10"
                                                 paginatorTemplate="{CurrentPageReport} {FirstPageLink}
                                                 {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}
                                                 Exibir: {RowsPerPageDropdown}
                                                 Registros Encontrados: #{editorasJsfBean.editorasList.rowCount}"
                                                 rowsPerPageTemplate="10,25,35,50">
                                        <p:column headerText="Código" width="30">
                                            <h:outputText value="#{editora.ediCodigo}"/>
                                        </p:column>
                                        <p:column headerText="Descrição">
                                            <h:outputText value="#{editora.ediDescricao}"/>
                                        </p:column>
                                        <p:column headerText="Ação" width="50">
                                            <p:commandButton update="@form" value="Selecionar" image="ok" title="Selecionar">
                                                <f:setPropertyActionListener value="#{editora}" target="#{acervoJsfBean.crudObj.aceeditora}" />
                                                <f:setPropertyActionListener value="#{editora.ediCodigo}" target="#{acervoJsfBean.codigoEditoraParaRegistro}" />
                                                <f:ajax render="codigo_editora" event="change" listener="#{acervoJsfBean.atualizarCodigoDeEditora(event)}"/>
                                            </p:commandButton>
                                        </p:column>
                                    </p:dataTable>
                                </div>
                            </p:dialog>

 .....................................................................MAIS COISAS DA TELA.......................................................
............................Abaixo os inputsText e o Btn................

<div>
                                            <td align="right">Editora:</td>
                                            <h:panelGrid id="pnl_editora" columns="3">
                                                <p:inputMask  onkeypress="chamaDialog(event,'codigo_editora')" id="codigo_editora" size="6" mask="9?9999" required="false" requiredMessage="O campo editora deve ser informado." placeHolder="" value="#{acervoJsfBean.codigoEditoraParaRegistro}" >
                                                    <f:ajax render="codigo_editoraMostra" event="change" listener="#{acervoJsfBean.atualizarEditoraPorCodigo(event)}"/>
                                                </p:inputMask>
                                                <p:inputText id="codigo_editoraMostra" disabled="true" required="false" requiredMessage="O campo editora deve ser informado." value="#{acervoJsfBean.crudObj.aceeditora.ediDescricao}" style="width: 190px"/>
                                                <p:commandButton id="abreDialogEditora" icon="ui-icon-search" onclick="EditoraDlg.show()"/>
                                            </h:panelGrid><br/>
                                        </div>
R

Ricardo Fávero Júnior:
ralphsilver:
Então…

No commandButton que é clicado… adiciona o atributo update=“grow2” … ve se funciona…

E o método warn que vc criou no seu ben precisa adicionar a mensagem no faces message

Bem, vou tentar fazer isso, mas se ele clicar no botão vai ABRIR o dialog… E eu queria que a mensagem aparecesse depois que o cara dá um TAB… Conseguiu entender oque estou tentando dizer e também o código da página ?
Vlw e obrigado pela ajuda.

Hummm… entendi… aí é o mesmo caminho… só que aonde vc for dar o tab (vc deve estar falando de um input)… vc tem que colocar o <p:ajax action="<o action que vai popular a mensagem>" event="onblur" update="grow2" />

R

Ok, vou testar também. Mais uma vez cara, mto obrigado por estão dando essa ajuda ae. Fico mto grato cara (Y)

R

ralphsilver:
Ricardo Fávero Júnior:
ralphsilver:
Então…

No commandButton que é clicado… adiciona o atributo update=“grow2” … ve se funciona…

E o método warn que vc criou no seu ben precisa adicionar a mensagem no faces message

Bem, vou tentar fazer isso, mas se ele clicar no botão vai ABRIR o dialog… E eu queria que a mensagem aparecesse depois que o cara dá um TAB… Conseguiu entender oque estou tentando dizer e também o código da página ?
Vlw e obrigado pela ajuda.

Hummm… entendi… aí é o mesmo caminho… só que aonde vc for dar o tab (vc deve estar falando de um input)… vc tem que colocar o <p:ajax action="<o action que vai popular a mensagem>" event="onblur" update="grow2" />

Bem cara, testei as maneiras que falou acima, troquei para onblur, troquei de f:ajax para p:ajax e nda… Nem abriu a página… PQP… tá tenso cara… Não sei amis oke fazer…
Mas, obrigado pela ajuda…e paciência…

R

vc está adicionando as mensagens no facemessage?

R

ralphsilver:
E como vc está printando esta mensagem?

Tipo… vc precisa especificar um lugar para printar ela… como um message ou até mesmo um growl (já que vc está utilizando primefaces)

cara… dá uma olhada aqui http://www.primefaces.org/showcase/ui/growl.jsf e ve se vc está esquecendo de alguma coisa

R

ralphsilver:
ralphsilver:
E como vc está printando esta mensagem?

Tipo… vc precisa especificar um lugar para printar ela… como um message ou até mesmo um growl (já que vc está utilizando primefaces)

cara… dá uma olhada aqui http://www.primefaces.org/showcase/ui/growl.jsf e ve se vc está esquecendo de alguma coisa


Ok, vou olhar sim… Porém, se eu criar aquilo no bean que eu tenho:

public void atualizarEditoraPorCodigo(AjaxBehaviorEvent event) {
        fillEditoraPorCodigo(this.codigoEditoraParaRegistro);
    }

    private void fillEditoraPorCodigo(String codigo) {
        if (codigo != null && !codigo.trim().equals("")) {
            Editoras editora = e.findEditoraByCodigo(codigo);
            if (editora != null) {
                aceeditora = editora.getEdiDescricao();
                crudObj.setAceeditora(editora);
            } else {
                nomeEditoraParaRegistro = null;
                codigoEditoraParaRegistro = null;
                warn("Código Inválido");
                System.err.println("A editora com o código " + codigo + " não existe.");
            }
        } else {
            crudObj.setAceeditora(null);
        }
    }

o que eu colocaria??? E no xhtml, como eu chamaria aki ?

<div>
                                            <td align="right">Editora:</td>
                                            <h:panelGrid id="pnl_editora" columns="3">
                                                <p:inputMask  onkeypress="chamaDialog(event,'codigo_editora')" id="codigo_editora" size="6" mask="9?9999" required="false" requiredMessage="O campo editora deve ser informado." placeHolder="" value="#{acervoJsfBean.codigoEditoraParaRegistro}" >
                                                    <f:ajax render="codigo_editoraMostra" event="change" listener="#{acervoJsfBean.atualizarEditoraPorCodigo(event)}"/>
                                                </p:inputMask>
                                                <p:inputText id="codigo_editoraMostra" disabled="true" required="false" requiredMessage="O campo editora deve ser informado." value="#{acervoJsfBean.crudObj.aceeditora.ediDescricao}" style="width: 190px"/>
                                                <p:commandButton id="abreDialogEditora" icon="ui-icon-search" onclick="EditoraDlg.show()"/>
                                            </h:panelGrid><br/>
                                        </div>

Desculpe se estou pedindo algo que eu já deveria saber, mas é que to meio perdido e nem sei mais oque fazer pra solucionar isso… Vlw

R

vc está dando um f:ajax aonde vc quer que chame a função não é?

Está caindo no action? vc está debugando ou printando alguma coisa pra ver se está caindo?

E este método warn(“Código Inválido”); põe aí a implementação dela!!

R

ralphsilver:
vc está dando um f:ajax aonde vc quer que chame a função não é?

Está caindo no action? vc está debugando ou printando alguma coisa pra ver se está caindo?

E este método warn(“Código Inválido”); põe aí a implementação dela!!


Ok, Só um minuto.
Estou debugando sim, e está passando pelo warn, porém só aparece no System.out no console e no anvegador mesmo nao aparece nda.

R

ralphsilver:
vc está dando um f:ajax aonde vc quer que chame a função não é?

Está caindo no action? vc está debugando ou printando alguma coisa pra ver se está caindo?

E este método warn(“Código Inválido”); põe aí a implementação dela!!

A implementação do warn:

protected void warn(String summary) {

        JsfUtil.warn(summary);

    }


 public static void warn(String summary) {

        getFC().addMessage(null,
                new FacesMessage(FacesMessage.SEVERITY_WARN, summary, null));

    }
R

então é estranho;… não está dando nenhum warn nos logs não?..
As vezes ele lançou um warning falando de algum problema…

cara… eu acho também que o f:ajax precisa estar dentro de um <h:form … põe um <h:form em volta do <p:table

R

ralphsilver:
então é estranho;… não está dando nenhum warn nos logs não?..
As vezes ele lançou um warning falando de algum problema…

cara… eu acho também que o f:ajax precisa estar dentro de um <h:form … põe um <h:form em volta do <p:table


Ok, vo testar aki. Além disso, vou limpar akela p#%@ tela e deixar só o campo de editora… Pra ver se dá alguma coisa… Já posto o resultado do teste aki. Mais uma vez, valeu pela ajuda que está dando ae cara :slight_smile:

R

Cara, funcionou, mtoo obrigado, pela ajuda, mas mtoo obrigado mesmo. Não sei nem como te agradecer. Vlw cara!!! Era a atualização do gorl msm :smiley:

R

Não precisou do form? e o update? vc já não estava dando no f:ajax?

R

Dei o update no growl só, junto com o render :slight_smile:

Criado 11 de abril de 2013
Ultima resposta 11 de abr. de 2013
Respostas 34
Participantes 4