Deixa eu ver se eu entendi bem,
Para ser Redirect eu preciso passar o "?faces-redirect=true" do lado do servidor. Já no Foward o "?faces-redirect=true" é passado na tag dentro do no atributo action="" ?
Qual é melhor e mais utilizado ?
Deixa eu ver se eu entendi bem,
Para ser Redirect eu preciso passar o "?faces-redirect=true" do lado do servidor. Já no Foward o "?faces-redirect=true" é passado na tag dentro do no atributo action="" ?
Qual é melhor e mais utilizado ?
Fala Julio, tudo bem ?
Quando queremos fazer um forward apenas passamos na action para qual página queremos navegar.
<h:form>
<h:commandButton action="outraPagina" value="Outra Página" />
</h:form>
Já no caso do redirect precisamos adicionar o parâmetro faces-redirect=true
na action. Dessa forma ao final da requisição o servidor ao invés de apresentar o conteúdo da outra página (como no forward), vai mandar o browser realizar uma nova requisição pra essa outra página.
<h:form>
<h:commandButton action="outraPagina?faces-redirect=true" value="Outra Página" />
</h:form>
Ambos tem sua utilização. O caso do redirect é mais recomendado em situações onde precisamos que o navegador (cliente web) seja forçado a fazer um nova requisição, esquecendo a anterior. Por exemplo, quando acabamos de enviar dados através do método POST. Se apenas deixarmos o servidor enviar o conteúdo da nova página, o browser vai continuar sabendo que a última requisição foi o POST com o conteúdo do form. Assim, um simples F5 do usuário força o navegador a reenviar os mesmos dados. Com redirect, resolvemos esse problema. Como o browser é forçado a fazer uma nova requisição pra nova página, qualquer F5 repete a requisição apenas pra essa página, sem um risco de reenvio de informações.
Isso é tão comum que até virou um mandamento da web -> Always Redirect After Post.
Espero ter ajudado. Abraço!