Jaki problem jest: Co się dzieje po kliknięciu przycisku Wstecz w przeglądarce -> otwiera stronę, której viewscoped-managedbean jest już zniszczona -> złożyć wniosek od CommandButton tym strona z zaznaczonymi rekordami siatki?przeglądarka powrotem + viewscope fasola
czego oczekuję: Związane viewscope-managebean jest utworzony ponownie odbiera Siatka-record-wybory, i radzić sobie z nimi, jeśli przeglądarka przycisk wstecz nie jest zaangażowany.
Co mogę doznać:: Związany widok-zarządzenie nie jest ponownie tworzony, nie otrzymuje wyboru rekordów siatki. Musisz ponownie wprowadzić adres URL lub F5 po kliknięciu przycisku wstecz, aby ponownie działał poprawnie.
Więc oto scenariusz sukces, wszystkie ziarna są viewscoped fasola:
- GET page1.xhtml -> page1Bean tworzone, pobierania danych, etc w @PostConstruct
- check/zaznaczyć kilka rekordów z przycisk datatable, kliknij przycisk procesu
- page1 Metoda procesowa Bean przechowuje wybrane rekordy w obiekcie flash i przekierowuje do strony page2.xhtml
- page1Bean destroyed, page2Bean created and in preRenderView Metoda słuchacz, pobiera wybrane rekordy od obiektu flash i radzić sobie z nimi
- kliknij „przejdź do strony głównej” CommandButton przekierować do page1.xhtml i page2Bean zniszczone, page1Bean utworzony ponownie
- pętli z nr 2 - 5 jest nadal wykonalne
teraz to errornous scenariusz udziałem przeglądarkę przycisku wstecz (różne smary dzieje począwszy od # 6):
- GET page1.xhtml -> page1Bean utworzony, zapytanie o dat a, etc w @PostConstruct
- check/zaznaczyć kilka rekordów z DataTable, kliknij przycisk procesowego
- metoda proces page1Bean w sklepach wybrane rekordy obiektu Flash i przekierowanie do page2.xhtml
- page1Bean zniszczone, page2Bean stworzył, aw metody detektora preRenderView, pobiera wybrane rekordy z obiektu flash, oraz radzenia sobie z nimi
- kliknij przeglądarkę wstecz page2Bean nie jest zniszczony, page1Bean nie jest tworzony
- czek/zaznaczyć kilka rekordów z przycisk datatable, kliknij przycisk procesu
- the page1Bean method wykonuje (dziwne, ponieważ strona1Bean powinna była zostać zniszczona), ale nie może zobaczyć dokonanych wyborów rekordów i przekierować na stronę2.xhtml
- page1Bean nie jest zniszczona (bez wyjścia logowania), page2Bean nie jest tworzony (ponieważ nie został zniszczony), wykonuje słuchacza preRenderView jak zwykle, ale tym razem nie wybrano zapisy w obiekcie typu flash
Czy możliwe jest normalne doświadczenie (jak bez przycisku wstecz przeglądarki) z widokami-fasolki z przyciskiem wstecz przeglądarki?
Oto moja zależność:
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.1.3</version>
<scope>compile</scope>
</dependency>
Proszę podzielić się swoimi pomysłami!
dziękuję za przykład źródła :) próbowałem zmienić metodę oszczędzania stanu na klienta, trochę wkurzyłem się, muszę zmienić wiele fasoli i fasoli domeny w serializowalne. więc wypróbowałem filtr i działało świetnie! chociaż z odrobiną obaw z tym artykułem tutaj: http://turbomanage.wordpress.com/2006/08/08/disable-browser-caching-in-jsf/, który stwierdza, że to nie jest zagwarantowane. Ale z mojego doświadczenia wynika, że działa bardzo dobrze. – bertie
Wykonanie tego w 'PhaseListener' jest niezgrabne. Co do gwarancji, cóż, ma rację, ale wszystkie nowoczesne przeglądarki (IE, FF, GC, AS, O, itp.) Szanują zasady buforowania HTTP poprawnie. Prawdopodobnie zawiedzie tylko wtedy, gdy klient użyje jakiejś wątpliwej przeglądarki. – BalusC
Ale jest jedna rzecz, gdy po kliknięciu przycisku wstecz przeglądarki, pola wyboru wewnątrz p: datatable, które zostały wybrane, są nadal sprawdzane, ale po ich przesłaniu nie są sprawdzane. Dzieje się tak w Google Chrome 15, ale nie w Firefox 5.0.1. Myślę, że jest to ta sama sytuacja: http://stackoverflow.com/questions/6100741/how-to-prevent-browsers- from-remembering-checkbox-state. Chcę spróbować użyć losowych nazw formularzy, jak podano w rozwiązaniu , ale nie jestem pewien, jak odświeżyć inny formularz wewnątrz formularza na stronie z wieloma formularzami, jeśli nie znam nazw zewnętrznej formy. – bertie