0

我正在使用 JSF,并且在 web.xml 中有 javax.faces.STATE_SAVING_METHOD 到客户端。我想要发生的是,当会话超时并且我尝试重定向到另一个页面时,它必须重定向到 sessionTimeout.jsf,并且在单击该页面上的按钮时,它必须重定向到 login.jsf。我设计了 sessionTimeout.jsf。每当会话到期并且我尝试导航到不同的页面时,都会抛出 javax.faces.application.ViewExpiredException。我在目标页面中设置了一个会话变量,以便每次进入该页面时,它首先检查变量,但在进入该页面之前它会抛出异常。如何解决这个问题?

4

4 回答 4

1

这可能会有所帮助

于 2010-07-21T04:36:25.097 回答
1

“每当会话到期并且我尝试导航到不同的页面时,都会抛出 javax.faces.application.ViewExpiredException。”

您应该将错误页面和登录页面等页面设置为瞬态,以便在离开会话中页面时会话可以失效。感谢 BalusC 关于此的文章:

http://balusc.omnifaces.org/2013/02/stateless-jsf.html

这将确保在操作方法中使会话无效并重定向到不受会话授权过滤器保护的视图时,您的会话范围 bean 不会立即重新初始化。

于 2016-01-11T20:21:27.837 回答
0

解决方案是添加:

<a4j:region>
 <script language="javascript">
 A4J.AJAX.onExpired = function(loc, expiredMsg){
  window.location = "/sessionTimeOut.jsf";
 }
 </script>
</a4j:region>

在 RichFaces 指南中阅读更多信息

于 2010-07-21T08:57:56.777 回答
-2

添加到 Web.xml 在页面中提供消息以重新加载...

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>viewExpired.xhtml</location>
</error-page>
于 2010-07-22T13:58:01.363 回答