我正在使用JSF并在web.xml中将javax.faces.STATE_SAVING_METHOD发送到客户端。我想要发生的是,当会话超时并且我尝试重定向到另一个页面时,它必须重定向到sessionTimeout.jsf并且单击该页面上的按钮,它必须重定向到login.jsf。我设计了sessionTimeout.jsf。每当会话到期并且我尝试导航到不同的页面时,抛出javax.faces.application.ViewExpiredException。我在目标页面中设置了一个会话变量,这样每次进入该页面时,它首先检查变量,但在转到该页面之前,它会抛出异常。怎么解决这个问题?
答案 0 :(得分:1)
答案 1 :(得分:1)
“每当会话到期并且我尝试导航到不同的页面时,都会抛出javax.faces.application.ViewExpiredException。”
您应该将错误页面和登录页面等页面设置为瞬态,以便在远离会话中页面时导致会话无效。感谢BalusC的文章:
http://balusc.omnifaces.org/2013/02/stateless-jsf.html
这将确保在操作方法中使会话无效并且重定向到不受会话授权过滤器保护的视图时,不会立即重新初始化会话范围的bean。
答案 2 :(得分:0)
解决方案是添加:
<a4j:region>
<script language="javascript">
A4J.AJAX.onExpired = function(loc, expiredMsg){
window.location = "/sessionTimeOut.jsf";
}
</script>
</a4j:region>
答案 3 :(得分:-2)
添加到Web.xml,在页面中给出重新加载的消息......
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>viewExpired.xhtml</location>
</error-page>