JavaServer Faces

Nawigacja w aplikacji
Konfiguracja nawigacji
Konfiguracja nawigacji zawarta jest w sekcjach navigation-rule pliku faces-config.xml. W ramach reguły nawigacyjnej można określić skąd nastąpiło wywołanie (from-view-id), oraz należy określić przypadki nawigacyjne (navigation-case), czyli możliwe cele nawigacji w postaci nazwy (from-outcome), za pomocą której można wskazywać przypadek nawigacyjny na stronie JSF lub w Managed Bean'ie, oraz strony docelowej (to-view-id). Warto zwrócić uwagę, że wskazywane są konkretne strony wraz z ich położeniem w aplikacji (czyli np. /index.jsp a nie index.faces).

Nawigacja statyczna
Najprostszym wariantem jest nawigacja statyczna. Przy wysyłaniu formularza jako akcja podawana jest wartość elementu from-outcome:

<h:commandButton value="Submit" action="login"/>

<from-outcome>login</from-outcome>
<to-view-id>/welcome.jsp</to-view-id>


Po zaktualizowaniu modelu sterowanie przekazane jest do wskazanej tam strony.

Globalne reguły nawigacyjne
W przypadku braku elementu from-view-id reguła nawigacyjna staje się regułą globalną, czyli można z niej skorzystać w dowolnym widoku. Nie jest dobra praktyką stosowanie zbyt wielu globalnych reguł nawigacyjnych.

Zbieranie przypadków nawigacyjnych w jedną regułę
Jeżeli z jednego widoku może być kilka wariantów nawigacji, to można je zebrać w jedną regułę nawigacyjną, wypisując kolejno sekcje navigation-case.

Nawigacja dynamiczna
W przypadkach kiedy dalsza nawigacja zależy od wyniku przetwarzania danych z formularza, należy zastosować nawigację dynamiczną. Przy wysyłaniu formularza jako akcję należy wskazać metodę Managed Bean'a, która określi dalszy kierunek nawigacji:

<h:commandButton value="Check" action="#{question.checkAnswer}">


W tym przypadku zostanie wywołana metoda checkAnswer() z Bean'a skonfigurowanego pod nazwa question. Metoda musi zwrócić kierunek nawigacji w postaci nazwy, która znajduje się w elemencie from-outcome odpowiedniej reguły nawigacyjnej:

public String checkAnswer() {
if (answer.equals("ok")) {
return "correct";
} else {
return "wrong";
}
}


Warto zwrócić uwagę, że wywołanie tej metody następuje już po aktualizacji modelu, zatem w odpowiednich atrybutach klasy są wartości podane przez użytkownika w formularzu i na tej podstawie można decydować o dalszej nawigacji.

Wildcardy we from-view-id
W elementach from-view-id można zastosować * w celu wskazania zestawu widoków, których dotyczą reguły nawigacyjne w tej sekcji. Podobnie jak z regułami globalnymi nie należy przesadzać ze stosowaniem tej metody.

JavaServer Faces