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.
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.
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.