2. Plan prezentacji
1. Przedstawienie podstawowych pojęć.
2. Definiowanie przepływu przez XML.
3. Definiowanie przepływu przez kod Java.
www.proskar.pl 2 / 26
4. Czym jest Faces Flow?
• Faces Flow jest jedną z dostępnych
funkcjonalności technologii JavaServer Faces.
• Umożliwia hermetyzację powiązanych ze sobą
widoków.
• Jej działanie opiera się na tak zwanych
przepływach.
• Jedna aplikacja może zawierać w sobie wiele
przepływów.
www.proskar.pl 4 / 26
5. No dobrze… Ale czym jest ten cały
przepływ?
www.proskar.pl 5 / 26
6. Czym jest przepływ?
• Przepływ jest swoistym diagramem stanów
składającym się z grupy węzłów.
• Każdy z przepływów ma zdefiniowany punkt
wejścia i listę parametrów oraz może zwracać
więcej niż jedną wartość.
• Każdy przepływ ma wyłączny dostęp do
izolowanego zasięgu (flow scope).
www.proskar.pl 6 / 26
7. Skąd się wzięła potrzeba na Faces
Flow?
www.proskar.pl 7 / 26
8. Trochę historii
• Przed wprowadzeniem Faces Flow do
frameworka JSF programiści mieli dostępnych
kilka zasięgów widoku, których mogli użyć do
przechowywania wartości niezbędnych do
prawidłowej obsługi żądań:
– ApplicationScope,
– SessionScope,
– ViewScope ,
– RequestScope.
www.proskar.pl 8 / 26
9. ApplicationScope
Dane przechowywane w klasach o tym zasięgu
dostępne są cały czas dla wszystkich
użytkowników systemu. Nie można na bazie tego
zasięgu tworzyć obiektów do interakcji
indywidualnych, w których każdy użytkownik ma
w tym samym czasie dostęp do różnych
wartości.
www.proskar.pl 9 / 26
10. SessionScope
Zasięg ten pozwala na indywidualne podejście
do każdego użytkownika zwiększając
jednocześnie zapotrzebowanie na pamięć. Im
więcej obiektów sesyjnych i użytkowników, tym
większe zapotrzebowanie serwera na pamięć
oraz wolniejsze działanie aplikacji. Aby system
działał wydanie należy tworzyć jak najmniejszą
ilość obiektów o tym zasięgu dla każdego
użytkownika.
www.proskar.pl 10 / 26
11. ViewScope
Idealny zasięg obiektów potrzebnych tylko
w pewnym obszarze aplikacji, do którego
użytkownik nie zawsze się odnosi. Użycie tego
zasięgu nie obciąża serwera aplikacji tak, jak
nadmierne używanie zasięgu sesyjnego, jednak
zmusza programistę do tworzenia
wielofunkcyjnych widoków jeśli chce
maksymalnie wykorzystać ten zasięg.
www.proskar.pl 11 / 26
12. RequestScope
Zasięg dobry tylko do obsługi pojedynczego
żądania. Nie nadaje się do utrzymywania
konwersacji z użytkownikiem.
www.proskar.pl 12 / 26
13. Wniosek
• Przedstawione wcześniej zasięgi pozwalają
w większym stopniu na konwersacje
z użytkownikiem.
• Każdy z obranych zasięgów wiąże posiada
wady, które utrudniają prowadzenie
konwersacji z użytkownikiem.
www.proskar.pl 13 / 26
14. Co daje Faces Flow?
• Faces Flow wnosi do aplikacji nowy zasięg FacesScope
(zasięg przepływu), który łączy zalety zasięgu sesyjnego
(konwersacja przez wiele widoków) z zasięgiem widoku
(oszczędne używanie pamięci).
• Beany o zasięgu przepływu (FacesScoped) zostają
utworzone w chwili rozpoczęcia przepływu i zniszczone
w chwili opuszczenia go. Każdy z beanów o tym zasięgu
musi być przypisany do konkretnego przepływu (Flow)
poprzez wskazanie jego identyfikatora (każdy przepływ
identyfikowany jest poprzez unikalną nazwę).
www.proskar.pl 14 / 26
15. Co daje Faces Flow?
• Przepływy można definiować w plikach XML oraz przy
pomocy metod opatrzonych adnotacjami @Produces
i @FlowDefinition.
• Ponadto jeden użytkownik może przechodzić przez ten
sam przepływ wielokrotnie przy pomocy wielu kart.
• Każdy z tych przepływów działa niezależnie od siebie
nie kolidując ze sobą nawet jeśli używają beana
o zasięgu FacesScoped.
• Każdy z tych przepływów ma własną instancję tego
beana. Serwer rozróżnia je między sobą poprzez
identyfikator dodawany jako parametr adresu URL.
www.proskar.pl 15 / 26
16. Definiowanie przepływu przez XML
• Aby zdefiniować przepływ w ten sposób należy
w katalogu web utworzyć podkatalog o nazwie
nowego przepływu w którym znajdzie się plik o takiej
samej nazwie z rozszerzeniem xhtml oraz plik xml
o takiej samej nazwie co katalog z przyrostkiem „-
flow”.
www.proskar.pl 16 / 26
17. Definiowanie przepływu przez XML
• Aby podpiąć strony do przepływu, należy
umieszczać je w utworzonym wcześniej
podkatalogu. Dostęp do nich odbywa się
poprzez podanie ich nazwy (bez rozszerzenia)
czy to w polu action przycisków i linków
formularzy, czy jako wartość zwracana przez
funkcję. Każda z tych stron zostanie
automatycznie podpięta pod przepływ, dzięki
czemu nakład pracy jest minimalny.
www.proskar.pl 17 / 26
18. Definiowanie przepływu przez XML
• Każdy przepływ powinien mieć stronę
wyjściową. Domyślnie jest to strona
umieszczona w tym samym miejscu i o takiej
samej nazwie co katalog przepływu
z przyrostkiem „-return”. Inną stronę można
wskazać w pliku konfiguracyjnym przez tag
return:
www.proskar.pl 18 / 26
19. Przykład
• W przypadku tak zdefiniowanego przepływu
mamy do czynienia z przepływem o nazwie
authors oraz widokami:
– authors
– authors-details
– authors-form
– authors-delete
www.proskar.pl 19 / 26
20. Przykład
• Aby wejść do przepływu należy skorzystać
z przycisku/linku, który wskaże na widok
authors.
• W tej chwili zostaną powiązane do życia
wszystkie beany FlowScoped przypisane do
tego przepływu i pozostaną aktywne dopóki
wskazywany widok będzie jednym
z powyższych. Beany nie będą już dostępne
nawet na stronie wyjściowej.
www.proskar.pl 20 / 26
21. Definiowanie przepływu przez kod Java
• Oprócz podejścia xml, przepływy JSF można
definiować przy pomocy metod budujących
uruchamianych w chwili startu aplikacji.
• Każda taka metoda ma sygnaturę:
www.proskar.pl 21 / 26
22. Definiowanie przepływu przez kod Java
• W chwili uruchamiania aplikacji jej zawartość
przeszukiwana jest pod kątem tych metod
i jeśli jakaś zostanie znaleziona, następuje jej
wywołanie a jej wynik (obiekt definiujący
przepływ) utrwalony.
• Zdefiniowany przepływ oprócz identyfikatora
zawiera węzły (node).
www.proskar.pl 22 / 26
23. Typy węzłów przepływu
• View Node – węzeł bezpośrednio wskazujący
widok. Oprócz identyfikatora zawiera tylko
odnośnik do widoku.
www.proskar.pl 23 / 26
24. Typy węzłów przepływu
• Method Call Node – węzeł wywołujący funkcję.
Zawiera wyrażenie EL, które wywołuje wskazaną
w nim metodę. Jeśli metoda zwraca wynik,
traktowany jest on jako wskaźnik do widoku. Jeśli
metoda zwraca wartość null, bądź jest typu void,
Zostanie zwrócony widok/węzeł zdefiniowany jako
domyślny dla danego węzła.
www.proskar.pl 24 / 26
25. Typy węzłów przepływu
• Switch Node – węzeł decyzyjny, który pozwala
określić różne widoki w zależności od
określonych wyrażeń.
www.proskar.pl 25 / 26