捕获ViewExpiredException时JSF错误的重定向

时间:2011-11-28 16:00:01

标签: url jsf jsf-2 viewexpiredexception

所以我有一个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

所以问题是:

  1. 为什么如果我在登录页面,我收到了ViewExpiredException?是因为ajax?
  2. 我如何或在哪里使commandLink真正将我发送到index.xhtml?
  3. 当View在登录页面中过期时,发生,在我的应用程序的其他页面中,它的效果非常好。

    提前致谢!

1 个答案:

答案 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" />

另见: