所以我有一个ViewExpiredException处理程序并且工作正常。
现在,当我启动web-app时,我的URL看起来像www.myApp.com/TestFaces/
,这将显示第一页,即登录页面。
如果由于任何原因我在登录时离开页面,并且View过期,app会捕获ViewExpiredException并将我发送到“ViewExpired”页面但是URL保持相同www.myApp.com/TestFaces/
。在那个“ViewExpired”页面上,我有一个commandLink返回登录页面,在值attrib中我放了“index.xhtml”但是它没有把我发送到登录页面,因为www.myApp.com/TestFaces/index.xhtml
上没有页面但是在www.myApp.com/TestFaces/faces/index.xhtml
所以问题是:
当View在登录页面中过期时,仅发生,在我的应用程序的其他页面中,它的效果非常好。
提前致谢!
答案 0 :(得分:1)
为什么如果我在登录页面,我收到了ViewExpiredException?是因为ajax?
当您在会话中不再存在的视图上调用POST请求时,您将收到此异常。例如,当您将页面保持打开状态太久以至于会话已在服务器端过期时,或者当您从浏览器缓存而不是直接从服务器获取登录页面时,就会发生这种情况。有关更多详细信息,另请参阅our ViewExpiredException
tag info page。所有JSF ajax请求也都在这个帐户中,因为他们也使用POST。
我如何或在哪里使commandLink真的把我发送到index.xhtml?
利用隐式导航。这样JSF将附加正确的FacesServlet
映射。
public String goToIndexPage() {
return "index";
}
或
<h:commandLink value="Go to index page" action="index" />
或者,更好的是,当您根本不需要调用任何业务逻辑时:
<h:link value="Go to index page" outcome="index" />