Тайм-аут 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, который должен обрабатываться при работе с беседами - здесь.