有没有办法(在JSF 2中)捕获对话超时并将用户重定向到新页面?当谈话超时时,我会收到令人讨厌的NullPointerExceptions。
我可以在所有NPE上重定向用户,但这似乎太大了。
答案 0 :(得分:2)
这是Weld 1.0.0的CDI RI的错误
https://jira.jboss.org/browse/WELD-550
这显然已在Weld主干中得到修复,我不知道它在哪个版本中可用。在trunk中,当尝试访问过期的会话时,会引发org.jboss.weld.context.NonexistentConversationException
异常。此异常可以使用自定义ExceptionHandler
进行捕获,并将用户重定向到适当的页面。有关创建自定义ExceptionHandler
的详细信息,请参阅此博客:
http://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2
答案 1 :(得分:0)
我目前也正在使用CDI对话并尝试构建基于对话的应用。我解决了大部分问题(没有任何有用的教程就不容易......)。也许我可以帮忙。
我的第一个问题是我没有重定向视图,并且在导航到Conversation-UseCase的下一页时将cid添加到GET。我在Weld Forum中提出了一个相关问题。 在那里我了解到,在我的托管/焊接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相关的问题,该问题在处理对话时必须处理 - here。