2

有没有办法(在 JSF 2 中)捕获会话超时并将用户重定向到新页面?当对话超时时,我得到了令人讨厌的 NullPointerExceptions。

我可以在所有 NPE 上重定向用户,但这似乎是一个太大的网络。

4

2 回答 2

2

这是 Weld 1.0.0 CDI 的 RI 的错误

https://jira.jboss.org/browse/WELD-550

这显然已在 Weld 后备箱中修复,我不知道它在哪个版本中可用。在中继中,org.jboss.weld.context.NonexistentConversationException尝试访问过期对话时会引发异常。可以使用自定义捕获此异常ExceptionHandler,并将用户重定向到适当的页面。有关创建自定义的更多详细信息,请参阅此博客ExceptionHandler

http://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2

于 2010-06-10T14:53:48.543 回答
0

我目前也在使用 CDI 对话并尝试构建基于对话的应用程序。我解决了大部分问题(没有任何有用的教程并不容易......)。也许我可以帮忙。

我的第一个问题是导航到对话用例的下一页时,我没有重定向视图并将 cid 添加到 GET。我在焊接论坛上问了一个相关问题。在那里我了解到,在我的托管/焊接 bean 中,我必须重定向到下一页并将 cid 添加为 GET 参数。只有这样,您才能在下一页上访问 bean 的对话范围的元素。

因此,当我进入对话的第一页时,我在我的 ConversationScoped-Bean 中调用了一个启动方法(例如,通过 commandLink),如下所示:

public String startRegister() {
  if (conversation.isTransient)
    conversation.begin();
  return "register_start?faces-redirect=true&includeViewParams=true&cid=" + conversation.getId()
}

这能解决你的问题吗?我还在 StackOverflow 上提出了一个与 ViewExpiredException 相关的问题,该问题在处理对话时必须处理 -这里

于 2010-06-09T22:29:07.127 回答