Komponenty są elementami, z których budowane są interfejsy użytkownika.
Można to rozumieć w dwóch znaczeniach: że są to elementy ,,które widać''
w interfejscie użytkownika - albo że są to także elementy towarzyszące,
jak np. walidatory.
W JSF częściej przez komponenty rozumiemy to drugie - zarówno ,,właściwe''
elementy GUI, jak i cały tłumek pomocniczych krewnych i znajomych Królika.
Wszystkie one bowiem dostępne są w dwóch bibliotekach tagów, do których
zwykle ogranicza się korzystanie z JSF przy budowie aplikacji.
Tak naprawdę jednak w implementacji występuje oczywiście rozróżnienie na
komponenty ,,właściwe'', zawarte w pakietach
javax.faces.component
i
javax.faces.component.html
i elementy towarzyszące czy pomocnicze, zawarte w pozostałych pakietach
javax.faces
(konwertery, walidatory etc.)
Zajmijmy się najpierw komponentami ,,właściwymi'', z dwóch wymienionych
wyżej pakietów. Wg. filozofii JSF implementacja komponentu zajmuje się tylko
jego zachowaniem - komponenty implementują zwykle interfejsy mówiące o tym,
czy mogą odpalać akcje, zachowywać stan między żądaniami itd. Implementacja
komponentu nie zajmuje się natomiast tym, w jaki sposób komponent będzie
wyświetlany - dla określenia sposobu wyświetlania używane są osobne klasy,
renderery
. Renderery przekształcają
wewnętrzną reprezentację komponentu na jego formę graficzną, zwykle
produkując stosowny HTML-owy output.
Dla stron JSF same strony przechowywana jest na serwerze w postaci drzewa
komponentów w obiekcie typu FacesConfig.