2011-06-21 10 views
5

W pierwszych dniach korzystania z CDI, przechodzę do strony z długą prowadzoną rozmową aktywną za pomocą face-redirect = true, więc mam adres URL, taki jak ..myPage.xhtml? Cid = 1.CDI/Weld - jak obsługiwać odświeżanie strony przeglądarki po zakończeniu konwersacji?

W pewnym momencie kończę rozmowę, mam na myśli, że to jest rozsądna rzecz, aby zrobić , czy równie dobrze możesz użyć zakresu sesji? W każdym razie kończę konwersację, a następnie użytkownik uderza w F5, a następnie oczywiście powoduje błąd "nie znaleziono rozmowy", ponieważ cid = 1 nie istnieje.

Czy ktoś może zaproponować, jak obejść ten problem? Używam implementacji ViewScoped w wersji Steven Verborgh i po prostu używam komponentu bean o rozmiarze, aby przekazać parametry między stronami parametrami . Mam więc na przykład 2 fasolki @ViewScoped, z których każda jest odwrotna strona 1 & 2. I @Inject @ConversationScoped ParameterBean do obu fasoli zakresu widoku. Rozpoczęto konwersację (parameterBean.getConversation(). Begin()) w metodzie akcji wywoływanej ze strony strona 1. W zdarzeniu preRenderView dla strony 2 biorę odwołanie do właściwości parametruBean do komponentu bean strony 2 Zmienna instancji i zakończ rozmowę, wykonała swoją pracę i nie jest już wymagana.

Z wyjątkiem problemu F5 działa dobrze. Jeśli ktoś ma jakieś sugestie, to byłbym wdzięczny, mam nadzieję, że nie brakuje mi czegoś naprawdę oczywistego. Zakładam, że nie ma możliwości uzyskania z dala od przekierowania.

Dzięki.

Odpowiedz

4

Nie ma rozwiązania tego problemu. Domyślnie @ConversationScoped jest kompletnie zepsuty. Używam zamiast tego @ConversationScoped z MyFaces CODI. Rozwiązuje wszystkie problemy, które można uzyskać za pomocą standardowego zakresu.

Powiązane problemy