in my java ee application, i am not able to implement logout functionality,. this is what happens when i try to implement it: i have a header.xhtml which has header css part of my app: header.xhtml:(code for logout)
<div class="userid-link"><img src="images/app.png" alt=""/><p><a href="#{loginBean.logoutAction()}">Logout</a></p></div>
code for logout: loginBean.java
public String logoutAction()
{
HttpServletRequest req=(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
try{
HttpSession session=req.getSession();
session.invalidate();
// req.logout();
}
catch(Exception e)
{
}
return"equityVolume.xhtml";
}
error:
SEVERE: Error Rendering View[/ClientTemplate/userWatch.xhtml]
javax.el.ELException: /ClientTemplate/userWatch.xhtml @44,62 value="#{watchBean.ut}": java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
...
INFO: Exception when handling error trying to reset the response.
java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed
at...
the home page loads properly, but when i try to login, the userWatch.xhtml is not rendered properly and i get the above error, the css is also not applied.
watchBean.java
public List<UserTrack> getUt() {
HttpServletRequest req=(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpSession session=req.getSession();// debugged and found that the session is null, this methos executes after login i.e. on the userWatch.xhtml that is redirected after login from homePage
this.uname=(String)session.getAttribute("uname");
ut=getAllUserTrack(uname);
return ut;
}
when i remove the logOutAction method call from header.xhtml, then everything works fine except that i get viewExpired error on logout:
<div class="userid-link"><img src="images/app.png" alt=""/><p><a href="#/homePage">Logout</a></p></div>
how do i solve it?