CDI超时导致NPE

时间:2010-06-05 04:51:46

标签: jsf jsf-2 cdi jboss-weld

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

我可以在所有NPE上重定向用户,但这似乎太大了。

2 个答案:

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