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?
<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>sucess</from-outcome>
<redirect>/results/welcome.xhtml</redirect>
</navigation-case>
</navigation-rule>
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.
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 ?
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>error</from-outcome>
<to-view-id>/error.xhtml</to-view-id>
<redirect />
</navigation-case>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/login.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
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: :smiley:](//www.guj.com.br/images/emoji/twitter/smiley.png?v=6)