• Post Reply Bookmark Topic Watch Topic
  • New Topic

java.lang.RuntimeException: Cannot find FacesContext

 
siva prasa
Greenhorn
Posts: 25
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I am getting this error after Session time i am automatically redirecting to this page.but it is throwing error in the jsp page..Any one knows the solution for this.Just help me.Thanks for reading this Post......

My jap page....yourSessionIsTimedOut.jsp

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /home/yourSessionIsTimedOut.jsp at line 12

9: </head>
10: <body class="bg_login">
11:
12: <h:form id="sessionTimeoutForm" >
13: <h1>Welcome, dude with a session!</h1>
14: Your session is expired.
15: <br>


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause

java.lang.RuntimeException: Cannot find FacesContext
javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:1855)
javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1672)
org.apache.jsp.home.yourSessionIsTimedOut_jsp._jspx_meth_h_005fform_005f0(yourSessionIsTimedOut_jsp.java:100)
org.apache.jsp.home.yourSessionIsTimedOut_jsp._jspService(yourSessionIsTimedOut_jsp.java:71)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.


AppSession.java


public class AppSession {

/**
*
*/

private static Log log = LogFactory.getLog(AppSession.class);


public static void CreateNewSession(){

FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext(). getSession(true);
log.info("session id = "+ session.getId());

}

public static void AppTimeOut(){
log.info("AppTimeOut Setting...");
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
session.setMaxInactiveInterval(10);

}

public static void AppSessionSetAttribute(String arg0, Object arg1){
log.debug("Session attribute setting.... " + arg0 + "=" + arg1);
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext(). getSession(false);
session.setAttribute(arg0, arg1);
}

public static Object AppSessionGetAttribute(String arg0){
log.debug("Session attribute retrieve.... " + arg0 );
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
if(session==null){
session.invalidate();
return null;
}
return session.getAttribute(arg0);
}


}

yourSessionIsTimedOut.jsp

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="rich" uri="http://richfaces.org/rich" %>
<%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%>
<html>
<head>
<link href="../_assets/css/celcom.css" rel="stylesheet" type="text/css">
<title>SessionTimeout</title>
</head>
<body class="bg_login">

<h:form id="sessionTimeoutForm" >
<h1>Welcome, dude with a session!</h1>
Your session is expired.
<br>
Thank you for your cooperation!
<hutputLink value="#{facesContext.externalContext.requestContextPath}/login.jsf"></hutputLink>

</h:form>

</body>
</html>

SessionTimeoutPhaseListener.java

public class SessionTimeoutPhaseListener implements PhaseListener {

public void beforePhase(PhaseEvent event) {

FacesContext facesCtx = event.getFacesContext();
ExternalContext extCtx = facesCtx.getExternalContext();
HttpSession session = (HttpSession) extCtx.getSession(false);

boolean newSession = (session == null) || (session.isNew());
System.out.println("newSession:"+newSession);
boolean postback = !extCtx.getRequestParameterMap().isEmpty();
System.out.println("postback:"+postback);
boolean timedout = postback && newSession;
System.out.println("timedout:"+timedout);
if (timedout) {
Application app = facesCtx.getApplication();
ViewHandler viewHandler = app.getViewHandler();
UIViewRoot view = viewHandler.createView(facesCtx,
"yourSessionIsTimedOut.jsp");
facesCtx.setViewRoot(view);
System.out.println("view:"+view);
facesCtx.renderResponse();
try {
viewHandler.renderView(facesCtx, view);
facesCtx.responseComplete();
} catch (Throwable t) {
throw new FacesException("Session timed out", t);
}
}
}

public void afterPhase(PhaseEvent event) {
// Do nothing

}

public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}

public boolean isPostback(FacesContext context) {
return (!context.getExternalContext().getRequestParameterMap().isEmpty());
}
}




After session tome out it has to redirect to yourSessionIsTimedOut.jsp from there if i click login.jsf it has to redirect to login page........



 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!