Czym jest JSF?

JSF w bardzo dużym stopniu pomaga deweloperom tworzyć wizualną warstwę aplikacji webowych opartych o JavaEE

JSF, czyli Java Server Faces jest powszechnie używanym frameworkiem o szerokiej funkcjonalności. Jego potencjał jest wykorzystywany do budowania aplikacji, których integralną częścią są żlożone intefejsy użytkownika. JSF bardzo często jest kojarzony ze wzorcem projektowym Dependency Injection, a to dlatego, że połączenie komponentów JSF z JavaBeans sprawia, że przepływ danych w aplikacji staje się bardziej zautomatyzowany i elastyczny, co w dużym stopniu odciąża deweloperów od zbędnego pisania dodatkowego kodu. Dodatkowo wbudowane wsparcie dla dostępu do bazy danych oraz takich technologii jak HTML i JavaScript sprawia, że JSF staję się bardzo atrakcyjnym narzędziem, którego nie sposób wypróbować.

Zalety JSF

ELASTYCZNOŚĆ

JSF bez problemu poradzi sobie z interpretacją kodu HTML oraz JavaScript, dodatkowo oferuje wsparcie dla AJAX(Asynchronous JavaScript and XML), które pozwoli nam na wdrożenie nowoczesnych funkcjonalności w aplikacji.

DUŻE ZAPLECZE MOŻLIWOŚCI

Spora ilość dostępnych bibliotek sprawia, że mamy problem bogactwa wyboru.

WSPARCIE

JSF cały czas jest nieskończonym frameworkiem, jest na bieżaco rozwijany i co jakiś czas wprowadzane są nowe, ciekawe rozwiązania. Na szczególną uwagę zasługuje Mojarra JSF, który jest dość młodym, open sourcowym projektem Oracle.

Elementy JSF

  • Komponenty interfejsu użytkownika: Główny cel, do którego najczęściej jest wykorzystywany JSF to interfejsy użytkownika i złożone formularze, które dzisiaj są chlebem powszednim w aplikacjach webowych.
  • Zarządzanie ziarnami: Kompatybilność z komponentami JavaBeans w znacznym stopniu automatyzuje i ułatwia współpracę pomiędzy poszczególnymi warstwami aplikacji.
  • Walidacja danych: Często pożądana funkcjonalność w aplikacjach gdzie wprowadzane dane muszą spełniać pewne restrykcyjne kryteria. Tutaj odpowiednie komponenty moga nam to umożliwić.
  • Konwersja danych: Możliwość konwertowania danych do odpowiednich formatów, szczególnie przydatne przy projektach, gdzie musimy przetwarzać dużą ilość danych liczbowych.
  • Dynamiczny nasłuch komponentów: Wygodne podpinanie zależności pod komponenty, które mają za zadanie reagować w odpowiedni sposób na żądanie klienta. Do tego celu również wykorzystywany jest wcześniej wspomniany AJAX, który jest wspierany przez JSF.
  • Nawigacja: Elastyczne konfigurowanie relacji pomiędzy warstwami widoku. W łatwy sposób możemy zdefiniować jakie dodatkowe akcje mają się wydarzyć podczas wchodzenia na poszczególne strony.
  • Facelets: Bardzo istotny element z punktu widzenia wizualnej architektury aplikacji. Często spotykany opis wyglądu, gdzie jeden plik odpowiedzialny za jedną stronę stanowi tak na prawdę kilka plików, w których są zdefiniowane konkretne części danej strony. Takie rozbicie widoku na pare mniejszych elementów sprawia, że sam kod staję się bardziej przejrzysty i przyjazny modyfikacjom.

Prosta aplikacja z użyciem JSF


package hello;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class Hello {

    private String welcome = "Hello World!";

    public String getWelcome() {
        return welcome;
    }
}
      

            
  <html lang="en"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Simple App</title>
    </h:head>
    <h:body>
        #{hello.world}
    </h:body>
</html>
      
        

      
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
      
      

ADNOTACJE

Istotnym elementem podczas pisania aplikacji z użyciem JSF są adnotacje, dzięki którym framework wie jak interpretować daną część kodu. Poniżej kilka podstawowych adnotacji:

@ManagedBean - mapuje daną klasę, dzięki temu możemy później odnieść się do pól tej klasy w warstwie widoku aplikacji

@Named - tak jak wyżej, jednak ta adnotacja nie zawsze jest kompatybilna z komponentami JSF i czasem się z nimi gryzie, dlatego też bezpieczniejszą opcją jest używanie @ManagedBean

@ManagedProperty - jak sama nazwa wskazuje odnosi się ona do jakiejś właściwości klasy, najczęściej pola, dzięki tej adnotacji dane pole może zostać wstrzyknięte do innego beana (zmapowanej klasy)

Często używanym mechanizmem podczas pisania aplikacji webowych jest definiowanie żywotności niektórych beanów, głównie stosowane jest to w klasach kontrolerów, odpowiedzialnych za zmianę widoku w aplikacji. Powszechnie ten zabieg jest używany np. w sklepach internetowych bądź innych systemach, gdzie pożądany jest zapis wprowadzonych danych, które mogą się nam przydać w przyszłości (np. zapamiętywanie loginu i hasła). Poniższe adnotacje określają żywotność beanów:

@ViewScoped - podtrzymuje działanie beana, dopóki klient (użytkownik) nie zmieni strony

@RequestScoped - żywotność beana ogranicza się do wysłania przez klienta żadąnia na serwer i 'obumiera' w momencie otrzymania odpowiedzi

@SessionScoped - dany bean będzie funkcjonować tak długo, jak sesja HTTP, czyli do opuszczenia strony przez klienta

@ApplicationScoped - jak można wywnioskować po nazwie, bean poprzedzony tą adnotacją przestaje działać dopiero w momencie usunięcia aplikacji.

Przydatne linki