Flow scope w JSF

26
www.proskar.pl Faces Flow w JSF Warsztaty PROSKAR www.proskar.pl

Transcript of Flow scope w JSF

www.proskar.pl

Faces Flow w JSF

Warsztaty PROSKAR

www.proskar.pl

Plan prezentacji

1. Przedstawienie podstawowych pojęć.

2. Definiowanie przepływu przez XML.

3. Definiowanie przepływu przez kod Java.

www.proskar.pl 2 / 26

Trochę teorii na dobry początek

www.proskar.pl 3 / 26

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

No dobrze… Ale czym jest ten cały przepływ?

www.proskar.pl 5 / 26

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

Skąd się wzięła potrzeba na Faces Flow?

www.proskar.pl 7 / 26

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

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

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

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

RequestScope

Zasięg dobry tylko do obsługi pojedynczego żądania. Nie nadaje się do utrzymywania konwersacji z użytkownikiem.

www.proskar.pl 12 / 26

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

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

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

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

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

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

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

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

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

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

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

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

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

Dziękuję za uwagę

www.proskar.pl 26 / 26