JSF to przydatna technologia, ale można na niej powiesić.
Wygląda na to, że albo nadmuchujesz rozmiar stanu widoku (ustawiając duże wartości na komponentach), albo przenosisz odniesienia do komponentów do innego stanu sesji (co byłoby złe). Innym potencjalnym winowajcą byłby zbyt duży widok (widziałem łatwość, z jaką ludzie mogą budować drzewa interfejsu użytkownika, prowadzą do bardzo dużych wykresów kontrolnych z tabelami danych wszędzie). Wiem, że IBM zapewnia rozbudowane mechanizmy kontroli tekstu i arkuszy kalkulacyjnych - nie mogę komentować, jaki wpływ będzie miało ich wykorzystanie na wielkość państwa.
Niskie wiszące owoce to sprawdzanie zarządzanych ziaren skonfigurowanych dla zakresu sesji w faces-config.xml.
JSF zapisuje dwie rzeczy między żądaniami:
- widok (wszystkie elementy sterujące na stronie)
- stan widok (stan kontroli)
Są one rozdzielone, ponieważ niektóre kontrolki, na przykład dzieci tabeli danych, mogą mieć wiele stanów (po jednym dla każdego wiersza). Stan można zapisać na ukrytym polu w formularzu (który, jeśli nieszyfrowany, może stanowić duże zagrożenie bezpieczeństwa) lub w sesji. Aby uwzględnić wiele okien przeglądarki współużytkujących tę samą sesję (oraz, w niektórych implementacjach, obsługę przycisku Wstecz), zapisanych jest wiele widoków.
- Powinna istnieć opcja konfiguracji do ustawiania liczby stanów wyświetlania, które aplikacja będzie przechowywać w sesji dla danego użytkownika w danym momencie.
- Możesz zmierzyć rozmiar stanu widoku, podając StateManager, który mierzy rozmiar zapisanego widoku/stanu (skonfiguruj StateManager w faces-config.xml z publicznym konstruktorem, który pobiera StateManager - więcej informacji na ten temat można znaleźć w plikach PDF: JSF spec; stan można przekształcić do postaci szeregowej, a jego rozmiar można sprawdzić, przesyłając go do strumienia).
Większość aplikacji JSF zbudowanych przez IDE ma backing beans. Byłoby możliwe, aby zakres komponentu bean sesji utrzymywał stan dłuższy, niż chcesz, kładąc nacisk na sesję. Ponieważ na jednej stronie znajduje się jeden komponent bean, im więcej stron, tym większy problem. Sprawdź swoje faces-config.xml, aby sprawdzić, czy jest to potencjalne źródło problemów.
Coś innego, co możesz zrobić, to skonfigurować HttpSessionAttributeListener w swoim web.xml. Możesz uzyskać stack trace, aby pomóc zidentyfikować obszary problemowe w aplikacji.
tylko osobista opinia, ale myślę, że wadą jest IBM, a także ich implementacja JSF. Nie mogę usprawiedliwić swoich uczuć :) – guyumu
Ten, który widziałem, nie używał Sun JVM i implementacji Apache JSF. Apache jest silnie IBM, więc nie mogę powiedzieć, jak te dwie są różne. Myślę, że to model JSF - wydaje mi się bardzo ciężki. – duffymo