Model nawigacyjny JSF pozwala na zdefiniowanie nawigacji pomiędzy stronami oraz na wykonywania dodatkowych akcji związanych z przechodzeniem pomiędzy stronami. W terminologii JSF nawigacją jest nazywany zestaw reguł, za pomocą których można stwierdzić jaka następna strona ma zostać wyświetlona po wybraniu jakieś przycisku bądź linku znajdującego się na stronie. Reguły te są zdefiniowane w pliku konfiguracyjnym faces-config.xml
.
Jak zdefiniować regułę nawigacyjną?
Zdefiniowanie prostej nawigacji pomiędzy stronami sprowadza się do:
- zdefiniowaniu odpowiednich reguł w pliku konfiguracyjnym
faces-config.xml
- odwołanie się do poprzez zdefiniowany ciąg znaków z poziomu przycisku lub linku
Przykładowy zapis w pliku konfiguracyjnym:
<from-view-id>/login.jsp</from-view-id>
<navigation-case>
<from-outcome>sukces</from-outcome>
<to-view-id>/home.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>błąd</from-outcome>
<to-view-id>/login.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Aby wykorzystać podany zapis, należy w następujący sposób zbudować link lub przycisk (w pliku login.jsp
):
value="Submit" />
W pliku konfiguracyjnym faces-config.xml
definiujemy zasady nawigacji. Czyli:
navigation-rule
– definicja reguły nawigacyjnejfrom-view-id
– informacja, jakiej strony dotyczą regułynavigation-case
– definicje wszystkich reguł, jakie mają mieć zastosowanie dla danej stronyfrom-outcome
– definicja ciągu znakowego, który będzie użyty do rozpoznania danego przypadku nawigacyjnego, czyli przekirowania na podaną stronę, ciąg ten musi się „znaleźć” w atrybucieaction
, podany albo bezpośrednio, lub też zwrócony przez jakąś metodęto-view-id
– na jaką stronę przekierować przeglądarkę
Natomiast w pliku login.jsp
definiujemy odpowiedni interfejs użytkownika (klikalny, czyli przycisk bądź link). Tam w jako parametr dla atrybutu action
wprowadzamy zdefiniowany ciąg znaków, lub też wywołujemy jakąś metodę, która zwróci dany ciąg znaków (zdefiniowany w pliku konfiguracyjnym), co umożliwi odpowiednie przekierowanie w zależności od akcji.
I tak:
value="Submit" />
Metoda login
zwraca ciąg znaków sukces
w przypadku powodzenia podczas logowania. Nastąpi wtedy wykonanie reguły nawigacyjnej tak oznaczonej, i przekierowanie do strony ]home.jsp
. Natomiast jeżeli uwierzytelnienie użytkownika nie powiedzie się, metoda ta zwraca ciąg znaków błąd
, co spowoduje przekierowanie z powrotem do strony logowania.
Można także zdefiniować globalne przekierowania na daną stronę:
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>loguj</from-outcome>
<to-view-id>/login.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Czyli niezależnie na jakiej stronie zostanie użyty w ciąg znaków loguj
w atrybucie action
, to zawsze nastąpi przekierowanie na stronę logowania.
Co się dzieje po wybraniu linka w przeglądarce?
W momencie, gdy użytkownik kliknie na przycisk lub też link, dany komponent generuje odpowiednie zdarzenie, którym informuje o tym fakcie. Zdarzenie to jest obsługiwane domyślną implementację interfejsu ActionListener
, który wywołuje odpowiednią metodę z akcją zdefiniowaną w komponencie. Podana metoda wykonuje się i zwraca ciąg znaków, który zostanie użyty do podjęcia decyzji o nawigacji.
Zwrócony ciąg znaków jest przekazywany do domyślnej implementacji NavigationHandler
, która bazując na tej wartości sprawdza, jaka strona powinna zostać wyświetlona.
Jeżeli uda się odnaleźć odpowiednią regułę nawigacyjną, rozpocznie się faza tworzenia docelowej strony HTML.