3
respostas

Resolver problema da uri.

Como resolver o problema da uri que não muda ao trocar de tela? Por exemplo, estou na tela de login http://localhost:8080/livraria/login.xhtml e ao ir para tela de livros a uri continua http://localhost:8080/livraria/login.xhtml.

3 respostas

Fala Eduardo tudo bem?

Provavelmente no seu método, que manda para a tela de livros você está apenas retornando "livros":

public String efetuaLogin(){
    //faz as validações
    return "livros";
}

o problema é que ao fazer isso quem é responsável por fazer o redirecionamento da tela é o servidor e não o browser. Para resolver esse problema no retorno do método precisamos passar um parâmetro para o servidor que fara com o redirecionamento da página seja feito pelo browser:

public String efetuaLogin(){
    //faz as validações
    return "livros?faces-redirect=true";
}

Acho que isso resolve o seu problema =)

E ai Samir, Na verdade estou usando uma classe que faz isso pra mim,

public class RedirectView {

    private String view;

    public RedirectView(String view) {
        this.view = view;
    }

    @Override
    public String toString() {
        return view + "?faces-redirect=true";
    }
}

Fiz uma tela de cadastro e na tela de login coloquei um link que leva o usuário para essa tela, é nessa hora que a uri não muda.

Segue a classe UsuarioBean

package br.com.caelum.livraria.bean;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

import br.com.caelum.livraria.dao.DAO;
import br.com.caelum.livraria.dao.UsuarioDAO;
import br.com.caelum.livraria.modelo.Usuario;

@ManagedBean
public class UsuarioBean {

    private Usuario usuario = new Usuario();

    public Usuario getUsuario() {
        return usuario;
    }

    public RedirectView cadastra() {
        boolean existe = new UsuarioDAO().existe(this.usuario);

        if (existe) {
            FacesContext.getCurrentInstance().addMessage("usuario", new FacesMessage("Usuário já existe"));
        } else {
            new DAO<Usuario>(Usuario.class).adiciona(this.usuario);
            FacesContext.getCurrentInstance().addMessage("usuario",
                    new FacesMessage("Usuário cadastrado com sucesso!"));
        }

        System.out.println("Usuário cadastrado com suceso!");
        return new RedirectView("login");
    }

}

fala Eduardo!

cara, testei e retestei o seu código aqui e pra mim funcionou com o redirect. Da uma olhada se não ta usando o cache do servidor. Quando tirei o faces-redirect do toString do seu método ele deixou de fazer o redirecionamento e passou a fazer foward tb.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software