好的简单问题.我有一个JSF应用程序,包含一个登录页面.问题是如果用户加载登录页面,离开它一段时间,然后尝试登录会话过期并抛出ViewExpiredException.当发生这种情况时,我可以重定向回登录,但这不是很顺利.如何在没有额外尝试的情况下允许此流程正确登录?
我在我的项目中使用JSF 2.0和Primefaces.
我有两个xhtml页面,即Cars.xhtml和Bikes.xhtml.
我正在使用ViewScoped支持bean.
目前如果从两个页面中的任何一个获取视图过期异常,我将在web.xml中处理它.通过error-page标签并指向welcome.xhtml.
现在,如果我从Bikes.xhtml获得一个viewexpired异常,我需要指向另一个页面,即BikesHome.xhtml而不是welcome.xhtml.
如果异常来自Cars.xhtml,则应显示welcome.xhtml.
请帮我怎么做.
我的h有问题:commandButton"登录":当我使用@ViewScoped并按下此按钮时会出现ViewExpiredException,但是当我使用@SessionScoped时,没有任何错误.
堆栈跟踪:
javax.faces.application.ViewExpiredException: /pages/register.xhtmlNo saved view state could be found for the view identifier: /pages/register.xhtml
at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:132)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Run Code Online (Sandbox Code Playgroud)
我的页面:
<h:form>
<h:panelGrid columns="2" >
<h:outputLabel value="Login:"/>
<h:inputText value="#{registerController.registerLog}"/>
<h:outputLabel value="#{msg.password}"/>
<h:inputSecret id="pass" …Run Code Online (Sandbox Code Playgroud) 我尝试关注有关如何ViewExpiredException在 GlassFish 3.1 上处理 Mojarra 2.1.0(使用 RichFaces 4)中的不同帖子。但我定义的内容web.xml似乎没有任何效果。我使用表单基础安全性,用户必须登录才能访问内容。我只希望 Glassfish (catalina) 在会话超时时将用户重定向到一个简单的 JSF 页面,并提供返回登录页面的链接。
我总是收到以下错误消息;
javax.faces.application.ViewExpiredException: viewId:/app_user/activity/List.xhtml - View /app_user/activity/List.xhtml could not be restored.
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:202)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:113)
Run Code Online (Sandbox Code Playgroud)
当用户会话超时并在服务器日志中捕获异常时,我可以向谁重定向用户?
问候,克里斯。
布局.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- Had no effect
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
-->
<h:outputStylesheet name="css/default.css"/>
<h:outputStylesheet name="css/cssLayout.css"/>
<title> …Run Code Online (Sandbox Code Playgroud) 我相信以下是真的
javax.faces.STATE_SAVING_METHOD设置为client,则视图永不过期ViewExpiredException将被抛出
javax.faces.STATE_SAVING_METHOD设置为server 并且视图状态不可用我不知道
谢谢
相关:
jsf-2 ×4
jsf ×3
glassfish ×1
jakarta-ee ×1
login ×1
myfaces ×1
primefaces ×1
session ×1
view-scope ×1