Тайм-аут CDI приводит к NPE

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

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

2 ответа

Решение

Это ошибка с 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

Я также в настоящее время работаю с 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()
}

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

Другие вопросы по тегам