java - JSF Target unreachable, returned null on session timeout on login -
i've tried upgrade system timeout user sessions through web.xml
file, set 10 minutes, filter
redirecting login page phaselistener
keep track of user activity.
my login bean, on instantiation, following:
private user user; //this has getters/setters public loginbean() { log.info("instantiating login bean..."); if(!hassessiondata("user")) { user = new user(); dealer dealer = new dealer(); user.setdealer(dealer); setsessiondata("user",user); } }
this opens login form , uses user
contain login details submission. however, if sit on login screen more 10 minutes (session expire) , attempt login, error.
aug 01, 2013 10:32:20 com.sun.faces.lifecycle.processvalidationsphase execute warning: /login30frmview.xhtml @108,92 value="#{loginbean.user.dealerid}": target unreachable, 'user' returned null javax.el.propertynotfoundexception: /login30frmview.xhtml @108,92 value="#{loginbean.user.dealerid}": target unreachable, 'user' returned null @ com.sun.facelets.el.tagvalueexpression.gettype(tagvalueexpression.java:62) @ com.sun.faces.renderkit.html_basic.htmlbasicinputrenderer.getconvertedvalue(htmlbasicinputrenderer.java:92) @ javax.faces.component.uiinput.getconvertedvalue(uiinput.java:942) @ javax.faces.component.uiinput.validate(uiinput.java:868) @ javax.faces.component.uiinput.executevalidate(uiinput.java:1072) @ javax.faces.component.uiinput.processvalidators(uiinput.java:672) @ javax.faces.component.uicomponentbase.processvalidators(uicomponentbase.java:1058) @ javax.faces.component.uiform.processvalidators(uiform.java:234) @ javax.faces.component.uicomponentbase.processvalidators(uicomponentbase.java:1058) @ org.ajax4jsf.component.ajaxviewroot$3.invokecontextcallback(ajaxviewroot.java:447) @ org.ajax4jsf.component.ajaxviewroot.processphase(ajaxviewroot.java:240) @ org.ajax4jsf.component.ajaxviewroot.processvalidators(ajaxviewroot.java:463) @ com.sun.faces.lifecycle.processvalidationsphase.execute(processvalidationsphase.java:76) @ com.sun.faces.lifecycle.phase.dophase(phase.java:100) @ com.sun.faces.lifecycle.lifecycleimpl.execute(lifecycleimpl.java:118) @ javax.faces.webapp.facesservlet.service(facesservlet.java:265) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:305) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210) @ org.ajax4jsf.webapp.basexmlfilter.doxmlfilter(basexmlfilter.java:206) @ org.ajax4jsf.webapp.basefilter.handlerequest(basefilter.java:290) @ org.ajax4jsf.webapp.basefilter.processuploadsandhandlerequest(basefilter.java:388) @ org.ajax4jsf.webapp.basefilter.dofilter(basefilter.java:515) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:243) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210) @ org.displaytag.filter.responseoverridefilter.dofilter(responseoverridefilter.java:125) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:243) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210) @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:222) @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:123) @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:472) @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:171) @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:99) @ org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:947) @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:118) @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:408) @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1009) @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:589) @ org.apache.tomcat.util.net.jioendpoint$socketprocessor.run(jioendpoint.java:310) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615) @ java.lang.thread.run(thread.java:722)
aug 01, 2013 10:32:20 com.sun.faces.lifecycle.phase dophase severe: jsf1054: (phase id: process_validations 3, view id: /login30frmview.xhtml) exception thrown during phase execution: javax.faces.event.phaseevent[source=com.sun.faces.lifecycle.lifecycleimpl@7d137b]
i wondering why user returning null when loginbean still initialized according log. on session expire, user
in session expires well, if(!hassessiondata("user"))
should return true , initialize user
again. if user has re-initialized on page load , times out on page...how can done? filter
redirects login whenever session destroyed so:
if (issessioninvalid(httpservletrequest)) { string timeouturl = httpservletrequest.getcontextpath() + "/" + gettimeoutpage(); httpservletresponse.sendredirect(timeouturl); system.out.println("redirecting login page"); return; } }
but somehow need trigger when form submitted , session expired, doesn't seem is...i don't have experience want know if possible? how can user
initialized again form submit once session expires?
(note refreshing page makes fine again, i'm going lot of complaints end-users if let scary error messages appear.)
edit: login submit uses <h:commandbutton>
, points listener in loginbean
. there way catch if submitted can revert login page when above occurs? may possible alternate solution. want error go away, if jumps user login without explanation.
answering own question since found solution. had add line login form.
<meta http-equiv="refresh" content="#{session.maxinactiveinterval}"/>
this refreshes form before timeout preserve session, ensuring there user
in session since refreshing instantiates bean , loads page again.
Comments
Post a Comment