Przekierowania stron za pomocą pages.xml

Krzysztof Jagielski
20.08.2015

W Seamie jest możliwa nawigacja oraz przekierowanie stron ustalane za pomocą wpisów w pliku pages.xml lub *.page.xml (gdzie zamiast gwiazdki jest nazwa strony xhtml bez rozszerzenia). W niniejszym dokumencie opisuję wyłącznie przekierowania, zostawiając omówienie pozostałych możliwości oferowanych przez pages.xml na inną okazję.

Przekierowywać można za pomocą dwóch tagów:

1. Tag , czyli przekierowanie.

To najbardziej oczywisty tag. Jako atrybut ma view-id, który musi wskazywać na plik xhtml wraz z ewentualną ścieżką, ponadto zawsze musi się zaczynać od /.

Przykład z strony logowania nazwanej /login.xhtml:


...
 
   
     
   

 

...

Opiszmy ten przykład szczegółowo.

W pierwszym wierszu mamy deklarację nawigacji, która wejdzie w życie tylko jeśli została wykonana metoda login() klasy zidentyfikowanej jako identity. Zauważ, że ta deklaracja będzie rozpatrywana zarówno przy udanej, jak i nieudanej próbie zalogowania. Liczy się sam fakt wywołania metody.

W drugim wierszu mamy zasadę. Zostanie ona spełniona tylko jeśli jesteś zalogowany. Oznacza to, że nieudana próba zalogowania zostanie zignorowana.

W trzecim wierszu wreszcie mamy samo przekierowanie do strony /home.xhtml. Biorąc wszystko pod uwagę, przekierowanie odbędzie się jedynie, gdy udało ci się zalogować.

Ważna uwaga na koniec: nawigacja zostanie wykonana tylko przy wychodzeniu z danej strony! Oznacza to, że nie będzie działać, jeśli wszedłeś na stronę skądś indziej lub wpisałeś stronę bezpośrednio w pasku adresu przeglądarki. Na szczęście istnieje sposób na obejście tego ograniczenia - tag .

2. Tag , czyli akcja.

Ten tag, prócz innych rzeczy, umożliwia przekierowanie strony, na którą dopiero co wszedłeś. Za pomocą atrybutu if określasz warunek zajścia akcji, a w execute określasz, co ma się zdarzyć. Sztuczka polega na tym, że atrybut execute obsługuje nie tylko wywołanie metod jakiegoś ziarna za pomocą języka EL, ale także bezpośrednio przekierowanie na stronę! Akcje musisz zdefiniować przed nawigacją.

Poniższy przykład pokazuje, jak możesz wyrzucać na stronę główną /home.xhtml użytkownika, który usiłuje wejść na stronę logowania /login.xhtml, a zarazem już jest zalogowany.


 
...

Uwaga: próba wykonania przekierowania na tę samą stronę (przekierowanie na samego siebie) skończy się bardzo nieciekawie.

Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie