在JSF中注销后尝试再次登录时出现ServletException
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JSF中注销后尝试再次登录时出现ServletException相关的知识,希望对你有一定的参考价值。
我正在努力解决我试图从导航栏执行注销的问题。每次我从Session注销并尝试再次登录时,在执行登录过程后,系统只会因ServletException错误而崩溃,反馈非常少。
当您第一次注销时,它会顺利执行,它只会将您重定向到索引,就是这样。再次登录并尝试再次执行注销后,会出现一个弹出窗口,例如,当您尝试刷新填充数据的表单时,会出现一个弹出窗口。
以下代码位于.xhtml代码段中,它是负责执行注销的navCommandLink
。
<b:navCommandLink iconAwesome="power-off"
action="#{navbar.logout()}">
<span style="margin-left: 10px;">Logout</span>
</b:navCommandLink>
行动的代码如下。
public String logout() {
Map<String, Object> session = FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap();
session.remove("LOGGEDIN_USER");
FacesContext.getCurrentInstance().getExternalContext()
.invalidateSession();
return "index";
}
它应该返回到index.xhtml
页面,就是这样。
答案
每个问题都应该有一个正确的答案,所以让我重复一下评论中给出的答案。问题是会话无效会阻止您触发JSF导航。所以你必须找到一个替代方案,例如通过javascript导航或使用externalContext.redirect(externalContext.getContextName() + "/index.xhtml");
。另请阅读评论以获取更多信息。
以上是关于在JSF中注销后尝试再次登录时出现ServletException的主要内容,如果未能解决你的问题,请参考以下文章