SlideShare a Scribd company logo
1 of 26
Download to read offline
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

More Related Content

More from PROSKAR

Wysyłanie wiadomości email z użyciem serwera wildfly
Wysyłanie wiadomości email z użyciem serwera wildflyWysyłanie wiadomości email z użyciem serwera wildfly
Wysyłanie wiadomości email z użyciem serwera wildflyPROSKAR
 
Walidacja po stronie klienta za pomocą jquery oraz angular js
Walidacja po stronie klienta za pomocą jquery oraz angular jsWalidacja po stronie klienta za pomocą jquery oraz angular js
Walidacja po stronie klienta za pomocą jquery oraz angular jsPROSKAR
 
Tworzenie klienta web service za pomoca cxf
Tworzenie klienta web service za pomoca cxfTworzenie klienta web service za pomoca cxf
Tworzenie klienta web service za pomoca cxfPROSKAR
 
Testy integracyjne
Testy integracyjneTesty integracyjne
Testy integracyjnePROSKAR
 
Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalnePROSKAR
 
Środowisko android studio - podstawy
Środowisko android studio - podstawyŚrodowisko android studio - podstawy
Środowisko android studio - podstawyPROSKAR
 
Selenium
SeleniumSelenium
SeleniumPROSKAR
 
Primefaces - walidacja po stronie klienta
Primefaces - walidacja po stronie klientaPrimefaces - walidacja po stronie klienta
Primefaces - walidacja po stronie klientaPROSKAR
 
Logowanie przez facebook i gmail w java
Logowanie przez facebook i gmail w javaLogowanie przez facebook i gmail w java
Logowanie przez facebook i gmail w javaPROSKAR
 
JMS java messaging service
JMS java messaging serviceJMS java messaging service
JMS java messaging servicePROSKAR
 
Java authentication and authorization service
Java authentication and authorization serviceJava authentication and authorization service
Java authentication and authorization servicePROSKAR
 
Blokada wykonywania wielu akcji z jednego widoku
Blokada wykonywania wielu akcji z jednego widokuBlokada wykonywania wielu akcji z jednego widoku
Blokada wykonywania wielu akcji z jednego widokuPROSKAR
 

More from PROSKAR (12)

Wysyłanie wiadomości email z użyciem serwera wildfly
Wysyłanie wiadomości email z użyciem serwera wildflyWysyłanie wiadomości email z użyciem serwera wildfly
Wysyłanie wiadomości email z użyciem serwera wildfly
 
Walidacja po stronie klienta za pomocą jquery oraz angular js
Walidacja po stronie klienta za pomocą jquery oraz angular jsWalidacja po stronie klienta za pomocą jquery oraz angular js
Walidacja po stronie klienta za pomocą jquery oraz angular js
 
Tworzenie klienta web service za pomoca cxf
Tworzenie klienta web service za pomoca cxfTworzenie klienta web service za pomoca cxf
Tworzenie klienta web service za pomoca cxf
 
Testy integracyjne
Testy integracyjneTesty integracyjne
Testy integracyjne
 
Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalne
 
Środowisko android studio - podstawy
Środowisko android studio - podstawyŚrodowisko android studio - podstawy
Środowisko android studio - podstawy
 
Selenium
SeleniumSelenium
Selenium
 
Primefaces - walidacja po stronie klienta
Primefaces - walidacja po stronie klientaPrimefaces - walidacja po stronie klienta
Primefaces - walidacja po stronie klienta
 
Logowanie przez facebook i gmail w java
Logowanie przez facebook i gmail w javaLogowanie przez facebook i gmail w java
Logowanie przez facebook i gmail w java
 
JMS java messaging service
JMS java messaging serviceJMS java messaging service
JMS java messaging service
 
Java authentication and authorization service
Java authentication and authorization serviceJava authentication and authorization service
Java authentication and authorization service
 
Blokada wykonywania wielu akcji z jednego widoku
Blokada wykonywania wielu akcji z jednego widokuBlokada wykonywania wielu akcji z jednego widoku
Blokada wykonywania wielu akcji z jednego widoku
 

Flow scope w JSF

  • 1. www.proskar.pl Faces Flow w JSF Warsztaty PROSKAR www.proskar.pl
  • 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
  • 3. Trochę teorii na dobry początek www.proskar.pl 3 / 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