JavaServer Faces
Managed Beans
Zwykłe JavaBeans
Głównym elementem, na którym opiera się rozdział warstwy prezentacji od warstwy biznesowej
są Managed Beans. Od strony implementacyjnej są to zwykłe klasy JavaBeans, czyli zawierające
zestaw atrybutów i odpowiadających im metod get/set. Oprócz tego mogą zawierać również inne
metody. Nie muszą implementować żadnych interfejsów czy dziedziczyć po żadnych specyficznych
klasach.
Tworzenie obiektu, aktualizowanie atrybutów obiektu, utrzymywanie przy życiu w zależności
od określonego zasięgu (np. dla zasięgu session - przez cały czas trwania sesji klienta) to
zadania realizowane przez framework JSF, nie potrzeba tego dodatkowo oprogramowywać.
Konfiguracja Managed Beans - nazwa, zasięg, klasa, domyślne wartości
Aby instancja Managed Bean'a była osiągalna ze stron JSF, należy skonfigurować ją
w pliku konfiguracyjnym JSF faces-config.xml
w sekcji managed-bean
. W tym celu należy określić nazwę (managed-bean-name
),
klasę reprezentującą Bean'a (managed-bean-class) oraz
podać zasięg (managed-bean-scope
,
dopuszczalne wartości to request, session i application). Dodatkowo można podać wartości domyślne
(managed-bean-property
) tak dla typów prostych jak i dla złożonych (np. Listy, Mapy).
Dostęp do obiektów Managed Beans ze stron JSF - odczyt/zapis
Tworzenie obiektów Managed Beans związane jest z użyciem ich na stronie JSF. Nie trzeba dbać
w żaden sposób o to, żeby obiekt został utworzony, jeżeli zostanie użyty (poprzez odwołanie
do nazwy i atrybutu) np. w formularzu, to po wysłaniu formularza odpowiedni obiekt zostanie
utworzony a jego pola uzupełnione wartościami podanymi w formularzu, np.:
<h:inputText value="#{user.login}"/>
Po wysłaniu formularza zostanie odnaleziony w pliku konfiguracyjnym Managed Bean o nazwie user i
obiekt odpowiadającej mu klasy zostanie utworzony jeżeli dotąd nie istniał oraz uzupełniona
zostanie wartość atrybutu login. Jeżeli obiekt istniał wcześniej (bo np. miał zasięg session)
to przy wyświetleniu formularza jako domyślna wartość zostanie wpisana wartość z istniejącego
już obiektu. Metody get/set to pierwsze miejsce, w którym może być realizowana logika aplikacji,
np. zapis do bazy danych.
Dostęp do zapisu i odczytu z danego Managed Bean'a można kontrolować poprzez udostępnianie
metod get/set dla danego atrybutu. Nie ma obowiązku definiowania obu tych metod dla każdego
atrybutu.
Wywołanie metody przy wysłaniu formularza
Wywołanie innych metod z Managed Bean'a niż get/set w trakcie aktualizacji modelu jest możliwe
poprzez wskazanie ich jako akcji przy wysyłaniu formularza:
<h:commandButton value="Submit" action="#{question.checkAnswer}"/>
I podobnie jak poprzednio - zostanie odnaleziony obiekt odpowiadający nazwie question i z instancji
odpowiadającej mu klasy wywołana zostanie metoda checkAnswer()
. To drugie miejsce, które
jest stykiem między warstwą prezentacji a logiką. Metoda po wykonaniu swojego zadania powinna zwrócić
stronę JSF, do której należy przejść po zakończeniu działania.
Dostęp do klasycznych obiektów HTTP
Framework JSF stara się wyręczyć programistę w operacjach na "klasycznych" obiektach HTTP
takich jak HttpServletRequest czy HttpSession, niemniej czasem może pojawić sie potrzeba
skorzystania z tych obiektów. JSF daje taką możliwość przez użycie obiektu FacesContext:
FacesContext faces = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) faces.getExternalContext().getRequest();
JavaServer Faces