Bom galera, estou com um problema teoricamente fácil de resolver porém já rodei tudo o que era lugar e não consigo resolver esse problema. Tenho uma aplicação que consegue fazer o login normalmente, na qual abre a sessao corretamente, só que quando clico no botão de logout nada acontece, no console ele mostra a página que é pra ir só que não redireciona para ela, segue o código abaixo.
LoginBean
import javax.enterprise.inject.Alternative;
import javax.faces.application.FacesMessage;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import org.primefaces.context.RequestContext;
import br.unipe.akropolis.business.UsuarioBC;
import br.unipe.akropolis.domain.Usuario;
import br.unipe.akropolis.util.FacesUtil;
import br.unipe.akropolis.util.GerenciadorSessao;
import br.gov.frameworkdemoiselle.annotation.NextView;
import br.gov.frameworkdemoiselle.annotation.PreviousView;
import br.gov.frameworkdemoiselle.security.Authenticator;
import br.gov.frameworkdemoiselle.security.User;
import br.gov.frameworkdemoiselle.stereotype.ViewController;
import br.gov.frameworkdemoiselle.template.AbstractPageBean;
import br.gov.frameworkdemoiselle.transaction.Transactional;
@Alternative
@SessionScoped
@ViewController
@NextView("/index.xhtml")
@PreviousView("/login.xhtml")
public class LoginBean extends AbstractPageBean implements Authenticator{
private static final long serialVersionUID = 1L;
@Inject
UsuarioBC usuarioBC = new UsuarioBC();
private String nomeUsuario;
private String senha;
@Inject
private Usuario usuario;
public String getNomeUsuario() {
return nomeUsuario;
}
public void setNomeUsuario(String nomeUsuario) {
this.nomeUsuario = nomeUsuario;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getLogin() {
return "";
}
@Transactional
public String login() {
RequestContext requestContext = RequestContext.getCurrentInstance();
FacesMessage msg = null;
boolean loggedIn = false;
if(authenticate()) {
if (usuario != null) {
loggedIn = true;
String nome = usuario.getPessoaFisica().getPessoa().getNome();
msg = new FacesMessage(FacesMessage.SEVERITY_INFO, ("Seja bem-vindo(a), " + nome), null);
FacesContext.getCurrentInstance().addMessage(null, msg);
//context.addCallbackParam("loggedIn", loggedIn);
System.out.println("GETCURRENTVIEW: " + getCurrentView());
System.out.println("GETNEXTVIEW: " + getNextView());
GerenciadorSessao.abrirSessao(usuario);
System.out.println("Sessao: " + GerenciadorSessao.getUserSession());
return getNextView();
}
else {
loggedIn = false;
msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro de login", "Login e/ou senha não conferem.");
}
} else {
loggedIn = false;
msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro de login", "Credenciais inválidas.");
}
FacesContext.getCurrentInstance().addMessage(null, msg);
return getCurrentView();
}
@Override
public boolean authenticate() {
if(nomeUsuario != null && senha != null) {
usuario = usuarioBC.getUsuario(nomeUsuario, senha);
return true;
}
return false;
}
@Override
public void unAuthenticate() {
usuario.limpar();
}
@Override
public User getUser() {
return new User() {
private static final long serialVersionUID = 1L;
@Override
public String getId() {
return usuario.getLogin();
}
@Override
public void setAttribute(Object key, Object value) {
usuario.setLogin((String)value);
}
@Override
public Object getAttribute(Object key) {
return usuario.getLogin();
}
};
}
public String efetuarLogout() {
boolean resultado = GerenciadorSessao.fecharSessao();
if (!resultado) {
System.out.println("--------------ENTREI NO IF--------------");
return null;
}
System.out.println("--------------NÃO ENTREI NO IF, MAS NÃO ESTOU FAZENDO O LOGOUT PQ??????????--------------");
System.out.println("CurrentView: " + getCurrentView());
return getPreviousView();
}
}
Botão de Logout
<p:submenu label="Logout">
<p:menuitem value="#{messages['menu.menuitem.quit']}"
action="#{loginBean.efetuarLogout}"/>
</p:submenu>
Desde já agradeço a ajuda.