podstawy java server faces
Post on 15-Aug-2015
278 Views
Preview:
TRANSCRIPT
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
top related