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