Тайм-аут CDI приводит к NPE - PullRequest
2 голосов
/ 05 июня 2010

Есть ли способ (в JSF 2) отловить тайм-аут разговора и перенаправить пользователя на новую страницу? Когда время разговора истекает, появляются неприятные исключения NullPointerException.

Я мог бы перенаправить пользователя на все NPE, но это кажется слишком большой сетью.

Ответы [ 2 ]

2 голосов
/ 10 июня 2010

Это ошибка с Weld 1.0.0 RI для CDI

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

Это, по-видимому, было исправлено в соединительной магистрали, я не знаю, в каком выпуске он доступен. В транке возникает исключение org.jboss.weld.context.NonexistentConversationException при попытке получить доступ к сеансу с истекшим сроком действия. Это исключение можно перехватить с помощью пользовательского ExceptionHandler и перенаправить пользователя на соответствующую страницу. Смотрите этот блог для получения более подробной информации о создании пользовательских ExceptionHandler:

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

0 голосов
/ 10 июня 2010

В настоящее время я также работаю с CDI-разговорами и пытаюсь создать приложение на основе разговоров. Я решил большинство проблем (не легко без какого-либо полезного учебника там ...). Может быть, я могу помочь.

Моя первая проблема заключалась в том, что я не перенаправил представление и не добавил cid в GET при переходе на следующую страницу Conversation-UseCase. Я задал соответствующий вопрос на форуме Weld . Там я узнал, что в моем управляемом / сварочном бине мне нужно перенаправить на следующую страницу и добавить cid в качестве GET-параметра. Только после этого вы сможете получить доступ к элементам вашего компонента в рамках беседы на следующей странице.

Поэтому, когда я вхожу на первую страницу моего разговора, я вызываю метод start (например, с помощью commandLink) в моем ConversationScoped-Bean, например:

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

Решает ли это вашу проблему? Я также задал вопрос в StackOverflow, связанный с ViewExpiredException, который должен обрабатываться при работе с беседами - здесь .

...