Mimo obecnej mody na wykorzystywanie technologi JavaScript i komunikacji za pomocą REST warto się zastanowić czy zawsze jest to najlepszy wybór i czy przy niektórych projektach nie skorzystać z rozwiązań bibliotek serwerowych takich jak JSF.
Dobrym przykładem gdzie wykorzystanie biblioteki JSF może być opłacalne jest tworzenie formularzy zadań procesów BPM. Typowe formularze w ramach BPM są bardzo do siebie podobne nawet w przypadku różnych procesów.
Przykładowe zadanie procesu z podziałem na sekcje zostało zaprezentowane poniżej:
Typowy formularz zadania procesu BPM składa się z:
- Części nagłówka zadnia wyświetlającego podstawowe dane o zadaniu.
- Części środkowej zawierającej kilka paneli z danymi do odczytu i zapisu stanowiącymi kontekst pracy użytkownika.
- Sekcja przycisków zawierająca przyciski sterująca zadaniem oraz procesem np. zakończenie zadania, zaakceptowanie, odrzucenie itp.
Za użyciem technologi JSF do tworzenia formularzy przemawiają zalety:
- JSF jest standardem specyfikacji Java EE. Oznacza to stabilną sytuację w perspektywie najbliższych lat i brak zależności od właściciela tak jak ma to miejsce w przypadku rozwiązań własnościowych. Jest to bardzo ważny punkt kiedy chcemy uniknąć sytuacji w której twórcy biblioteki zawieszą rozwój i wsparcie biblioteki lub wydadzą nową wersję która nie będzie kompatybilna z wersjami wcześniejszymi. W takim przypadku pozostaje nam wybór albo kontynuować rozwijanie aplikacji na niewspieranej bibliotece albo wykonać migrację co wiąże się z poniesieniem kosztów.
- Jest powszechnie używana i znana, przez co łatwiej znaleźć programistę potrafiącego w niej programować.
- Jest rozwiązaniem komponentowym i łatwym do przyswojenia i używania przez programistów mających mniejsze doświadczenie w tworzeniu interfejsów użytkownika z wykorzystaniem JavaScript i HTML.
- Jest całkowicie zintegrowany z CDI pozwalając ograniczyć do minimum liczbę dodatkowych warstw (ta cecha znacząco zwiększa produktywność).
- Zapewnia bardzo duży poziom bezpieczeństwa. Konstrukcja komponentów JSF uniemożliwia manipulację danymi po stronie przeglądarki użytkownika i bardzo ułatwia walidacje danych. Dodatkowo w bardzo łatwy sposób można ukrywać i pokazywać komponenty w zależności od roli użytkownika. Cała operacja jest wykonywana po stronie serwera co dodatkowo zwiększa bezpieczeństwo.
- W najnowszej wersji 2.2 całkowicie wspiera tworzenie responsywnych stron z użyciem HTML5, CSS3 oraz JavaScript.
- Pozwala w bardzo prosty sposób na tworzenie szablonów stron i bazy komponentów formularzy nadający się do powtórnego użycia.
- Posiada bardzo dużą liczbę bibliotek gotowych do użycia komponentów.
- Podczas uruchamiania formularza waliduje składnię co pozwala na wczesne wykrycie problemów takich jak np. niezamknięty tag. Podczas tworzenia formularzy możemy korzystać z rożnych komponentów JSF:
- 9.1. Standardowych komponentów JSF z namespace h takich jak h:inputText itp.
- 9.2. Dostępnych bibliotek komponentów JSF np. Primafaces, Richfaces, IceFaces, itp.
- 9.3. Tworzyć nowe kompozytowe komponenty graficzne za pomocą dodanego w JSF 2.0 Composite Components.
- 9.4. Tworzyć nowe komponenty JSF w języku Java.
W przypadku dwóch pierwszych rozważań prawdopodobnie konieczne będzie dopasowanie stylów komponentów za pomocą dołączonego do strony arkusza stylu CSS oraz ustawienia w komponentach odpowiednich atrybutów styleClass oraz style.
Dodane w JSF 2.0 tworzenie komponentów Composite Components znacząco upraszcza tworzenie komponentów graficznych. W łatwy sposób, bez konieczności pisania kodu Java, możemy utworzyć komponent zawierający w sobie agregację komponentów standardowych, kody JavaScript a także standardowe tagi HTML. Pozwala to na utworzenie np. sekcji nagłówka zadania która następnie może być re-używalna na kolejnych formularzach zadań.
Tworzenie komponentów w Java daje największe możliwości ale wymaga największego nakładu pracy. Użycie tego sposobu najbardziej opłaca się przy tworzeniu pojedynczych, niezależnych kontrolek w których widzimy duży potencjał na re-użycie w przyszłości. Dobrym przykładem komponentu który opłaca się otworzyć takim sposobem jest kontrolka panelu z nagłówkiem i ciałem umożliwiająca zwinięcie po kliknięciu w nagłówek. Kiepskim kandydatem jest opisana wcześniej sekcja nagłówka zadania – taka sekcja z natury jest kompozycją innych podstawowych komponentów i z dużym prawdopodobieństwem będzie ulegać w przyszłości zmianom.
Podczas tworzenia pierwszych komponentów warto posiłkować się dostępnymi w internecie tutorialami opisującymi jak tworzyć nowe komponenty.
Jeżeli chcemy tworzyć komponenty Ajaxowe oparte o JavaScript warto oprzeć nasze rozwiązanie o bibliotekę Primafaces. Biblioteka Primafaces jest napisana w sposób umożliwiający bardzo łatwe rozszerzanie i tworzenie nowych komponentów.
Bardzo ciekawe artykułu na ten temat można znaleźć na blogach: Master the Boss, FrancescoStrazzull oraz w 11 rozdziale książki PrimeFacces Cookbook.
Zatem jak komponować nasze formularze zadania BPM za pomocą JSF?
- 9.1. Bazowy wygląd formularza będzie wyglądać lepiej jeżeli do ich budowy użyjemy struktury opartej o Grid System. W takim przypadku uzyskamy automatyczną skalowalność i responsywność naszych formularzy na urządzaniach o różnej przekątnej ekranu. Do tego zadania najlepiej nadaje się wykorzystanie biblioteki Bootstrap lub pochodnej ale bazującej na Grid System. Aby jeszcze bardziej uprościć sobie zadania w przyszłości możemy obudować elementy systemu Grid za pomocą stworzonych przez nas komponentów kompozytowych lub Java które ukryją szczegóły lub skorzystać z gotowej biblioteki bootsfaces.
- 9.2. Tworzenie kompozytowych komponentów. Sekcja nagłówka zadania wydaje się wzorowym kandydatem aby zrobić z niej re-używany komponent kompozytowy. Takie rozwiązania pozwoli wstawiać utworzony komponent w kolejnych formularzach procesu bez konieczności ponownego pisania lub kopiowania kodu.
- 9.3. Wykorzystywanie istniejących komponentów. Do tworzenia pozostałej części formularzy warto korzystać z dostępnych bibliotek komponentów i tylko w nielicznych przypadkach braku potrzebnego nam komponentu pokusić się o wytworzenie własnego. Warto używać Composite Components do tworzenia kontrolek biznesowych np. Kontrolka input z podłączona walidacja NIP lub Pesel. Itp.
Zostaw komentarz