Problemas com mensagens no jsf

10 respostas
toni.arc

Fala galera, meu problema é o seguite, estou tentando mostrar mensagens de erro que eu crio no método de navegação do meu managed bean, que está com escopo de request, quando a minha reqra de navegação está sem o (faces-config), tudo funciona perfeitamente, mas quando eu coloco o redirect as mensagens não são mostradas, e eu preciso do redirect pra pegar a url correta da página requisita porque é baseado nela que eu faço a segurança do sistema (verifico se o usuário tem permissão para acessar a página, através de um servlet filter) . Alguém já passou por isso? Podem me ajudar?

desde de já agradeço a força!!!

10 Respostas

toni.arc

não tem ninguem que possa me ajudar?

felipeguerra

De que forma você apresenta suas mensagens?

toni.arc

através da tag <h:messages/>

toni.arc

será que ninguém aqui no forum nunca passou por essa situação? se tiver alguem que saiba como resolver, help me, please!!!

Leozin

pode explicar melhor sobre como funciona essa tua regra?

  • qual página que chama o action?
  • a mensagem é para aparecer em qual página?
  • qual o código que tu fez pra criar a mensagem?

e só por curiosidade: o que você está utilizando de JSF? implementação, frameworks etc?

abraço

toni.arc

valeu pela atenção Leozin, o meu sistema é o seguinte (exemplo):

pagina1.xhtml

....
   <h:form>
       <h:commandLink value="Submit" action="#{MeuMBean.meuMetodoDeNavegacao}" />
   </h:form>
  ....

MeuMBean.java

...

public String meuMetodoDeNavegacao(){

   FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Mensagem Global", null);
   FacesContext.getCurrentInstance().addMessage(msg);

   return "success";

}

...

pagina2.xhtml

...
<f:view>
    <h:form>
       <h:messages />
    </h:form>
</f:view>
...

faces-config.xml

...

   <managed-bean>
        <managed-bean-name>MeuMBean</managed-bean-name>
        <managed-bean-class>teste.MeuMBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

   <navigation-rule>
        <from-view-id>/pagina1.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/pagina2.xhtml</to-view-id>
            <redirect/> <!-- esse é o meu problema -->
        </navigation-case>
   </navigation-rule>
...

esse é um exemplo do meu problema, se vc tentar tentar rodar esse exemplo, com certeza, na pagina2.xhtml não será mostrada nenhuma mensagem. O Problema é o nó na regra de navegação (faces-config.xml), se eu tirar ele, a mensagem aperece bonitinha, porem a url mostrada no navegador é a url da página anterior e no meu sistema eu faço a autorização de usuário através da url, tenho um filtro que recupera a url requisitada e baseado nas permissões do usuário o sistema pode ou não mostrar a página requisitada, só que sem o redirect essa validação não funciona por que a url não confere com a url da página atual.

Obs.: estou usando JSF RI 1.2 e facelets

Leozin

então faz assim:

quando adicionar o teu faces-message, bota a viewId da página que você quer que apareça a mensagem :slight_smile:

in other words

FacesContext.getCurrentInstance().addMessage("/pagina2.xhtml",msg);

veja se isso funciona

abração

toni.arc

fala Leozin, isso não funciona, acho que vc se confundiu, o primeiro parâmetro do método “addMessage()” recebe o “clientId” e não o “viewId”, mas de qualquer forma obrigado pela tentativa.

toni.arc

ninguem mais sabe como resolver esse problema? eu to precisando muito resolver isso?

se aguem alguem souber, por favor me ajuuuuuuuuuuuuuuudeeeeeeeeeeeeeeeeeeeeeem !!!

felipeguerra

E assim, funciona?

&lt;h:messages globalOnly="true" /&gt;
Criado 6 de janeiro de 2008
Ultima resposta 11 de jan. de 2008
Respostas 10
Participantes 3