有没有办法(在 JSF 2 中)捕获会话超时并将用户重定向到新页面?当对话超时时,我得到了令人讨厌的 NullPointerExceptions。
我可以在所有 NPE 上重定向用户,但这似乎是一个太大的网络。
有没有办法(在 JSF 2 中)捕获会话超时并将用户重定向到新页面?当对话超时时,我得到了令人讨厌的 NullPointerExceptions。
我可以在所有 NPE 上重定向用户,但这似乎是一个太大的网络。
这是 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
我目前也在使用 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 相关的问题,该问题在处理对话时必须处理 -这里。