你好我正在使用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>
答案 0 :(得分:0)
我不知道这是否是正确的方法,但是通过在表单中插入facelet模板的div = divSessionUser并更改commandButton的按钮来解决它。
希望它可以帮助任何人,如果有人有更好的答案,请告诉我们! 谢谢!