Dúvida Regra Navegação JSF

Bom dia amigos do fórum,

Gostaria de esclarecer uma pequena dúvida que esta me deixando intrigado.

Estou desenvolvendo um exemplo utilizando JSF 2.0 … onde o mesmo implementa uma pagina com um campo para se digitar seu nome e após você é redirecionado para uma pagina que mostra uma mensagem qualquer concatenada com o nome q vc digitou…

A minha pergunta é a seguinte … quando é utilizado a regra de navegação no faces-config.xml como por exemplo:

  <navigation-rule>
            <from-view-id>/index.xhtml</from-view-id>
            <navigation-case>
                   <from-outcome>sucess</from-outcome>
                    <to-view-id>/results/welcome.xhtml</to-view-id>
            </navigation-case>
</navigation-rule>

É normal a URL do meu browser não ser alterada após a execução com sucesso desta regra ?

Meu bean esta retornando “sucess” sem problemas… entretanto… a página esta sendo exibida … mas a url do browser esta se mantendo a mesma:

http://localhost:8080/exemplo-jsf/index.xhtml

Não seria correto ela ser modificada para:

http://localhost:8080/exemplo-jsf/results/welcome.xhtml

Já procurei na net … mas não consegui encontrar nada q me ajudasse a sanar essa dúvida…

É isto mesmo ou eu estou fazendo alguma coisa errada ?

Desde já agradeço pela ajuda.

sim, está correto.

toda requisição do JSF é feita usando método post, por isso a url não muda.

http://www.rponte.com.br/2009/01/19/o-que-todo-bom-desenvolvedor-jsf-deveria-saber

Você precisa colocar um <redirect/> dentro do seu navigation-case. Pode colocar que a URL vai ser alterada quando a página for exibida.

Entendi…

Então só pra constar… ficaria assim a regra?

 &lt;navigation-rule&gt;  
            &lt;from-view-id&gt;/index.xhtml&lt;/from-view-id&gt;  
            &lt;navigation-case&gt;  
                   &lt;from-outcome&gt;sucess&lt;/from-outcome&gt;  
                    &lt;redirect&gt;/results/welcome.xhtml&lt;/redirect&gt;  
            &lt;/navigation-case&gt;  
&lt;/navigation-rule&gt; 

Obrigado pela ajuda.

É quase isso. Mas o redirect so aceita valores booleanos.

Então fica
assim

ou vc so coloca <redirect/>

ou então vc coloca explicito <redirect>true</redirect>

Compreendi…

Vou fazer um teste e reporto o que aconteceu…

Obrigado a todos pela força

O <to-view-id> também é necessario. O redirect não substitui o ele.

Ok… sem problemas !

:smiley:

Só um detalhe. Ao utilizar o redirect, todos os dados do primeiro request vão para o espaço. Não funciona como uma navegação comum não.

Isso aí pode te dar mais problemas para exibir alguns dados no futuro.

Você poderia utilizar o redirect para enviar o usuário para telas como cadastrar algum objeto, pois não precisa de nenhuma informação na tela. Caso você não utilize @SessionScoped [=

Entendi…

Muito obrigado pela ajuda…

Deu certo… com o redirect… i resolvi meu problema.

Abraços a todos.

Galera,

Uma última pergunta… se eu precisar definir uma regra de navegação que seja comum a qualquer requisição do sistema … se eu colocar desta forma no faces funciona ?

&lt;navigation-rule&gt;
&lt;from-view-id&gt;*&lt;/from-view-id&gt;
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;error&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/error.xhtml&lt;/to-view-id&gt;
            &lt;redirect /&gt;
        &lt;/navigation-case&gt;
        &lt;navigation-case&gt;
            &lt;from-outcome&gt;logout&lt;/from-outcome&gt;
            &lt;to-view-id&gt;/login.xhtml&lt;/to-view-id&gt;
            &lt;redirect /&gt;
        &lt;/navigation-case&gt;
&lt;/navigation-rule&gt;

A minha idéia é que ao receber uma notificação de erro o sistema seja redirecionado para uma página de erro personalizada… como todas as minhas exceções são tratadas usando try catch … i os métodos que podem gerar erro retornar uma String… se eu mandar “error” não importando qual seja a página q esteja sendo exibida … com esse mapeamento irá funcionar ???

Desde já agradeço pela ajuda.

:lol:

Vc tentou? Funciona?

Se não, você tentou sem o *?

Não cheguei a testar não… apenas perguntei para ver se alguém já passou pela situação…

Mas eu vou realizar o teste i reporto o resultado .

:smiley: