JSF - Problema com redirecionamento de Páginas

Olá pessoal, espero que alguém nos ajude com esse incômodo que nos atormnta a dias.

Vamos lá, eu e meu colega estamos fazendo um trabalho da faculdade, onde estamos desenvolvendo uma aplicacao jsf, estamos utilizando o netbeans e o framework icefaces.

O problema em geral: redirecionamento de páginas

temos várias ocasiões em que o usuario clica num botao(componente commandButton), é feita a verificacao e após esta, ele é redirecionado para outra página. ex: tela de login, se o usuario e senha bater ele é enviado para outra tela

Problemas específicos:
1 - ao redirecionar pra outra pagina, a url da barra de endereços não muda, continua a mesma

2 - devido ao problema anterior, o botão do browser para retornar à pagina anterior fica desabilitado(pois pro browser, é como se mudasse o conteudo da janela sem sair da mesma página)

3 - ao redirecionar para uma simples pagina html com frame e frameset o browser exibe apenas o texto "TODO write content "

Como estamos fazendo isso:
Criamos uma classe e um metodo estático, cuja unica funcao é redirecionar pra a url passada por parametro

Classe UtilWeb

package delivery.util;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;

public class UtilWeb {

    /* Redireciona a pagina atual para outra passada
      como parametro
     */
    public static String irParaURL(String url){

        String retorno = null;



        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        try {
           response.sendRedirect(url);
           FacesContext.getCurrentInstance().responseComplete();
        }

        catch (Exception ex) {
            ex.printStackTrace();
        }
        

        return retorno;


    }

    

}

Código no evento do Botao

public String btLogar_action() {
      
     //retirei os codigos de validacao
     UtilWeb.irParaURL("/Delivery/CliContaIndex.html");

        return null;
}

Amigos, agradeço qualquer ajuda

Venom

Coloque o :

<redirect/>

no arquivo de navegação.

Espero ter ajudado.

vc ta falando do faces-config.xml ?

no caso seria apenas adicionar esta tag?

[quote=henriquejhc]Coloque o :

<redirect/>

no arquivo de navegação.

Espero ter ajudado.[/quote]

Olá, favor dar uma olhada no link abaixo para entender a diferença entre um FORWARD e um REDIRECT, e quando e porque usá-los em uma aplicação JSF:

http://www.rponte.com.br/2008/07/12/repitam-comigo-redirect-nao-e-forward/

Sim, eu estava me referindo ao faces-config.
Você deve analizar a sua necessidade.

henriquejhc e tnaires, obrigado por estarem respondendo.

Bom, o artigo me elucidou um pouco.

Pela descrição do meu problema, a nossa dor de cabeça é porque estamos usando forward(presumo isso pelo fato da nao altecao da barra de enderecos) certo?

Mas ae surge um novo problema, como eu faria para usar redirect se nós NÃO estamos usando qualquer regra de navegacao no faces-config.xml? Estamos trabalhando redirecionando apenas no codigo java mesmo, sem mexer nesse xml. tem como?

E última pergunta, o forward explica a mensagem "TODO write content " quando apontamos para uma pagina com frames? Afinal, que mensagem é essa?

[quote=tnaires]Olá, favor dar uma olhada no link abaixo para entender a diferença entre um FORWARD e um REDIRECT, e quando e porque usá-los em uma aplicação JSF:

http://www.rponte.com.br/2008/07/12/repitam-comigo-redirect-nao-e-forward/[/quote]

Não entendi a forma como vocês estão fazendo, pode dar um exemplo?

Ei venomtotal, você conseguiu fazer o redirecionamento com sua classe UtilWeb???
Por que a necessidade do usuário voltar a página pelo navegador???
Você pode adicionar um botão de voltar dentro da sua página, é só uma idéia… temos que saber melhor o que você precisa fazer :wink:
Até breve.

Cara, no JSF 2.0 é muito mais simples.

Eu faço simplesmente isso:

No backbean

Public String abrir(){ return "nome da pagina"; }
no caso o nome da página seria o pagina.xhtml mas sem o .xhtml

No cogido JSF:

 <h:commandLink value="Abril" action="#{meubean.abrir}"/>

Espero ter ajudado.

ou da pra fazer assim tambem dentro do bean

FacesContext.getCurrentInstance().getExternalContext().redirect("nome_da_pagina");

Eu utilizo o retorno no método assim:

[code]public String logar(){

return "/pagina.xhtml?faces-redirect=true"

}[/code]