Bhe*_*ung 3 redirect primefaces jsf-2
我在我的支持bean中有以下两种方法 -
public String validateUser() {
FacesContext facesCtx = FacesContext.getCurrentInstance();
if(userName.equals("user1") && password.equals("pass1")) {
User user = new User();
user.setUserName(userName);
HttpSession session = (HttpSession) facesCtx.getExternalContext().getSession(false);
session.setAttribute(User.SESSION_ATTRIBUTE, user);
return "secured/home.jsf?faces-redirect=true";
}
if(!userName.equals(LoginBean.USERNAME)) {
FacesMessage msgForUserName = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Username did not match.", null);
facesCtx.addMessage("loginForm:userName", msgForUserName);
}
if(!password.equals(LoginBean.PASSWORD)) {
FacesMessage msgForPassword = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Password did not match.", null);
facesCtx.addMessage("loginForm:password", msgForPassword);
}
return null;
}
public String logout() {
logger.info("Logging out .........................................");
FacesContext facesCtx = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesCtx.getExternalContext().getSession(false);
session.invalidate();
return "login.jsf?faces-redirect=true";
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么重定向在第一种方法(即validateUser())中工作,但它不在第二种方法(即logout())中工作.注销方法中的代码实际上已执行,会话也会失效,但浏览器会以某种方式停留在同一页面上.而且,我正在使用PrimeFaces p:commandButton并且两者都启用了ajax.任何一个,任何想法?谢谢.
但不知何故,浏览器停留在同一页面上.而且,我正在使用PrimeFaces p:commandButton并且两者都启用了ajax
我不指望它会失败.我怀疑这与失效的会话有关.与试用ajax="false"
的<p:commandButton>
.
与此问题无关,您应该尝试最小化javax.servlet
JSF托管bean中的导入.他们经常表明你在错误的地方或笨拙的方式做事.在纯JSF2中,您可以按如下方式使会话无效:
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
Run Code Online (Sandbox Code Playgroud)
您可以通过会话Map在会话中获取/设置对象.
Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
// ...
Run Code Online (Sandbox Code Playgroud)
或者只是使它成为托管bean(属性).
归档时间: |
|
查看次数: |
9315 次 |
最近记录: |