Upload
proskar
View
280
Download
0
Embed Size (px)
Citation preview
Plan
1. Wstęp
2. Przykładowa aplikacja
3. Przykładowe znaczniki JSF HTML
4. Przykładowe znaczniki JSF Validator
5. Inne znaczniki
6. Zasięg komponentów zarządzanych
7. Podsumowanie
www.proskar.pl 2/41
Wstęp
• Czym jest JSF?
– Framework przeznaczony do implementacji
warstwy widoku aplikacji WWW
– Ułatwiający tworzenie interfejsów
graficznych
– Część standardu JEE
– Korzysta z architektury MVC
www.proskar.pl 3/41
• Udostępnia szereg komponentów graficznych
– Tabele
– Formularze • Pola tekstowe
• Przyciski
• Listy rozwijane
– Panele
– Komponenty obsługujące wyskakujące wiadomości
www.proskar.pl 4/41
• Komponenty zarządzane – Klasy sterujące widokiem
– Powinny wywoływać metody znajdujące się w logice biznesowej aplikacji
– Dwa sposoby tworzenia komponentów • @ManagedBean – przestarzały
• @Named
– Sposoby wstrzykiwania komponentów • @ManagedProperty - przestarzały
• @Inject
www.proskar.pl 5/41
• Cykl życia aplikacji
Żądanie
Przywrócenie
widoku
Zastosowanie
wartości żądania
Weryfikacja
danych
Wizualizacja
odpowiedzi
Wywołanie
aplikacji
Aktualizacja
wartości
modelu
Odpowiedź
Brak danych
zapytania
Błąd weryfikacji lub konwersji/wizualizacja odpowiedzi
www.proskar.pl 7/41
Przykładowa aplikacja
• Problem – Aplikacja dodająca nowe zamówienie do systemu
– Użytkownik ma mieć możliwość dodania nowego zamówienia, podając dane:
• Nazwa zamówienia
• Numer zamówienia
– Po podaniu danych, użytkownik ma mieć możliwość sprawdzenia wprowadzanych danych
– Gdy użytkownik zatwierdzi transakcje, musi zostać wyświetlona informacja o wyniku operacji
www.proskar.pl 8/41
Tworzenie projektu
– File > New Project > Maven > Web Application
– Properties > Frameworks > Add > JavaServer
Faces > OK.
– Build
www.proskar.pl 11/41
Implementacja logiki aplikacji
– New > Java Class
– Implementuje interfejs Serializable
– Adnotacje
• Named – metadana mówiąca, że dana klasa jest
komponentem zarządzanym
• RequestScoped – zasięg komponentu (tym później)
www.proskar.pl 12/41
– Pola klasy
• String name – nazwa zamówienia
– Opatrzona adnotacją @ManagedProperty("#{param.name}")
• Long number – numer zamówienia
– Opatrzona adnotacją @ManagedProperty("#{param.number}")
– Metody
• Proceed – przeniesie użytkownika do strony zatwierdzającej
dana operacje
• AddOrder – metoda dodająca nowe zamówienie i
przenosząca użytkownika na strone informującą o sukcesie
• GetXXX / SetXXX
www.proskar.pl 13/41
• Adnotacja @ManagedProperty
– Adnotacja wstrzykująca obiekty takie jak
• Instancje klas zarządzanych opatrzonych adnotacja @ManagedBean
– Adnotacja @ManagedBean jest przestarzała, zamiast niej powinno się używać adnotacji @Named (adnotacja @ManagedProperty nie zadziała z komponentami @Named)
• Wartości parametrów żądań HTTP – Użyteczna tylko gdy komponent zarządzany jest zasięgu
żądania. W pozostałych przypadkach parametry należy pobierać z kontekstu (FacesContext).
www.proskar.pl 15/41
Implementacja widoków
– Jakie strony potrzebujemy?
• Stronę z formularzem dodawania
• Stronę prezentująca dane przed zapisem
• Stronę informującą o wyniku zapisu
– New > XHTML
• addOrder.xhtml
• proceed.xhtml
• success.xhtml
www.proskar.pl 16/41
• Reguły nawigacji
– Umożliwiają rozpoznawanie ścieżki do strony
za pomocą unikalnej nazwy
– Konfigurowane w pliku faces-config.xml
– Ułatwiają wybór stron na którą ma zostać
przeniesiony użytkownik
www.proskar.pl 17/41
• Schemat działania aplikacji
addOrder.xhtml proceed.xhtml success.xhtml
AddOrderBean.java
www.proskar.pl 22/41
Przykłady znaczników JSF HTML
• h:inputText – renderuje element html – input.
• h:inputSecret – renderuje element html – input z argumentem „password”
www.proskar.pl 23/41
• h:SelectOneListBox – generuje liste umożliwiającą wybór pojedynczego elementu
– Value – pole do którego ma zostać przypisana wybrana wartość
– Wewnątrz tego tagu definiuje się elementy do wyboru za pomocą znacznika f:selectItem
www.proskar.pl 25/41
• h:dataTable – znacznik generujący tabele i wypełniający je danymi
– Value – kolekcja danych którymi ma zostać wypełniona tabela
– Var – nazwa która definiować będzie kolejne elementy z kolekcji
www.proskar.pl 26/41
• Przyciski i łącza
– h:commandButton - znacznik renderujący przycisk który po wciśnięciu generuje zapytanie POST. Wywołuje wskazaną logikę znajdującą się w komponentach zarządzanych.
– h:commandLink – znacznik renderujący link który po wciśnięciu generuje zapytanie POST. Wywołuje wskazaną logikę znajdującą się w komponentach zarządzanych.
www.proskar.pl 27/41
– h:button – znacznik renderujący przycisk który po wciśnięciu generuje zapytanie GET
– h:link – znacznik renderujący link który po wciśnięciu generuje zapytanie GET
– h:outputLink – przenosi na wskazana stronę bez wywołania do frameworku JSF
www.proskar.pl 28/41
Przykłady znaczników JSF Validator
• f:validateLength – waliduje długość ciągu
znakowego
• f:validateLongRange – waliduje zasięg
wartości typu Long
www.proskar.pl 30/41
www.proskar.pl 31/41
• f:validateDoubleRange - waliduje zasięg wartości typu Double
• f:validateRegex – sprawdza czy podana wartość spełnia wymagania nałożone przez regex
• f:validateDoubleRange - waliduje zasięg wartości typu Double
• f:validateRegex – sprawdza czy podana wartość spełnia wymagania nałożone przez regex
• f:validateDoubleRange - waliduje zasięg wartości typu Double
• f:validateRegex – sprawdza czy podana wartość spełnia wymagania nałożone przez regex
Inne znaczniki
• ui:repeat – używany zamiast znaczników
c:forEach lub h:dataTable
www.proskar.pl 32/41
• f:ajax – umożliwia wykonywanie zapytań ajax
– Execute – lista komponentów wykonywanych
podczas przetwarzania zapytania
– Render – lista komponentów wizualizowanych przez
implementacje JSF po zwróceniu odpowiedzi
www.proskar.pl 33/41
Zasięg komponentów
zarządzanych
• Zasięg sesji – session scoped
– Instancja klasy istnieje w systemie przez czas
wygaśnięcia sesji
– Długość sesji można zmieniać w pliku
web.xml
– @SessionScoped
www.proskar.pl 34/41
• Zasięg żądania – request scoped
– Instancja klasy istnieje w systemie tylko na
czas obsługiwania żądania
– Usuwany z pamięci z momentem wysłania
odpowiedzi
– @RequestScoped
www.proskar.pl 35/41
• Zasieg aplikacji – application scoped
– Instancja klasy istnieje w systemie przez cały
czas działania aplikacji
– Dostępny z poziomów wszystkich
egzemplarzy aplikacji
– @ApplicationScoped
www.proskar.pl 36/41
• Zasięg konwersacji – conversaction
scoped
– Obejmuje zbiór wzajemnie powiązanych stron
– Jest elementem standardu CDI a nie JSF
– @ConversationScoped
www.proskar.pl 37/41
• Zasięg widoku – view scoped
– Instancja klasy utrzymywana w czasie
ponownego wyświetlania strony
– @ViewScoped
www.proskar.pl 38/41
• Zasięg przepływu – flow scoped
– Instancja klasy utrzymywana tylko w
przepływie
– Przepływem może być np. proces tworzenia
przelewu bankowego
– @FlowScoped
• Value – nazwa wcześniej skonfigurowanego
przepływu
www.proskar.pl 39/41
Podsumowanie
• Z JSF wszystko jest łatwiejsze!
– Nawigacja pomiędzy stronami
– Tworzenie własnych rozszerzeń
• Za warstwę kontrolera w architekturze
(MVC), nie jest odpowiedzialny
programista
• Wsparcie dla tłumaczenia zawartości
strony
www.proskar.pl 40/41