Facelets e primefaces, redirect

Pessoal,

Estou iniciando um projeto utilizando o facelets e primefaces e preciso de uma força de vocês, é o seguinte:
Criei meu modelo de template (Menu, Topo, Conteúdo)
Criei minha pagina de Login e no meu ManagedBean, após autenticação direciono o usuário para a pagina inicial, assim:

[code] public void logar(ActionEvent actionEvent) {
RequestContext context = RequestContext.getCurrentInstance();
FacesMessage msg;
boolean loggedIn;
Usuario usuario = autenticacao.validaLogin(login, senha);

    if (usuario != null) {
        loggedIn = true;
        msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bem Vindo", usuario.getIdPessoa().getNome());
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("index.xhtml"); // <--- AQUI
        } catch (IOException ex) {
            Logger.getLogger(LoginBean.class.getName()).log(Level.SEVERE, null, ex);
        }

    } else {
        loggedIn = false;
        msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro Login", "Credenciais invalidas");
    }

    FacesContext.getCurrentInstance().addMessage(null, msg);
    context.addCallbackParam(
            "loggedIn", loggedIn);
};[/code]

O problema é que quando é carregada minha página, os componentes do template (Topo e Menu) não são renderizados.
Fiz um teste, colocando na chamada do método de Login ‘Ajax=“false”’ e funcionou, assim:

<p:commandButton value="Login" update="growl" actionListener="#{loginBean.logar}" ajax="false" oncomplete="handleLoginRequest(xhr, status, args)"/>

porém acho que essa não é a solução pois depois de declarar "ajax=“false” estou tendo problemas com meus JScripts.

Alguém tem alguma sugestão?
Dei uma procurada na web e não encontrei algo que me ajude.
Como faço esse redirecionamento?

Amigo tente usar o sendRedirect("./index.jsf") uma vez que vc tenha configurado no seu web.xml o sufixo para renderização dos XHTML como *.jsf.
Tente algo assim:

HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.sendRedirect("./index.jsf");

Com o send redirect vc vai fazer 2 requizições não acho o mais apropriado para o caso, não vi o código todo mais acho que ta faltando uma regra ne navegação, e vc retornar uma string no método logar com essa regra de navegação.

+1

Quanto ao problema dele pode ter ocorrido isso devido a ele ta redirecionando para uma páginas com o suffix .xhtml sendo assim acredito que a Servlet do JSF não
processara essa páginas para montar a árvore de componente dela e assim não renderizando a mesma de forma correta.
Marcio N Carvalho o seu mapeamento servlet-mapping no web.xml esta mapeado pra qual extenção?
Caso seja *.jsf

&lt;servlet-mapping&gt;
    &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;
    &lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;

Altere seu código e deixe assim:

 try {  
         FacesContext.getCurrentInstance().getExternalContext().redirect(&quot;./index.jsf&quot;); // &lt;--- AQUI  
       } catch (IOException ex) {  
          Logger.getLogger(LoginBean.class.getName()).log(Level.SEVERE, null, ex);  
       }

Caro jweibe o redirect é uma opção para quando vc quer sair da sua aplicação, e vc quer fazer o browser trabalhar, ou seja vc manda um resquisição para o servidor e ele manda uma resposta para o browser com um head de location que diz para o browser fazer um novo request assim estará fazendo dois resquests para o mesmo servidor sendo que o mais certo nesse caso é vc fazer um request e ele enviar um response.

Concordo com o Flavio machine.

Verifique se o suffix *.xhtml está mapeado em seu web.xml.

Verifique também se no seu template está declarado <h:head> <h:body> e não apenas <head> <body>.

Galera,

Valeu mesmo pelas dicas, estou no trabalho agora mais assim que chegar em casa vou seguir as orientações.

Obrigado.

Flavio,

Quando fala sobre regra de navegação retornando “Strring” está se referindo ao Facesconfig?

Criei a regra de Navegação, tanto pelo faces-config quanto direto no retorno do método e não rolou.
no site do primefaces http://www.primefaces.org/faq.html diz que commandlink e commandbutton não suportam navegação.

“PrimeFaces does not support forward based navigations within an ajax request, you need to do redirect instead or set ajax to false.”

Diz que é necessário usar o redirect ou ajax = false.

Confesso que agora fiquei preocupado, já que redirect não é a solução apropriada.

Alguem tem alguma ideia de qual é a melhor saída?

Melhor saída? ou ajax=false ou utilizar h:commandButton