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