JSF-我登录,当我导航它自动注销会话

时间:2016-04-07 21:36:07

标签: session jsf jsf-2 login logout

你好我正在使用JSF2,我在会话上遇到了一些麻烦。 我的问题是我登录并且用户名显示为已记录,但当我导航到其他页面时,名称不再出现。当我进行注销选项时,这开始发生。我在同一个控制器中有登录和注销方法。显示用户名和注销按钮的文本是facelet模板,因为我希望它显示在具有该模板的所有页面中。

这是登录和注销的代码:

public String login(){
    try {
        user = ejb.Autenticar(this.mail, this.pass);

        if(user != null){
            ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
            Map<String, Object> sessionMap = externalContext.getSessionMap();
            sessionMap.put("USER", user);

            return "LoginOK";
        }

    } catch (Exception e) {
        return null;
    }
    return null;
}

public String logout(){
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
    return "LoginView";
}

这是facelet模板的代码(用户名和注销按钮位于divSessionUser中):

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:p="http://primefaces.org/ui">

<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <h:outputStylesheet name="./css/default.css"/>
    <h:outputStylesheet name="./css/cssLayout.css"/>
    <title>Facelets Template</title>
</h:head>

<h:body>

    <div id="divSessionUser">
        <span>
            <b>Session user: </b>
            <p:outputLabel value="#{loginControlador.user.name}"/>
        </span>
        <p:button value="Logout" outcome="#{loginControlador.logout()}"/>
    </div>

    <div id="top" class="top">
        <h:graphicImage library="images" name="header1.png" styleClass="topImage"></h:graphicImage>
    </div>
    <div>
        <div id="left">
            <ul>
                <li> <h:link outcome="indexView" value="Home" /></li>
                <li> <h:link outcome="registroCView" value="Register Comunity" /></li>
                <li> <h:link outcome="LoginView" value="Login" /></li>
                <li> <h:link outcome="registroUserView" value="Register User" /></li>
            </ul>
        </div>
        <div id="content" class="left_content">
            <ui:insert name="content">Content</ui:insert>
        </div>
    </div>
</h:body>

1 个答案:

答案 0 :(得分:0)

我不知道这是否是正确的方法,但是通过在表单中​​插入facelet模板的div = divSessionUser并更改commandButton的按钮来解决它。

希望它可以帮助任何人,如果有人有更好的答案,请告诉我们! 谢谢!

相关问题