1

所以我有一个 ViewExpiredException 处理程序并且工作正常。现在,当我启动网络应用程序时,我的 URL 看起来像这样www.myApp.com/TestFaces/,它显示了第一页,即登录页面。如果出于某种原因我在登录时离开页面,并且视图过期,则应用程序会捕获 ViewExpiredException 并将我发送到“ViewExpired”页面但 URL 保持不变www.myApp.com/TestFaces/。在那个“ViewExpired”页面上,我有一个commandLink返回登录页面,在值属性中我放了“index.xhtml”,但它没有将我发送到登录页面,因为没有页面www.myApp.com/TestFaces/index.xhtml但在www.myApp.com/TestFaces/faces/index.xhtml

所以问题是:

  1. 如果我在登录页面,为什么会收到 ViewExpiredException?是因为ajax吗?
  2. 如何或在哪里可以使 commandLink 真正将我发送到 index.xhtml?

仅当登录页面中的视图过期时才会发生这种情况,在我的应用程序的其他页面中,它的效果非常好。

提前致谢 !

4

1 回答 1

1

如果我在登录页面,为什么会收到 ViewExpiredException?是因为ajax吗?

当您在会话中不再存在的视图上调用 POST 请求时,您将收到此异常。例如,当您将页面保持打开太久而导致会话在服务器端过期时,或者当您从浏览器缓存而不是直接从服务器获取登录页面时,就会发生这种情况。有关更多详细信息,另请参阅我们的ViewExpiredException标签信息页面。所有 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" />

也可以看看:

于 2011-11-28T16:06:52.970 回答