Andrzej Marciniak JavaServerFaces i Eclipse Galileo Tworzenie aplikacji W WW s ___________________________________________________________________ Jak...
JavaServerFaces i Eclipse Galileo Tworzenie aplikacji W W W
s ___________________________________________________________________ Jak p ro je k to w a ć e s te ty c z n e i w y g o d n e in t e r f e js y u ż y tk o w n ik a a p lik a c ji W W W ? O d c z e g o za c zą ć p ro je k t w y k o rz y s t u ją c y Ja v a S e rv e r Faces? Co o fe ru je ś ro d o w is k o E clip se G a lile o , a co n a rz ę d z ia W eb T o o ls P la tfo rm ? “ ----------------------------------------------------------------------------------------------------------------------------------y |
B ib lio te k a G łó w n a P o lite c h n ik i Ś w ię to k r z y s k ie j
115303
115303
S p is treści W stęp
......... . ............. 7 Geneza k sią żk i................................................................................................................................ 7 Cele ........................................................................................................................................... 9 C zytelnicy...................................................................................................................................... 10 Układ zagadnień .................................................................................................................... .....10 Materiały pomocnicze ................................................................................................................. 11 Podziękow ania............................................. 12
R ozdział i .
Przed przystąpieniem do pracy z JS F .........
13
1.1. Dlaczego JSF? .......................................................................................................................13 1.1.1. Wersje JSF ......................................................................... .................................... 15 1.2. JSF i Java EE (J2EE) .................................................................................................... 17 1.2.1. Serwlety i strony JSP .............................................................................................. 19 1.2.2. Technologie prezentacji ......................................................................................... 23 1.2.3. MVC w aplikacjach webowych ........................................................................... 27 1.2.4. Implementacja MVC w JSF .................................................................................. 32 1.2.5. Kluczowe elementy JSF — podsumowanie ....................................................... 38 1.3. Pierwsza aplikacja JSF w środowisku Eclipse ................................................................ 38 1.3.1. Instalacja kontenera serwletów ............................................................................ 40 1.3.2. Instalacja środowiska Eclipse G a lile o ................................................................. 40 1.3.3. Integracja kontenera serwletów ze środowiskiem Eclipse .............................. 43 1.3.4. Tworzenie projektu JSF ......................................................................................... 44 1.3.5. Praca z JSF w oknie roboczym ............................................................................ 48 1.3.6. Definiowanie m o d e lu ..............................................................................................53 1.3.7. Definiowanie komponentu wspierającego ......................................................... 54 1.3.8. Utworzenie strony do wprowadzania dan y ch .....................................................56 1.3.9. Utworzenie strony do wyświetlania wyniku ...................................................... 59 1.3.10. Deklarowanie reguł naw igacji.............................................................................62 1.3.11. Uruchamianie aplikacji ........................................................................................ 63 1.3.12. Podsumowanie przykładu ................................................................................... 65
R ozdział 2.
P lanow anie, m odelowanie iprojektow anie aplikacji JS F na platform ie Java EE ....... 2.1.
67
Modelowanie interfejsu użytkownika przy wykorzystaniu techniki scenopisu .... 6 8 2.1.1. Przypadki u ż y c ia ......................................................................................................69 2.1.2. Model ekranów interfejsu użytkownika ..............................................................70 2.1.3. Model nawigacji ..................................................................................................... 72 2.1.4. Prototypy ekranów .................................................................................................. 73 2.1.5. Diagram maszyny stanowej ...................... 75
Ja va S e rv e r F a c e s I E c lip s e G a lile o . T w o rze n ie a p lik a cji W
S p is tre ś c i .
2.2. Warstwa biznesowa ............................................................................................................ / / ;....... ............................ / / 2.2.1. Rola i elementy warstwy biznesowej ........ 2.2.2. Interfejs do warstwy trwałości danych ............................................................... 8 o 2.3. Organizacja kodu aplikacji w Eclipse ................. ,..................■ .....:....................................95 2.3.1. Projekty i moduły Java EE w Eclipse ................................................................ 9o 2.3.2. Zastosowanie projektu użytkowego do przechowywania kodu warstwy biznesowej ....................................... ...... 96 2.3.3. Moduły zależne ............................................................. .........................................99
R ozdział 3.
Używ anie JS F .................................
101
3.1. Komponenty zarządzane.................................................................................................. 101 3.1.1. Deklaracja komponentu ......................................................................................102 3.1.2. Zasięg komponentów ............................................................................................ 105 3.1.3. Inicjalizacja właściwości komponentów ...........................................................106 3.1.4. Odwołania do komponentów zarządzanych ..................................................... 113 3.1.5. Komponenty referowane ................................................................................... . 115 3.1.6. Komponenty wspierające ....................................................................................116 3.1.7. Język wyrażeń UEL ................... .........................................................................118 3.1.8. Konfiguracja komponentów i innych zasobów ..............................................123 3.2. Obsługa zdarzeń ................................................................................................................ 127 3.2.1. Typy zdarzeń i metody ich obsługi .................................................................. 127 3.2.2. Natychmiastowe wykonywanie metod obsługi z d arz eń ............................... 136 3.2.3. Parametryzacja komponentów U l .....................................................................137 3.3. Nawigacja ........:....................................................... 140 3.3.1. Definiowanie reguł nawigacji ............................................................................. 140 3.3.2. Nawigacja statyczna i dynamiczna .................................................................. 143 3.3.3. Rozstrzyganie niejednoznaczności w regułach ................................................144 3.3.4. Przekierowanie i nawigacja poza JSF ............................................................... 144 3.4. Przetwarzanie pakietów zasobów i internacjonalizacja .............................................. 146 3.4.1. Lokalizatory ............................................................................................................ 147 3.4.2. Pakiety zasobów ........................................................................... 150 3.4.3. Pakiety kom unikatów ............................................................................................ 154 3.4.4. Internacjonalizacja w warstwie biznesowej ..................................................... 157 3.5. K onw ersja............................................................................................................................. 159 3.5.1. Standardowe konw ertery...................................................................................... 159 3.5.2. Obsługa błędów konwersji ...................................................................................162 3.6. W alidacja............................ 164 3.6.1. Implementacja metod walidacji ..........................................................................165 3.6.2. Standardowe w alidatory....................................................................................... 168 3.6.3. Kombinowanie różnych walidatorów ............................................................... 168 3.6.4. Wymuszanie wprowadzania danych ..................................................................169 3.6.5. Pomijanie weryfikacji ...........................................................................................169 3.7. Standardowe znaczniki i komponenty U l ...................................................................... 169 3.7.1. Komponenty i znaczniki biblioteki htmł ........................................................... 170 3.7.2. Komponenty i znaczniki biblioteki core .......................................................... 201
4.2.3. Mechanizm zarządzania widokami ...................................................................238 4.2.4. Mechanizm zarządzania stanem ........................................................................ 239 • 4.2.5. Mechanizm przetwarzania wyrażeń EL ...........................................................239 4.2.6. M echanizm obsługi akcji .......... ,......................... 243 4.3. Model komponentów ......................................................................................................... 243 4.3.1. Struktura klas ......................................................................................................... 244 4.3.2. Identyfikatory komponentów .............................................................................. 251 4.4. Praktyczne zastosowania obiektów PhaseListener ...................................................... 255 4 .4 j . Wzorzec POST-Redirect-GET ........................................................................ 256 4.4.2. Generowanie danych binarnych ........................................................................ 258 4.5. Złożone ta b e le ,............................................................................ 260 4.5.1. Modele d a n y ch .......................................................................................................260 4.5.2. Przykład tabeli interaktywnej .............................................................................261 4.6. JSF i bezpieczeństwo ......................................................................................................... 264 4.6.1. Bezpieczeństwo zarządzane przez k ontener............................. ......................265 4.6.2. Bezpieczeństwo zarządzane przez aplikację ...................................................270
R ozdział 6. Narzędzia w sp a rcia i in te g ra cja z innymi szkieletam i
................
327
6.1. Narzędzia Web Tools P latfo rm ........................................................................................ 327 6.1.1. Zarządzanie serwerem aplikacji ......................................................................... 328 6.1.2. Monitorowanie p o rtó w ......................................................................................... 330 6 .1.3. Narzędzia ułatwiające pracę z bazami danych .................................................333 6.2. Technologie widoku ..........................................................................................................338 6.2.1. Facelets ......................... 339 6.2.2. Apache Tiles 2 ...................................................................................................... 344 6.2.3. Smile ........................................................................................................................350
6
Ja va S e rv e r F a c e s i E c lip s e G a lile o. Tw orzenie aplikacji W W W
D odatek A
Standardy kodowania I A N A
D odatek B
Założenia JS F 2.0 ..............................
D od atek C
W spólne elem enty konfiguracji
D odatek D
Kom unikaty o błędach ......
................
353 35 5
...........
357 359
Komunikaty o błędach komponentów ................................................................................... 3 5 9 Komunikaty o błędach konwerterów.......................................................................................3 5 9 Komunikaty o błędach walidatorów........................................................................................360
D odatek E
A tryb u ty przekazyw ane H TM L i zdarzenia D H TM L . .. ........................ 361 Literatura .......
353
Skorow idz .......................
365
W stęp G e n e z a k s ią ż k i Język Java jest obecnie jed n y m z najpopularniejszych języ k ó w program ow ania, a liczne badania, ran k in g i i so n d aże internetow e w y k a z u ją ró w n ież, że je s t on najchętniej sto so w an ą obok PFIP i A S P .N et tec h n o lo g ią u ż y w a n ą do w y tw a rza n ia aplik acji W W W . T aki stan rzeczy je s t niew ątp liw ie sukcesem p ro jek tan tó w firm y S un M icrosystem s, k tórzy w o d p o w ied zi n a skry p ty C G I o p racow ali w latach d z ie w ięćd ziesiąty ch u b ie głego w ieku technologię serwletów, pozw alającą n a szybkie i łatw e w ytw arzanie aplikacji W W W w ję z y k u Java. P o u zu p ełn ien iu serw letó w te c h n o lo g ią szab lo n ó w JavaS erver P ages (w sk ró cie: JS P ), p o z w a la ją c ą n a łą c z e n ie sta ty c zn e g o k o d u H T M L i k o d u aplikacji pisanego w ję z y k u Java w je d n y m dokum encie tekstow ym , uzyskano w pełni funkcjonalne rozw iązanie, charakteryzujące się m ożliw ością separow ania różnych w arstw a plikacji i co za ty m id zie — w yraźnym p o d z ia łem ró l p ro jek to w y ch . Pom im o licznych zalet technologii serw letów i szablonów JSP m oje odczucia po prze p ro w a d z e n iu w ie lu z ajęć la b o ra to ry jn y c h i p ro je k to w y c h z p ro je k to w a n ia aplikacji W W W (realizo w an y ch ze studentam i sp ecjaln o ści in ży n ieria o p rogram ow ania) z w y ko rzy stan iem w yżej w y m ien io n y c h tech n o lo g ii n ie b y ły zb y t p o zy ty w n e. S tudenci, realizując n a w et p ro ste p ro jek ty takie ja k in terfejs u ży tk o w n ik a d la pod staw o w y ch operacji w ykonyw anych w bazach danych (tzw. aplikacje typu C R U D ), często napotykali w iele u c ią żliw y c h p ro b lem ó w , które n ie p o z w ala ły im k o n cen tro w ać się n a istotnych elem en tach fu n k c jo n a ln o ści sam ego interfejsu. W sp o m n ia n e p ro b lem y w y n ik ały n a j częściej z k o n iec zn o ści z najom ości p ro to k o łu H T T P w sto p n iu z aaw an so w an y m czy też ręczn eg o p rz e tw a rz a n ia żądań, co dla p ro g ram istó w Javy b y w a z ajęc iem m ało in tuicy jn y m i p ra co ch ło n n y m . Z p e w n o śc ią ro z w iąz an ie m u łatw ia ją cy m w y tw arzanie aplikacji W W W je s t skorzystanie z uznanych w zorców J2EE, niem niej jeszcze lepszym p o d e jściem w y d a je się u ż y cie sz k ie le tó w p ro g ra m is ty c z n y c h (ang. fra m e w o rk ), k tó re im p le m e n tu ją w z o rce J2E E w sposób spójny i kom pletny. JSF je s t obecnie n a jle p sz y m spośród szkieletów p ro g ram isty cz n y c h oparty ch n a te c h nologii serw letów . T ym , co szczególnie w yróżnia JSF spośród konkurencyjnych rozw ią zań (takich ja k c h o ćb y w c iąż popularn iejsze tech n o lo g ie Struts czy S p rin g M Y C ), je s t
8
Ja v a S e rv e r F a c e s i E c lip s e G a lileo. T w o rze n ie a p lik a cji W Wvu
łatw ość jeg o użycia. Jest to zw iązane z zaim plem entow aniem rozw iązań dla w iększości u ciążliw y ch zadań p ro g ra m isty c z n y c h , jak ie m o żn a napotkać w trak cie im plem entacji aplikacji W W W . R e fe re n c y jn a im p le m e n tac ja JS F zaw iera p rzed e w szystkim :
9
W stę p
do św iadczeń i o bserw acji zeb ra n y ch w trak cie kilkunastoletniej p ra cy dydaktycznej au to ra w zakresie pro w ad zen ia-zajęć zw iąz an y c h z n a u k ą p ro jek to w a n ia i im p le m e n tacji aplikacji W W W .
♦ ro zszerzaln y m o d el k o m p o n e n tó w in te rfejsu użytkow nika, ♦ z b ió r interfejsó w A P I d la z arz ąd z an ia stan em kom p o n en tó w , obsługi zdarzeń, w alid acji danych, d e fin io w a n ia n a w ig ac ji oraz in ternacjonalizacji,
C ele
♦ biblio tek ę z n ac zn ik ó w d la o sa d z an ia k o m p o n en tó w JSF n a stro n ach JSP. P odstaw ow e cele niniejszej k sią żk i to: Istotną zaletą JSF je s t o g rom na elastyczność pozw alająca korzystać z różnych, alterna tyw nych d la JSP tec h n o lo g ii w a rstw y w id o k u i w prow adzać now e ro zw iązan ia w za k resie k om unikacji k lie n ta z serw erem (np. oparte n a technologii A JA X ). JSF nie narzu ca rów nież żadnych ograniczeń co do w arstw biznesow ej (m o d elu ), pośredniej czy usług zew nętrznych. W spom niana łatwość użycia JS F m oże też stanow ić p e w n ą pułapkę dla początkujące ch pro jek tan tó w , k tó rzy często u le g a ją z łu d n e m u prześw iadczeniu, że aby zap rojektow ać interfejs aplikacji W W W , w y sta rc z y u m ie śc ić k om ponenty JS F n a fo rm atce i p o w ią z ać je z o b iektam i Jav y . P rz e św iad c z en ie to je s t w p e w n y m sensie u zasad n io n e, jak o że w iele ku rsó w i tu to ria ii b a z u je w y łą cz n ie n a pro sty ch przy k ład ach , w k tó ry ch rz e czy w iście takie m in im alisty cz n e p o d e jśc ie je s t w y starczające (szczególnie że ko rzy stanie ze sp ecjalnych e d y to ró w g ra fic zn y c h u p raszcza proces p ro jek to w a n ia stron JS P ta k b ard zo , iż w y m a g a on g łó w n ie u ż y c ia m yszy). P roblem p o jaw ia się w ó w czas, gd) próbuje się w ytw orzyć interfejs użytkow nika, który m a im plem entow ać bardziej złożony m o d el interakcji z u ż y tk o w n ik ie m , b ą d ź w trak cie p ra cy zespołow ej, co szczególnie w idoczne jest na zajęciach laboratoryjnych, przy realizacji projektów grupową/eh. W ta kim p rzy p ad k u w y m a g a n a je s t d o g łęb n a znajom ość m ech an izm ó w i ro z w iąz ań p rz y jęty c h w JSF. N iestety, m im o że tech n o lo g ia JS F liczy ju ż sobie k ilka lat, w ciąż m ożna odczu w ać pew ien n ie d o sy t z w ią z a n y z n ie w ie lk ą lic z b ą p u b lik a c ji n a jej tem at w j ę z y k u p olskim .
♦ D o sta rczen ie n ie z b ę d n y c h in fo r m a c ji n a te m a t p r o je k to w a n ia a p lik a c ji W W W osobom n ieposiadającym d o św ia d c ze n ia w tej d ziedzinie. C zytelnicy tlieposiadający w ię k sz eg o d o św ia d c ze n ia w p ro jek to w a n iu aplikacji W W W m o g ą trak to w a ć tę k siążk ę ja k p o d ręczn ik . S ystem atyczna lektura p o zw ala n a zap o zn an ie się z m ech an izm am i fu n k c jo n o w an ia aplikacji W W W pisanych w języku Java oraz zrozum ienie idei w ykorzystania szkieletów p ro g ram isty cz n y c h , w sz c z e g ó ln o śc i JSF. B e zw z g lę d n ie w y m a g a n a je s t w cześn iejsza znajom ość ję z y k a Java, n a to m iast znajom ość tech n o lo g ii W W W m oże b y ć użyteczna. ♦ D o sta rczen ie p e łn e j in fo r m a c ji n a te m a t szjd e letu p ro g r a m isty c zn e g o J S F i n a rzęd zi w sparcia. K siążk a zaw iera w y c ze rp u jąc y opis referencyjnej im p lem en tacji szkieletu program istycznego JSF oraz w stępne inform acje dotyczące innych im plem entacji JS F oraz rozszerzeń. W aż n y m a sp e k te m książki je s t p re ze n ta c ja p rzy k ład ó w op a rty c h n a śro d o w isk u d e w e lo p e rsk im E c lip se G alileo i ro z sz e rz a ją c y m je p a k ie c ie n a rz ę d z i W eb T o o ls P latform ., k tó ry z aw ie ra w ie le u d o g o d n ie ń p ra c y z JSF.
♦ D o sta rczen ie ko m p letn eg o p r z y k ła d u do n a u k i p ro je k to w a n ia a p lik a c ji W W W p r z y użyciu J S F .
D ośw iad czen ie z p ro w a d z e n ia zajęć ze studentam i p okazuje, że często k o rz y sta ją oni w yłącznie z publikow anych w intem ecie sam ouczków i kursów , które nie traktują p ro je k to w a n ia i p ro g ra m o w a n ia a p lik a c ji W W W w sp o só b cało śc io w y i c zę sto o p ie ra ją się na b łędn ym z ało żen iu , że n a u ka tec h n o lo g ii je s t syn o n im em n auki p ro je k to w a n ia p r z y u życiu danej tec h n o lo g ii. N a u k a tec h n o lo g ii je s t tylko je d n y m z elem en tó w n a u ki p rojektow ania, a w iele p u b lik a c ji d o ty cz ąc y c h JS F dokładnie w y ja śn ia szczegóły tech n o lo g ii, ale nie zaw iera in fo rm a cji o je j zastosow aniu. W ie d za d o ty cz ąc a p ro je k to w an ia w ynika z d o św ia d c z e n ia i k o rz y stan ia z najlep szy ch w zorców . In te n c ją autora k sią żk i je s t p rz e d sta w ie n ie zarów no sam ej technologii, ja k i sposobu p ro jek to w a n ia p rz y u ż y c iu tec h n o lo g ii JS F n a b a zie ro zb u d o w an e g o p rz y k ła d u apli k acji W W W i p rz y w y k o rz y sta n iu śro d o w isk a d ew eloperskiego E clipse. P o lekturze k siążk i C zy teln ik p o w in ie n b y ć w stan ie sam odzielnie zaprojektow ać, w ykonać, u ru chom ić i p rzetesto w ać d o w o ln ą a p lik a cję W W W w środow isku E clipse. S tąd w treści p o sz c ze g ó ln y c h ro z d ziałó w z n a jd u ją się o p isy p o d staw o w y ch operacji, które często spraw iają problem y początkującym dew eloperom i studentom (np. zarządzanie serw erem aplikacji, k o n fig u ro w an ie p o łą c z e ń do b a z dan y ch itp.). K s ią ż k a z aw ie ra k o m p ila cję
M otyw em p rzew o d n im k sią żk i je s t p ra k ty c zn a n a u k a JS F p o le g a ją c a na rów noległym zapoznaw aniu C zytelnika z m ożliw ościam i JS F oraz efektyw nym i m etodam i ich w ykorzystania zarów no w fazie projektow ania, ja k i im plem entacji aplikacji W W W . W p rz y p a d k u treści d o ty czący ch p ro jek to w a n ia C zy teln ik p rzy sw aja w iedzę, opierając się n a zło ż o n y m p rzy k ła d zie w p o sta ci system u in form atycznego do obsługi p ro c e su rece n zo w an ia p ra c nau k o w y ch . K sią ż k a zaw iera doku m en tację w y m a g ań w stę p n y c h dla p ro jek tu oraz system atyczny opis realizacji kolejn y ch faz tw o rz en ia p ro jek tu oraz je g o im plem entacji.
♦ P re ze n ta cja w a rto śc io w y c h ź r ó d e ł in fo rm a c ji, sta n o w ią c y c h u z u p e łn ien ie dla p rzed sta w ia n yc h treści. K siążka zaw iera adresy b ib liograficzne w ielu źródeł, które p o z w o lą rozszerzyć w ie d zę n a tem at ró ż n y c h z a g a d n ie ń z w iąz an y c h z JS F, w ty m z aró w n o w ydaw n ictw pap iero w y ch , ja k i m ate ria łó w dostęp n y ch w in tem ecie.
10
Ja va S e rv e r F a c e s i E clip s e G a lile o. Tw orzenie a plika cji W W W
C z y t e ln ic y K sią ż k a je s t a dresow ana do dw óch grup odbiorców : ♦ stu d en tó w info rm aty k i (szczeg ó ln ie o sp e c ja ln o ści inżynieria oprogram ow ania), zob lig o w an y ch do zap o z n an ia się z w io d ący m i technologiam i w ytw arzania aplikacji W W W , ♦ p ro jek tan tó w i p ro g ram istó w Javy, k tó rzy p la n u ją w ykorzystanie środow iska JS F w re aliz o w a n y c h p rz ez siebie p rojektach. S z c ze g ó ln ie z m y ś lą o tej drugiej g ru p ie o d b io rc ó w w celu zilu stro w a n ia p ro c esu w y tw a rz a n ia a p lik a cji w y b ra n e z o stało śro d o w isk o p ro g ram isty czn e E clip se, które je s t n a jp o p u la rn ie jszy m i w ie lo k ro tn ie n a g rad z an y m przez stow arzyszenia dew elope- i ró w Javy śro d o w isk iem tw o rz en ia aplik acji w ty m jęz y k u . W cześniejsza znajom ość E clipse n ie je s t b e zw zg lęd n ie w ym agana, acz k o lw ie k m oże być przydatna.
Układ zagadnień K siążk a składa się z sz e ściu ro z d ziałó w oraz dodatków . R o z d z ia ł 1. sta n o w i w p ro w a d z e n ie do p ro b le m a ty k i p ro je k to w a n ia a p lik a cji W W W o p artych n a JS F oraz in n y ch tech n o lo g ia ch zw iąz an y c h z języ k iem Java. R ozdział ten m a n a celu p rzy g o to w an ie C z y te ln ik a do k o rz y stan ia z technologii JS F p o p rzez obja śnienie jej k lu cz o w y c h k o n cep cji, m ec h an iz m ó w oraz tech n o lo g ii w sparcia. W d al szej części ro z d ziału z n a jd u ją się p ra k ty c zn e in stru k cje dotyczące p rzygotow ania śro d o w isk a p ro g ram isty cz n e g o do p ra c y z JSF. N a k o ń c u realizow any je s t k ro k po kroku pierw szy, prosty p rzy k ład ilustrujący podstaw ow e koncepcje oraz architekturę aplikacji W W W opartej n a JSF. R o z d ział 2. p rz ed sta w ia w y b ran e ele m en ty p ro jek tu sy stem u inform atycznego stan o w iąceg o realne stu d iu m p rz y p a d k u u ż y cia JS F. Z am ieszc zo n a dokum entacja zaw iera an alizę w y m ag ań , p ro jek t in te rfejsu u ż y tk o w n ik a aplikacji oraz m odel interakcji sy s tem u z u ż y tk o w n ik ie m w y k o n a n e za p o m o c ą tec h n ik i scenopisów . P onadto rozdział zaw iera w iele w skazów ek dotyczących organizacji kodu projektu w środow isku Eclipse. R o z d ział 3. z aw ie ra opis p ro jek to w a n ia i im p lem en tacji aplikacji W W W p rz y w y k o rz y stan iu p o d sta w o w y c h fu n k c jo n a ln o ści tech n o lo g ii JSF. O pisane są w nim operacje cod zien n eg o u ż y tk u , n iez b ęd n e do p ra w id ło w eg o w y k o n a n ia aplikacji, tak ie ja k defi niow anie m odeli obiektów , kom ponentów zarządzanych i w spierających, obsługi zdarzeń, n a w ig ac ji, k o n w e rsji i w e ry fik a c ji d a n y c h w e jśc io w y ch , re n d ero w a n ia czy w reszcie k o n fig u rac ji śro d o w isk a JS F. In fo rm ac je zaw arte w rozdziale w y sta rcz ą do zaprojek tow ania i im plem entacji standardow ej aplikacji W W W , która nie posiada szczególnych w y m a g a ń w z ak re sie in te rfejsu u ży tk o w n ik a.
.R ozdział 4.. zaw iera sz c ze g ó ło w ą analizę w yb ran y ch m ec h an iz m ó w JSF, któ re m o g ą b y ć w ykorzystane do tw o rz en ia n iestandardow ego in te rfejsu u ż ytkow nika. P o ja w ia ją się tutaj'praktyczne porady, ja k zm ienić standardow e rozw iązania np. w zakresie cyklu - przetw arzania żądań czy m odelu nawigacji, które p o zw o lą na realizację specyficznych w ym agań funkcjonalnych i niefunkcjonalnych projektow anego interfejsu użytkow nika. R ozdział 5. stanow i k o m p le tn y kurs tw o rz en ia k o m p o n e n tó w ro z sze rz ając y c h stan dardow ą im plem entację JSF. O pisane s ą w nim schem aty projektow ania, im plem entacji i w drożenia różnego ty p u k o m p o n en tó w u ż y tk o w n ik a , p o z w a la ją c e n a b u d o w ę b i blioteki k om ponentów u ż y tk o w n ik a czy n a w et w łasnej im p le m e n tac ji JSF. R ozdział 6 . p rz ed sta w ia uzu p ełn iające inform acje w z ak re sie p o p u larn y c h rozszerzeń im p le m e n tac ji re fe re n c y jn e j sz k ieletu JS F, n a rz ę d z i d o p ro je k to w a n ia ap lik a cji czy m ożliw ości integracji JS F z innym i technologiam i Javy. Pokrótce opisano tu rów nież zagadnienia, k tó ry ch znajom ość m oże okazać się n iez b ęd n a do prak ty czn ej realizacji projektu, a które nie s ą z w iązan e b e zp o śre d n io z JS F . np. re a liz a c ję d o stę p u do baz danych, m on ito ro w an ie p o rtó w itd. D odatek A z aw iera tab e lę standardów kod o w an ia d la d o k u m en tó w H T M L i X M L bądź ich pochodnych. D o d atek B przedstaw ia założenia dla specyfikacji JS F 2.0, które p o z w o lą C zytelnikow i zo rien to w ać się w k ieru n k u ro z w o ju tec h n o lo g ii JSF. D o d a tek C p rezentuje tabele z e w sp ó ln y m i elem entam i k o n fig u rac ji JSF. D o d a tek D p re ze n tuje klucze i w artości stan d ard o w y ch kom u n ik ató w JSF. D o d a tek E p rz ed sta w ia atry b uty H T M L i D H T M L w y k o rz y sty w a n e w k o m p o n en ta ch JSF.
M ateriały pomocnicze K o d źródłow y w y b ra n y ch p rzy k ła d ó w zam ieszczo n y ch w ksią żc e oraz p e łn y k o d re alizow anego pro jek tu system u inform atycznego ISR P m o żn a pobrać w intem ecie, pod adresem ftp ://ftp .h e lio n .p l/p rzy k la d y /jsfe c g .zip .
12
Ja va S e rv e r F a c e s i E c lip s e G a lile o . T w o rze n ie a plika cji W
P o d z ię k o w a n ia C h c ia łb y m w y ra zić o g ro m n ą w d z ię c z n o ś ć k o le g o m z z e s p o łu p ro je k ta n tó w firm v M a x E lek tro n ik z Z ielonej G óry, p ro w a d z o n e g o p rz e z W ald k a K oźbę, tj. D om inikow i S m ogórow i, Ł ukaszow i R yfie, T o m k o w i N ie c z k o w sk ie m u , W acław o w i H ołubow i o raz T om kow i B arciow i, k tórych rady, k o m en ta rz e i u w a g i b yły dla m nie nieocenione. D ziękuję m ojem u zn ak o m item u d y p lo m a n to w i P a n u A n d rzejo w i L ud w ik o w sk iem u z a pom oc w realizacji p rz y k ła d ó w oraz k o le g o m z In sty tu tu S tero w an ia i S ystem ów Inform atycznych prow adzonego przez P rofesora Józefa K orbicza za w sparcie i pom ocne kom entarze.
Rozdział 1
Przed przystąpieniem do pracy z JSF C elem niniejszeg o ro zd ziału je s t teoretyczne i p raktyczne przy g o to w an ie C zy teln ik a do korzystania z technologii JSF. Rozdział zaw iera ogólny opis szkieletu program istycz nego JS F , tzn. d e fin icje n a jw a ż n ie jsz y c h k o n c e p c ji i idei d z ia ła n ia sz k ieletu . O m ó w iono tu arch itek tu rę sam ego szk ieletu i p o w iązan e z nim technologie. Jeśli Czytelnik uzna, że prezentow ana w dw óch pierw szych podrozdziałach w iedza teoretyczna j est zbyt tru d n a lub po p ro stu nużąca, m o że pom inąć tę część ro zd ziału i przejść do realizacji p ra k ty c zn e g o p rz y k ła d u w śro d o w isk u d e w elo p ersk im E clipse. R e alizacja p rz y k ła d u pozw oli lepiej zrozum ieć istotne cechy JS F i ułatw ić przysw ojenie p o zo stały ch za w arty ch tu treści.
1,1. Dlaczego JSF? O bserw ując dynam iczny rozwój technologii w ytw arzania oprogram ow ania, w ostatnim czasie m o żn a zauw ażyć, że dew elo p erzy w c iąż nie u sta ją w w y siłk a ch w p o sz u k iw a n iu n o w y c h rozw iązań, które p o d n io sły b y w y d ajn o ść ich pracy. A tra k cy jn y m k ie ru n k iem ty ch p o sz u k iw a ń je s t rozw ój szkieletów program istycznych, dostarczający ch p re d efin io w an y c h k o m p o n en tó w i przejrzy sty ch ro zw iązań p rojektow ych, z ap e w n ia ją c y c h m o żliw o ść w ie lo k ro tn eg o w y k o rzy stan ia kodu i w ym u szający ch sto so w an ie d o b ry ch p ra k ty k prog ram isty czn y ch . S zkielety s ą szczególnie uży teczn e w ob szarach zastosow ań, w których w ystępują specjalne w ym agania dotyczące architektury aplikacji, czyli w tak ic h ja k w y tw a rza n ie aplikacji W W W , o d w z o ro w a n ia relacy jn o -o b iek to w e czy u słu g i sieciow e. W e b o w y sz k ie le t p r o g r a m is ty c z n y (ang. w eb fra m e w o rk ) je s t gotow ym ro z w ią z a n iem p ro g ram isty cz n y m z ap ro jek to w an y m w celu w sp arcia p ro c esu w y tw a rza n ia d y n a m ic z n y c h stro n W W W , a p lik a cji W W W i u słu g sie cio w y c h (ang. Web se rv ice s).
ja v a S e rv e r F a ce s i E clip s e G a lile o . T w o rze n ie aplikacji WWVk
U życie szkieletu m a na celu zm niejszenie narzutu pracy zw iązanego z wykonywaniem zw y k ły ch czynności w trakcie ro z w o ju aplik acji W W W , w ynikających m .in. z roz p ro sz en ia k o d u p o stronie k lie n ta i serw era czy też o graniczeń p rotokołu H TTP. O becnie dostępnych je st w iele otw artych p ro je k tó w w e b o w y c h sz k ieletó w program i stycznych, opartych n a języ k u Java, a najpopularniejszym i z nich są odpowiednio w ko lejności: Struts, Spring M V C , W ebW ork, Tapestry, G oogle W eb Toolkit, W icket, Echo, A nvil, C lick, S w in g W e b , T hinW ire, P u ste fix , In d u c tio n , C h ry salis, jZ e n o , T urbine, M akum ba, S O F IA , R IF E , V erge, JP ublish, S tripes czy C ocoon. B iorap p o d 'uw agę za sadę działania, m o żem y w y ró ż n ić p rz ed e w szy stk im d w a ty p y w ebow ych szkieletów p ro g ram isty czn y ch , t j .: ♦ Z orientow ane na przetw arzanie żądań (ang. request-based) — szk ielety d ziałające w sposób analogiczny do skryptów CCI. W ykorzystują one obiekty klas kontrolerów i m etody a kcji obsługujące b e zpośrednio n a d ch o d z ąc e żądania. Poszczególne żądania są b e zsta n o w e , a obsługa sesji u żytkow nika je s t zapew niana po stronie serw era. P o s z c z e g ó ln e sz k ie le ty teg o ty p u ró ż n ią się sp o so b em , w ja k i logika b iz n e so w a j e s t p rz y p is a n a do a d re só w U R L i j a k d a n e s ą d o sta rcz an e do u ż y tk o w n ik a . ♦ Z orien to w an e n a p rz etw a rza n ie k o m p o n en to w e (ang. com ponent-based) — ro z w ią z a n ia p o z w a la ją c e u w o ln ić d e w e lo p e ró w o d k o n iec zn o ści im p lem en to w an ia p rz etw a rza n ia żądań. Isto tn ą c e c h ą je s t h erm ety zacja kodu logiki biznesow ej w e w n ą trz p rz en o śn y c h k o m p o n en tó w interfejsu użytkow nika. O bsługa stan u sesji u ż y tk o w n ik a je s t auto m aty czn ie z ap ew n ian a p rzez szkielet n a podstaw ie bieżących danych przechow yw anych jak o w łaściw ości utw orzonych instancji k ażd e g o z k o m p o n en tó w . U w zg lęd n ia ją c d odatkow o w ykorzystanie m echanizm u obsługi zdarzeń, ten m odel szkieletu je st zbliżony do przyborników do w y tw a rza n ia g raficzn eg o in te rfejsu u ż y tk o w n ik a (ang. G raphical U ser Interface — GUI), sto so w an y c h w a p lik a cjac h o k ien k o w y ch (ang. desktop application). P o szc z eg ó ln e szkielety teg o typu ró ż n ią się in terfejsem program istycznym (A PI) i sposobem , w ja k i k o m p o n en ty w s p ó łp ra c u ją ze sobą. P rzykładem rozw iązania należącego do pierw szej grupy je st A pache Struts, który został w pro w ad zo n y w ro k u 2 0 0 0 i sta ł się p ierw szy m p o p u la rn y m w e b o w y m szkieletem pro g ram isty cz n y m op arty m n a tec h n o lo g ii Ja v y (a ściślej serw letów ). M im o że Struts po d o b n ie ja k JS F k o rz y sta z a rch ite k tu ry M V C , to je s t sz k ielete m z o rien to w an y m na przetw arzan ie żądań. Isto tn y m e le m en tem ró ż n ią c y m sz k ielet o d JSF je s t w b u d o w an a m ożliw ość o bsługi żąd a ń p rz e sy ła n y c h m e to d ą G E T p ro to k o łu H T T P. Szczegółow e inform acje d o stęp n e s ą n a stro m e h ttp ://stru ts.a p a ch e .o rg . A p a ch e T a pestry je s t z k o lei p rz y k ła d em sz k ieletu , k tó ry p o d o b n ie ja k JS F je s t oparty n a przenośnych kom ponentach w ielokrotnego użytku. T apestry w ykorzystuje dokum enty X H T M L , do starczając niezb ęd n y ch w iązań pom ięd zy k o m ponentam i osadzonym i na stro n a ch d o k u m e n tó w p rz e sy ła n y c h d o k lie n ta i o d p o w ia d a ją c y c h im o b iek tó w Javy p o stronie serw era. W y k o rzy sta n ie T ap e stry p o z w a la n a m o d u lary zację k o d u stron. S zczegółow e in fo rm a cje d o stęp n e s ą n a stro n ie h ttp ://ta p e stry .a p a c h e .o rg . Z ap re ze n to w an a k lasy fik a cja je s t dość um o w n a, czego ilu s tra c ją je s t p rz y k ła d sam ego JS F, k tó ry je s t z alicz an y do ro z w iąz ań k o m p o n en to w y c h , ale p rz y je g o b liższy m p o z n an iu okazuje się, że p o sia d a cechy o b u w y m ien io n y c h po d ejść. Co zatem w yróżnia JS F spośród k o n k u re n cy jn y ch ro zw iązań ?
R o z d zia ł i . * Przed przystąpieniem d o pra cy z JS F ____________________
15^
Po pierw sze, standaryzacja — JS F je s t c z ę śc ią standardu J a v a E n te rp rise E dition (Java E E). D zięki tem u m a silne- zap lec z e prod u cen ta, czyli firm y Sun, oraz innych firm w spierających technologię Ja v a E E , tj. IB M czy O racle, któ re ró w n ie ż m a ją sw ój u d z ia ł.w jej rozw oju. JS F je s t zatem b e zp ro b lem o w o obsłu g iw an y p rz ez w szy stk ie k ontenery serw letów i serw ery aplikacji. P o drugie, m o d u ło w o ść — JSF d o starcza zestaw p re d efin io w an y c h k o m p o n en tó w in terfejsu użytkow nika i um ożliw ia tw orzenie dodatkow ych kom ponentów . Co więcej, JS F oferuje gotow e schem aty ro z w iąz ań w zak resie organizacji k o m p o n en tó w czy obsługi zdarzeń, dzięki czem u zw ięk sza się p ro d u k ty w n o ść d ew elopera, któ ry m oże sk o n centrow ać się n a logice biznesow ej aplikacji. Po trzecie, f u n k c jo n a ln o ś ć — JS F z ap e w n ia pełne w sp arc ie d la p ro g ra m istó w w za kresie w alidacji danych po stro n ie serw era, definiow ania, n a w ig a c ji m ię d z y stronam i i tw orzenia aplikacji w ielojęzycznych. Po czw arte, ela styczn o ść — JS F nie n a rzu c a o kreślonych tec h n o lo g ii w w arstw ach m odelu i w idoku. Z am iast z d o m y śln y ch stron JSP m o żn a sk o rzy stać z a lte rn a ty w nych rozw iązań w p ostaci szab lo n ó w F acelets czy Tiles. Po p iąte , w ygoda uży c ia — o tw arte z in te g ro w a n e śro d o w isk a d e w e lo p e rsk ie (ang. In teg ra te d D evelopm ent E n v iro n m e n t— ID E ), takie ja k E clip se czy N e tB ea n s, w sp ie ra ją m ożliw ość k orzystania z k o m p o n en tó w JS F w trybie p r z e c ią g n ij i upuść (ang. drag-and-drop). W izualne n a rzę d zia do p ro jek to w a n ia in terfejsu u ż y tk o w n ik a , d e fi niow ania naw igacji czy k o n fig u ro w an ia ap likacji pozw alaja^na b a rd zo łatw e i szybkie w ytw arzanie aplikacji W W W .
1.1.1. W ersje JSF O d czasu opracow ania w 2004 ro k u pierw szej specyfikacji JS F p o w sta ło k ilka w ersji charakteryzujących się różnym i w y m a g an iam i oraz m ożliw ościam i. N a jw aż n iejsz e ich cechy i w ym agania opisane s ą p oniżej.
1 .1 .1 .1 . JS F 1.0 P ierw sza specyfikacja Ja v a S e rv e r F aces, ro zw ijan a pod auspicjam i o rg anizacji J a v a C om m unity P rocess (J C P ) ja k o JS R 127, opublik o w an a w 2004 roku. S p ecyfikacja JSF 1.0 w spierała tech n o lo g ie S e rv let 2.3 i JS P 1.2.
1 .1 .1 .2 . JS F 1 .1 P o d o b n ie ja k p o p rz e d n ia w e rsja , ta sp e c y fik a c ja p o w sta ła w ra m a c h JS R 127 i n ie zaw iera żadnych przełom ow ych rozw iązań. G łów ny nacisk położono n a usunięcie błę dów im plem entacji i p o lep szen ie w y d ajn o ści. P o p raw k i d o ty c z ą głów nie: ♦ k om presji w id o k u p o stro m e k lien ta, ♦ p o d n iesien ia ja k o śc i klas ren d ereró w ,
Ja va S e rve r F a ce s i E c lip s e G a lile o . T w o rze n ie a p lik a cji «-A/Vÿ
R o z e zin i 1 . ♦ P rze d przystą pie n iem d o p ra c y z JS F
♦ w p ro w ad zen ia now ego elem entu < fa c e t> do \tOTxJi%xatic)i fa c e s-c o n fig .x m l.
1
♦ m ożliw ości z ag n ieżd żan ia struktur dan y ch w w id o k u ,
j
.. J S F 2 . 0
♦ zap ew n ien ia b e zp iec z n eg o trybu pracy , p o z w ala ją c eg o n a p rzechow anie stanu ,J w id o k u na serw erze w p rzy p ad k u p o jaw ie n ia się u ste re k (ang. fa ilo v e r ). I
3. JS F 1 .2
, '1
G łó w n y m m ankam entem w c ze śn ie jszy c h w ersji JS F , zg ła sz an y m p rzez w ie lu jegoj użytkow ników , był niski stopień zintegrow ania z technologiam i szablonów , a w szczegół! ności JSP, stanowiącej dom yślne rozw iązanie. W ram ach JC P w m aju 2006 roku przyjęt(| z ap o trze b o w a n ia d la n o w y c h ro z w iąz ań , z a m ie sz c z o n e w sp e c y fik a cja ch JSR-252 i JSR-245. Efektem rów nolegle prow adzonych prac było pow stanie w niedługim czasie specyfikacji o dpow iednio JS F 1.2 i JS P 2.1. N a jw aż n iejsz e elem enty integracji obij technologii dotyczyły: ? ♦ w sp arcia JSF d la znaczn ik a fo re a ch z b ib lio tek i JS T L ,
j
♦ u lep sze n ia m etody tw o rzen ia drzew a k o m p o n en tó w i p rz ep lata n ia zaw artości znaczników JS P i JSF,
j j
♦ w y elim in o w an ia pro b lem u przed w czesn eg o ren d ero w a n ia zaw artości k o d u w yjścio w eg o H T M L p rz ez znaczniki JS P, co b yło często p o w o d em n iew łaściw ej k o lejn o ści elem entów n a stronie,
■ ■
♦ oznaczenia ję z y k a w y ra że ń EL ja k o p rz esta rza łeg o i p ro m o w a n ia jeg o zunifikow anej m o d y fik a cji ( U nified E xp ressio n L a n guage). JS F w w ersji 1.2 oprócz lepszego d o p aso w an ia tec h n o lo g ii JS F i JS P u d o stę p n ia rów nież szereg innych u lep sze ń w sto su n k u do p o p rz e d n ic h w ersji. N ajw ażn iejsze to: ♦ lep sze w sp arcie tw o rzen ia n iesta n d ard o w y ch k o m unikatów , ♦ w y d a jn ie jszy i bardziej fu nkcjonalny m ec h an iz m ład o w an ia kom u n ik ató w z plików , ♦ po p raw io n e m ech an izm y z arząd zan ia stan em kom p o n en tó w , szczególnie w zakresie o bsługi aplik acji um ożliw iającej k o rz y stan ie z w ie lu okien lub z ak ład ek p rzeglądarki,
17
G dy p o w staw ała ta k sią żk a (druga p o ło w a 2009 roku), trzy w ażne sp ecy fik acje dla orzyszłego w y d an ia p latfo rm y Ja v a E n te ip rise E d itio n — Java E E 6 — p rz esz ły p o m yślnie fazę p u blicznej recen zji (ang. P u b lic R eview ). T e stan d ard y to Ja v a E E C on n ecto r A rchitecture 1.6 (JC A — JS R 322), Ja v a S e rv e r F aces 2.0 (JS R 314) i Java S ervlet 3.0 (JS R 315). Z e w z g lęd u n a dość p o w ażn e zm iany, p o d o b n ie ja k w p rz y p ad k u w ersji 1 .2 , prace b y ły p ro w a d zo n e ró w n o le g le z ro z w o jem technologii serw letów , tak b y u zyskać spójne i k o m p le tn e ro z w iąz an ia w z ak re sie tw o rz en ia aplikacji W W W n a p latform ie Ja v a E E 6 . C zytelnicy z ain tere so w a n i k ieru n k iem rozw oju, w ja k im p o d ą ża JS F, m o g ą znaleźć informacje na tem at najw ażniejszych założeń dotyczących pow stającej w ersji (opracow a ne na podstaw ie specyfikacji JSR 314) w dodatku B , „Z a ło ż e n ia JS F 2 .0 ” .
S p e c y fik a c je J S R z w ią z a n e z J S F D ość in te resu jąc y m ź ró d łe m w ie d z y n a te m a t ro z w o ju p rz y sz ły c h w e rsji i n o w y ch funkcji platfo rm y Ja v a m o g ą być sp e c y fik a cje JS R p u b lik o w an e p o d au sp icjam i or ganizacji Java C om m unity Process (JCP), dostępne pod adresem http://jcp.org. JC P jest o tw artą organizacją, której działaln o ść z o stała z ain icjo w a n a p rz ez firm ę S un M ic ro system s, i obecnie sk u p ia p o n ad 1 2 0 0 dew elo p eró w , u ż y tk o w n ik ó w i licen cjo d aw có w jęz y k a Java (dane z sierp n ia 2009 roku). C elem JC P je s t tw o rzen ie i ak tualizow anie specyfikacji tech n o lo g ii Ja v a (w p o sta ci p ro jek tó w JS R ), ocena p rz y ję ty c h ro zw iązań i opracow yw anie pakietów zgodności technicznej. Sam proces opracow yw ania i oceny je s t rów nież w y sp ec y fik o w an y w dok u m en cie JS R (obecnie o bow iązuje w ersja JCP 2.7 zawarta w projekcie JSR -215) i nadzorow any przez kom itet w ykonaw czy organizacji (ang. J C P E xe cu tin g C om m ittee). O prócz n iezb ęd n y ch in fo rm acji n a tem at p rz y ję ty c h stan d ard ó w dok u m en ty JS R p o z w ala ją p rześledzić d o k ład n ie dro g ę ro z w o ju konkretnej tech n o lo g ii, z w łaszc za pod kątem potrzeb definiow anych przez dew eloperów . W sz y stk ie sp e c y fik a cje JS R pow ią zane z ro zw o jem tech n o lo g ii JS F z am ieszczo n e z o stały w tabeli 1.1.
___
♦ m ożliw ość szy fro w an ia stan u sesji po stronie klienta, ♦ m o żliw o ść w y łą cz en ia m ech an izm u a u to m aty czn eg o gen ero w an ia iden ty fik ato ró w dla kom p o n en tó w po stronie klienta, ♦ n o w y z n aczn ik s e tP r o p e r ty A c tio n li s te n e r, p o z w ala ją c y n a rejestrację obiektu A c ti o n li s te n e r d la k o m p o n en tu p o w ią za n eg o z n a d rzę d n y m znacznikiem .
J S F 1 .2 je s t w e rs ją o b o w ią z u ją c ą w k s ią ż c e .
1.2. JSF i Java EE (J2EE) Java P latfo rm E nterp rise E d itio n (Java E E ) je s t zb io rem specyfikacji i p ra k ty k tw o rzenia i w d ra ża n ia a p lik a c ji k o r p o r a c y jn y c h (klasy e nterprise) w ję z y k u Ja v a oraz z arz ąd z an ia nim i. A p lik a c je k o rp o ra c y jn e Ja v a E E s ą to aplikacje zap ro jek to w an e do obsługi zorien to w an y ch bizn eso w o w itryn W W W dużej skali — w itry n p ra cu jąc y c h w w arunkach w y so k ieg o obciążen ia. W itry n y tak ie m a ją w y so k ie w y m a g an ia w za kresie skalow alności, w ydajności, niezaw odności, d y stry b u c ji żąd a ń , .o b słu g i.b łę d ó w i in te g rac ji z in n y m i te c h n o lo g ia m i Javy.
r
18
Ja va S e rv e r F a ce s 1 E c lip s e G a lile o. Tw orze nie a plika cj. vVy u y y f
,íc,/d¿ a | 1. ♦ Przed przystą pie n iem do pracy z JS F
T abeia 1 .1 . Specyfikacje JSR związane z JSF Nr
Oryginalny ty tu ł
Opis
127
JavaServer Faces
Definicja architektury i interfejsu programistycznego API.
245
JavaServer Pages 2.1
Uaktualnienie specyfikacji JSP mające na ceiu lepszą integrację z technologią JSF i ułatwienie procesu wytwarzania aplikacji.
252
JavaServer Faces 1.2
Uaktualnienie specyfikacji JSF 1.1, którego głównym celem jest integracja z technologią JSP (rozwijane równoległe z JSR 245).
276
Design-Time Metadata for JavaServerTM Faces Components
Specyfikacja metadanych opisujących komponenty JSF na potrzeby rozwoju narzędzi wspierających proces projektowania aplikacji.
299
Web Beans
Specyfikacja mająca na celu ujednolicenie modelu komponentów zarządzanych (ang. managecl beans) w JSF poprzez zastosowanie komponentów EJB 3.0.
301
Portlet Bridge Specification fo r JavaServerTM Faces
Specyfikacja mostu programistycznego umożliwiającego publikowanie aplikacji JSF w postaci portletów.
314
JavaServer Faces 2.0
Uaktualnienie specyfikacji JSF 1.2. Pierwsza istotna poprawka specyfikacji JSF od czasu JSR 127.
329
Portlet 2.0 Bridge fo r JavaServerTM Faces 1.2 Specification
Specyfikacja definiuje zasady semantyczne pozwalające na realizację widoków JSF 1.2 w obrębie danego portletu.
Specyfikacja JSF jest częścią Java EE i używ a rozw iązań zaw artych w pozostałych specy fikacjach. W celu usystem aty zo w an ia w ie d zy n a tem at zasad działania JS F w a rto p o krótce scharakteryzow ać te najw ażniejsze.
% Uwaga
♦ Ja v a S e rv e r F aces 1.2, ♦ Ja v a S e rv e r P ages 2.1, ♦ Ja v a S e rv e r P ages S tan d ard T ag L ibrary, ♦ Ja v a S ervlet 2.5.
N a zw a p la tfo rm y Ja v y dla aplikacji k o rp o ra c y jn y c h z o s ta ła u p ro s z c z o n a . P o p rze d n io p la tfo rm a była zn a n a ja k o Java 2 P la tfo rm , E n te rp ris e E d itio n I p o s z c z e g ó ln e w e r s je m iały n u m e r w e rs ji z k ro p k ą , n p . J2E E 1 ,4 . O b e c n ie firm a S u n z re z y g n o w a ła z o zn a c z e n ia „ 2 ” w n a zw ie p la tfo rm y, a n u m e ra c ja w e rsji n ie za w ie ra kropki — są to k o le jn e liczb y c a łk o w ite . O ficja ln a n a zw a o b o w ią z u ją c e j w e rsji to Java P la tfo rm , E n te rp rise E d itio n 5 (Java EE 5), a o b e c n ie firm a S u n in te n s y w n ie p ra c u je na d sp e c y fik a c ją Ja v a E E 6.
1.2.1. S erw lety i strony JSP Idea w ykorzystania przeglądarki internetowej jak o interfejsu aplikacji sieciow ych w ym a gała opracow ania koncepcji d y n a m ic zn e g o g e n e ro w a n ia d o k u m en tó w p rz e z se rw e ry H T T P, zg o d n ie z k tó rą d o k u m en t z w rac a n y p rz ez serw er je s t k onstruow any d opiero po otrzym aniu żądania od klienta, dzięki czem u klient m oże w p ły w ać n a je g o z a w a rto ść i otrzym yw ać aktualne dane. O d 1993 ro k u n a stąp ił szybki rozw ój tech n o lo g ii re a li z u jący ch taki sp o só b p rz e tw a rz a n ia żądań, począw szy od skryptów pisanych w ję z y kach C czy Perl, w ykorzystujących interfejs C G I (ang. C om m on Gateway Interface), p o p rzez sp ecjalizow ane serw ery udostępniające interfejs p ro g ram isty czn y (np. N e tsc ap e S erver A P I), tech n o lo g ie Server Side In clu d es, A ctiv e S erv er Pages czy inne tec h nologie szablonów . O d p o w ie d zią firm y S un M icro sy stem s n a pow stanie tych ro z w ią zań było opraco w an ie serw letów — p isa n y ch w ję z y k u Java niew ielk ich p ro g ram ó w um ieszczo n y ch w specjaln y m ko n ten erze p o stronie serw era. Ideę serw letów o p ra c o w ał Jam es G osling w 1995 roku, je d n a k z ró ż n y ch p rz y cz y n jej re aliz a cja zo stała odłożona w czasie. S p ecyfikacja interfejsu p ro g ram isty cz n e g o S ervlet A P I u k a z a ła się w ro k u 1997, rów n o leg le z p ierw szym se rw e rem opraco w an y m przez firm ę S un, tj. Java W eb Server. P u n k te m zw rotnym w ro z w o ju serw letó w było oficjalne w łą cz en ie tej tech n o lo g ii (p o cząw szy od w ersji S ervlet A P I 2.2, opublikow anej w 1999 ro k u ) do standardu J 2 E E , dzięki czem u serw lety o trzy m ały silne w sp arcie p rzem ysłow e.
S tan d ard Java EE został w p ro w ad z o n y p rz e z firm ę S un M icro sy stem s w 1999 roku' (pod w c z e śn ie js z ą n a z w ą J2E E ) i od teg o c za su je s t in te n sy w n ie ro z w ija n y przy' w sp ó łu d ziale innych firm i org an izacji — Ja v a E E określa tylko sta n d ard o w ą p latfor m ę dla aplikacji, które m o g ą być p rzenoszone p o m ięd zy różnym i im plem entacjam i, ch ro n iąc tym sam y m p rz e d z a le ż n o śc ią o d k o n k re tn e g o p ro d u c e n ta i im plem entacji. Ja v a E E d e fin iu je w ie lo w a rstw o w ą , o p a rtą n a k o m p o n e n ta c h a rch ite k tu rę aplikacji o raz opisuje w ym agane śro d o w isk o , służące do je j w y k o n an ia. A p lik acje są osadzane n a serw erze o b słu g u jący m Ja v a E E , tj. u d o stę p n ia jąc y m zestaw interfejsów p rogram i sty czn y ch ok reślo n y p rz ez Sun M icro sy stem s. F irm a ta p o za d e fin ic ją interfejsów p ro g ram isty cz n y c h dostarcza rów nież w zorcow ej im p le m e n tac ji serw era aplikacyjnego (obecnie je s t to serw er G lassF ish, ro z p o w sz ec h n ian y zarów no w w ersji n a licencji otw artej, ja k i kom ercyjnej). Java E E definiuje interfejs u ż y tk o w n ik a w p o sta c i a p lik a c ji W W W , będącej zbiorem 1 serw letów , szablonów JS P, dokum entów H T M L , ilustracji oraz in n y ch zasobów , które s ą z esta w io n e w sp o só b u m o ż liw ia ją c y u ru c h o m ie n ie w b e z p ie c z n y m środow isku:] serw era aplikacji, n a dow olnej p latfo rm ie sprzętow ej i w dow o ln y m system ie opera cyjnym . S p ecyfikacje tw o rz en ia in te rfejsu u ż y tk o w n ik a opartego n a w ykorzystaniu I przeg ląd ark i internetow ej (tzw . c ie n ki k lie n t — ang. thin d ie n t) sta n o w ią tylko m ałą i część stan d ard u Java EE. W w e rsji Ja v a E E 5 s ą to:
19
Uwaga
N a zw a s e rw le t s ta n o w i m o d yfik a cję n a zw y a p le t , o zn a c z a ją c e j n iew ielk i pro gra m u ru c h a m ia n y z p o zio m u innej a p lik a cji (n p . p rze g lą d a rk i in te rn e to w e j). A p le ty s ą d o s tę p n e ju ż od w e rs ji 1 .0 ję zy k a Ja v a , k tó ra p o ja w iła s ię w 1 9 9 5 ro ku. A p le ty s ą n ie z a le żn e o d p la tfo rm y sp rz ę to w e j i p ro g ra m is ty c z n e j, na której p ra c u je u żytk o w nik, c o je s t k o n s e k w e n c ją użycia p la tfo rm y Ja v a . C e c h ą c h a ra k te ry s ty c z n ą a p le tó w j e s t d u że b e z p ie c z e ń s tw o , ja k o że d z ia ła ją o n e w s p e c ja ln ie o g ra n iczo n ym ś ro d o w is k u zw a n ym p ia s k o w n ic ą (a n g . sa n d b o x), k tó re m ię d zy innym i nie p o zw a la n ie p o d p is a n y m c yfro w o a p le to m na d o s tę p d o z a s o b ó w lo k a ln y c h . A p le ty m a ją z a s to s o w a n ie g łó w n ie w tw o rz e n iu e fe k tó w g ra fic z n y c h , w z b o g a c a ją c yc h w ys tró j s tro n W W W , m .in . anim acji, interaktyw nych p rezen ta cji, czy te ż narzędzi po m o cn iczych , np. klientów protokołu IR C. Po p o ja w ie n iu s ię t e c h n o lo g ii C S S , J a v a S c r ip t i A JAX aplety s tra c iły z n a c z n ie na p o p u la rn o ś c i, c h o ć c ią g le zn a jd u ją s w o je z a s to s o w a n ie . S p o s ó b in te g ra c ji a p le tó w z k o m p o n e n ta m i J S F j e s t o p is a n y w d a ls z e j c z ę ś c i k s ią ż k i.
20
Ja va S e rv e r F a ce s i E c lip s e G a lile o . T w o rze n ie a plika cji WvVVU
I
S e r w e r a p lik a c ji c z y k o n te n e r s e r w le t ó w ? S erw er a p lik a cji je s t p ro g ram e m słu ż ąc y m do z d aln eg o u ru c h am ia n ia i użytkow ania aplikacji. S e rw e r a p lik a c ji k o rp o ra c y jn y c h z g odny ze standardem Java E E powm iei u d o stę p n ia ć interfejs p ro g ram isty cz n y słu ż ąc y m .in. do: ♦ tw o rz en ia k o m p o n en tó w k lasy en terp rise (E JB ) im p le m e n tu ją cy c h logikę b izn eso w ą. ♦ zap e w n ian ia trw a ło ści dan y ch i m ap o w an ia o b iek to w o rela cy jn e g o (JPA ), ♦ zap e w n ian ia o bsługi tran sak c ji (JT A ), ♦ o bsługi k o m u n ik ató w (JM S), ♦ zap e w n ian ia b e zp iec z eń stw a (JavaA C C ), ♦ o bsługi technologii X M L -o w y ch (JA X B , StA X ), ♦ u d o stę p n ia n ia usłu g siecio w y ch (JA X -W S , JA X -R P C , SA A J),
1 . ♦ Przed przystąpieniem do p ra c y z JS F
otwartej i m ogą różnić się zarów no w ydajnością, ja k i zakresem udostępnionych usług (zapew niać obsługę p o łączeń do b az d anych, m o n ito ro w an ie aplik acji p o p rz ez tec h n ologię JM X , etc.'). Innym , dziś w łaściw ie ju ż in cy d en taln ie spo ty k an y m ty p em k o n ten e ra je s t m o d u ł ro z s z e rz a ją c y , dołączany do istn iejąceg o serw era W W W , k tó ry nie m a w budow anej im plem entacji k o ntenera se rw letó w (lub p o sia d a n ie a k tu a ln ą w ersję). P rz y k ład e m ta kiego m odułu je s t A pache Jserv — b e zp łatn y k o n ten e r se rw letó w ro z sze rz ając y n ie zw ykle popularny serw er A p ach e H T T P . Istnieje rów nież o drębna k lasa lek k ic h k o n ten e ró w serw letó w , któ re m o g ą b y ć osa dzane w innych aplikacjach, p rz ek sz tałc ając je w serw ery W W W . O s a d z a n e k o n te n e r y se rw le tó w to m ię d z y innym i: T in y Ja v a W eb S erver, R a p to r G S, N e x u s W eb S erver czy też w ym ienione w cześniej M o rtB a y Jetty i A p ach e T om cat, któ re rów nież m o g ą być i często są osad zan e, p o d w a ru n k iem że s ą w ła śc iw ie skonfigurow ane. P rzykład M ortB ay Jetty je s t tutaj o ty le istotny, że te n k o n ten e r serw letó w je s t w b u dow any w środow isku E clipse i służy do szybkiego uru ch am ian ia i testow ania aplikacji w ebow ych.
—
♦ o bsługi p o c zty (JavaM ail), ♦ d e fin io w a n ia in te rfejsu u ż y tk o w n ik a — aplik acji w e b o w y c h (S e rv let A P I, JSP, JS F, JS T L ). Lista certyfikow anych p rzez firm ę Sun serw erów aplikacji, które pozytyw nie zaliczyły te' sty k o m p aty b iln o ści z w e rsją Java E E 5, je s t p u b lik o w a n a n a o ficjaln e j stronie firmy. O becnie lista zaw iera n a stęp u jące serw ery: ♦ kom ercyjne: B E A W eb L o g ic S erver vlO.O, IB M W eb S p h ere A S v7, K ingdee A p u sic A S (v5.0), O racle A S 11, SA P N e tW e a v e r 7.1, S un G la ssF ish E nterprise S erv er 9.1, T m a x S o ft JE U S 6 , N E C W eb O T X 8 .1; ♦ n a lic e n cji otw artej: A pache G ero n im o -2 .1 .4 , IB M W e b S p h ere A S C om m unity E d itio n 2.0, O W 2 Ja v a O p en A S 5.1, G la ssF ish A p p lic a tio n S e rv e r v2, JB oss A S 5.0.0. Z aró w n o kom ercy jn e, ja k i o tw arte serw ery aplik acji s ą w p e łn i p ro fesjo n aln y m i roz w iązaniam i, n ad ający m i się do z asto so w ań p rz em y sło w y c h — ró ż n ic e p o m ię d z y mmi n ajczęściej d o ty c z ą k w e stii w y d ajn o ści i skalow alności. U życie profesjonalnego serw era aplikacji korporacyjnych w przypadku zw ykłych aplika cji w e b o w y c h nie je s t je d n a k n ajczęściej w y m a g an e i b y ło b y ro z w iąz an ie m n a w yrost. W p rz y p ad k u p ro sty c h aplikacji w e b o w y c h m o żn a sk o rz y sta ć z k o n te n e r a serw letó w (kontenera aplikacji w ebow ych) — program u, który im plem entuje w yłączn ie interfejsy' program istyczne służące do tw orzenia aplikacji w ebow ych. Jest on odpow ied zialn y za zarządzanie całym cyklem życia serw letów , tj. o d inicjalizacji, poprzez zarządzanie usłu-' gam i, p o zniszczenie. K o n te n er serw letó w m o że być sa m o d z ie ln ą u s łu g ą — d ziała o n w ó w c z a s p odobnie ja k serw er W W W , tzn. obsługuje z ap y tan ia k lien tó w oraz gen eru je o d p o w ie d zi. P rzy kładam i s a m o d z ie ln y c h k o n te n e r ó w s e rw le tó w są A p ach e T o m cat, M o rtB a y Jetty, W instone czy E nhydra. W szy stk ie w ym ien io n e k o n te n e ry s ą o fe ro w an e n a licencji
21
Serw let je s t obiektem u m ie sz cz o n y m w sp ecjaln y m k o n ten e rze Javy, który d y n a m icznie p rzetw arza ż ąd an ia k lie n ta i p rz y g o to w u je d o k u m en t odpow iedzi. C ykl życia serw letu składa się z n a stęp u jąc y c h kroków : 1
. In ic ja liz a c ja . S erw let ład o w an y je s t w trak cie startu k o n ten e ra łub przy p ierw szym je g o w y w o łan iu . P o d c z as ład o w an ia o b iek tu k o n ten e r w y w o łu je m etodę i ni t () serw letu, u d o stę p n io n ą w in terfejsie S erv let A P I, w której program ista aplikacji m oże realizow ać zadania inicjacyjne, takie ja k ustanow ienie p o łąc ze n ia do b a z y d a n y c h czy o tw a rcie p lik u d z ie n n ik a. M e to d a ta je s t w y w oływ ana tylko raz w trak c ie ż y cia serw letu. P o zain icjo w a n iu serw let gotow y je s t do o bsługi żądań klien tó w .
2. O b s łu g a ż ą d a ń . U ru c h o m ie n ie se rw letu n astęp u je p o p o ja w ie n iu się ż ąd an ia zaw ierającego od p o w ied n i łań c u ch z n ak ó w w adresie U R L , p rz y p isan y do serw letu. Z w y k le ż ą d a n ie j e s t o b słu g iw a n e w n o w y m w ą tk u . K o n te n e r w yw ołuje w ów czas m eto d ę s e r v ic e ) ) serw letu, k tó ra n a stęp n ie d y strybuuje obsługę żądania do o dpow iedniej m eto d y serw letu, p rzy p isan ej do typu ż ądania (zw ykle GET lub POST). P ro g ra m ista m usi d o sta rcz y ć im p lem en tacje do ty ch m eto d o bsługi żąd a ń H T T P , w p rz ec iw n y m w y p a d k u w y stą p i błąd. K ontener, w yw o łu jąc m eto d ę ob słu g i, p rz ek a zu je do niej re fe re n cje do utw o rzo n y ch p rzez siebie o b iek tó w ż ąd a n ia i odpow iedzi. W ten sposób pro g ram ista uzyskuje dostęp do p a ram etró w żądania, k tó re m o że dow olnie przetw arzać, oraz obiektu o dpow iedzi, udostępniającego strum ienie w yjściow e (binarny i tekstow y). 3 . U su w a n ie . O biekt se rw letu z w y k le p o z o staje w p am ięci do zatrzy m an ia kontenera, kied y u su w an y je s t z p am ięci po u p rz ed n im w y w o ła n iu jeg o m etody d e s tro y )) . M etoda w yw oływ ana je s t tylko raz i m oże realizow ać zadania końcow e, np. zam ykanie o tw arty ch p o łąc ze ń do b az d a n y ch b ądź plików .
22
Ja va S e rve r Fa ces i E c lip s e G a lile o . T w o rze n ie a plika cji v*'/t/yy
T ech n o lo g ia serw letów m a w iele zalet, tak ic h ja k w y so k a w ydajność, bezpieczeństw o i przenośność, których niepodobna tu w yczerpująco opisać (zainteresow anym polecam książkę Ja va Servlets a n d Ja va S e rv er P a g e s 1). N ie m n ie j sp o só b g en ero w an ia odpo- * w iedzi d la d okum entów tekstow ych je s t m ało efektyw ny. P rzyjęte ro zw iązanie polega n a gen ero w an iu d okum entu H T M L p o p rzez k o n k a te n ac ję (łączenie) łańcuchów zna- -kow ych p rz esy ła n y ch do stru m ie n ia w y jśc io w e g o , co p ra k ty c zn ie uniem o żliw ia po dział p racy p o m ięd zy prog ram istó w i p ro jek tan tó w stron, nie w spom inając o w sparciu specyficznych narzęd zi do projek to w an ia stron H T M L . i C elem p rz e z w y c ię ż e n ia ty ch n ied o g o d n o ści firm a S un M ic ro sy ste m s w p ro w ad z iła w 1999 ro k u tech n o lo g ię szablonów Ja v a S e rv e r P ages, b ę d ą c ą ro zszerzen iem tec h -' nologii serw letów . JSP p ozw ala na tw orzenie dynam icznych dokum entów w ebow ych opartych na form atach H T M L , X H TM L i X M L. JSP posiada zbiór specjalnych znaczni ków X M L , u m o żliw iając y c h osadzanie k o d u Ja v a b ezp o śred n io w dokum encie sza blonu, d e k la ro w a n ie zm ien n y ch , w a rto ścio w a n ie w y ra ż e ń czy w sp ó łp racę z innym i kom ponentam i, np. k o m ponentam i JavaB ean. Po u tw o rz en iu strona JS P je s t tłum a czona n a se rw iet i kom p ilo w an a do k o d u b ajtow ego Javy. T ech n o lo g ia JS P okazała się bardzo w y g o d n ą a lte rn a ty w ą dla serw letów , w szczeg ó l n o ści w z asto so w an iu do g en ero w an ia stron, k tó ry ch zaw arto ść w znacznej części nie u lega zm ianie. Jednakże ze w zg lęd u n a dość w ąski zasó b znaczn ik ó w w pierw szej wersji JSP zaistniała potrzeba rozszerzenia zbioru znaczników o dodatkow e i ju ż w roku 2002 p o w sta ła b ib lio tek a JS P S tandard T ag L ib ra ry (JS T L ). W raz z po w stan iem b i b lioteki JS T L op raco w an y został sk ryptow y ję z y k w y ra że ń E L (JSP E xpression L a n gu a g e), p o z w ala ją c y n a w y g o d n iejszy dostęp do k o m p o n en tó w JavaB ean z p o ziom u stron JS P i osad zo n y ch n a nich znaczn ik ó w re p re z en tu jąc y ch kom p o n en ty JS T L . N a stępnie w ro k u 2003 ję z y k E L w łączono do sp ecy fik acji JS P 2.0, co uczyniło go d o stępnym d la p o z o stały ch kom p o n en tó w o sad zo n y ch n a stro n ach JSP, rów nież kom p o n e n tó w w łasnych, defin io w an y ch p rz ez użytko w n ik ó w . S tro n y JS P s ą św ie tn y m n a rzę d zie m do b u d o w y a p lik a c ji w e b o w y c h o w z g lęd n ie staty czn y m w yglądzie. G d y chcem y stw orzyć z ło ż o n ą aplikację, w y m a g ając ą zasto so w an ia w ie lu znaczn ie ró ż n ią cy c h się od siebie sp o so b ó w prezen tacji, sam e d o k u m enty JS P m o g ą okazać się zbyt m ało ela sty cz n y m narzędziem . R o z w iązan iem tego p ro b lem u je s t w y k o rzy stan ie zarów no JSP, j a k i se rw letó w — p o le g a ono n a w stę p nym p rz etw o rz en iu żądania p rz ez serw iet, k tó ry p rz etw a rza p rz esła n e dane, n adzoruje realizację lo g ik i b izn eso w ej, a n astępnie, w zależ n o śc i o d o k oliczności, przekazuje w yniki do je d n e g o z k ilk u ró żn y ch dok u m en tó w JS P. T akie p o d e jście w ykorzystuje w iększość w e b o w y c h szk ieletó w pro g ram isty czn y ch , w ty m JSF. Z ostało ono opisane w dalszej części rozdziału, p rzy okazji om aw iania w z o rca projektow ego M odel-Y iew -C ontroller.
Polskie wydanie: Marty Hall, Larry Brown, Java Servlets i JavaServer Pages. Wydanie II, tom I, tłum. Piotr Rajca, Helion 2005.
± , ♦ Przed przystąpieniem do pracy z JS F
2
23
r^chnologie prezentacji
N ie m ożna W pełni w ykorzystać m ożliw ości JS F b ez u ż y cia technologii z aim p le m entow anych w p rzeglądarkach intern eto w y ch do w izualnej prezen tacji dok u m en tu czv zapew nienia jeg o interaktyw ności. N ie za le ż n ie od zastosow anej technologii sza blonu bądź w ybranej im plem entacji JS F d o k u m en t p rz esy ła n y do u ży tk o w n ik a k o ń cowego będzie oparty na form acie H T M L (X H TM L), sposób jeg o prezentacji określony za pom ocą k a sk a d o w y ch a rk u sz y stylów (ang. Cascading Style Sheets — CSS), a o b słu oę zdaizeń generow anych przez interaktyw ne elem enty strony zapew ni JavaScript. W ty m podrozdziale znajduje się tylko krótka charakterystyka tych rozw iązań; w dalszej części książki, gdzie om aw iany je s t k o d p rzykładów , m o żn a znaleźć opisy bardziej sz c z e gółow e, odnoszące się do k onkretnych z asto so w ań w JSF. H T M L (ang. H y p erT e xt Marlcup L a n g u a g e — h ip e rte k sto w y ję z y k znaczn ik ó w ) je s t podstaw ow ym jęz y k iem skryptow ym , słu żący m do p u b lik o w an ia treści w in tem ecie. D okum enty H T M L w ykorzystują znaczniki oznaczone z obu stron naw iasam i ostrokątnym i do opisyw ania struktury inform acji z aw arty ch w tek ście dok u m en tu oraz osa dzania w nim dodatkow ych obiektów w postaci grafik, interaktyw nych kontrolek, anim a cji czy apletów. H T M L um ożliw ia rów nież osadzanie w dokum encie ciągów instrukcji ję z y k ó w sk ry p to w y ch czy k o rz y stan ie z C SS. O becnie organizacja W 3 C (ang. W o rld W ide Web C onsortium ), zajm u jąca się usta n aw ia n ie m stan d ard ó w sieci W W W , z aleca stosow anie w ersji H T M L 4.01. Języ k H T M L um o żliw ia w e ryfikację p o p raw n o ści kodu dokum entu, k tó rą m ożna u a k tyw nić p o p rzez do łączen ie defin icji typu d o k u m entu, np. d la aktualnej w ersji je s t to: HDOCTYPE html PUBLIC "-//W3C//0TD HTML 4. 01//EN" "http://www.w3.org/TR/html4 /s t r i c t ,d td "> Zaw arta w p rzedstaw ionym przykładzie definicja typu dokum entu (ang. D o cu m en t Type D efinition — D T D ) je s t sp o so b em opisu stru k tu ry dok u m en tó w (gram atyki ję z y k a ), obejm ującym d o p u szczaln e zn ac zn ik i, ich a try b u ty oraz m eto d ę ich zag n ież d ż an ia. P ow yższa d eklaracja odw ołuje się do w ersji pod staw o w ej D T D dla dok u m en tó w H T M L , tj. Strict, któ ra n ie p o siad a d efinicji zn aczn ik ó w p re ze n ta c y jn y c h , np. < font> . O prócz w ersji Strict, dostępne s ą je s z c z e n astępujące: ♦ T ransitional (przejściow a) — ro z sze rz ając a w ersję S tric t o w szy stk ie elem enty prezentacyjne, ♦ F ra m eset — ro zszerzająca w ersję p rz e jśc io w ą o elem enty przeznaczone do w y św ietlan ia ram ek. Jako że obecnie korzystanie z ram ek nie je st zalecanym rozw iązaniem , ostatnia z w ym ie nionych w ersji D T D je s t rzadko używ ana. R a m k i n ie s ą p o p ra w n ie obsługiw ane p rz ez w iele urządzeń d la osób n ie p e łn o sp raw n y ch , np. c zy tn ik i e k ran ó w czy m o n ito ry do w yśw ietlania p ism a B ra ille ’a. Je st to n iezg o d n e z zalecen iam i o rg an izacji W 3C w za kresie szeroko rozum ianej dostępności stron W W W , ok reślo n y m i w ra m a ch In icja tyw y dostępności do sie ci (ang. Web A cc essib ility In itia tiv e — W A J) z n ajd u jąc y ch się p o d ad resem http ://w w w .w 3 .o rg /W A I/.
Ja va S e rv e r F a ce s i E c lip s e G a lile o, i w orzen ie a plika cji ' T w i l
X M L (ang. E xten sib le M a rku p L a n g u a g e ) je s t re k o m en d o w an y m p rzez organizacja W 3C uniw ersalnym jęz y k iem form alnym p rzeznaczonym do reprezentow ania danych D zięki n iezależn o ści od p la tfo rm y sp rz ęto w e j, łatw o ści p a rso w an ia i prostocie zyskaj d u ż ą po p u larn o ść i je s t obecnie szeroko sto so w an y w intem ecie, zgodnie z intencją je g o tw órców . X M L p o sia d a w iele c ie k aw y ch zastosow ań m.in. jak o źródłow a' forma) p u b lik o w an ia inform acji w in te m ec ie (sto so w an y z ark u szem stylów X S L ), format w y m ian y danych, fo rm at sk ład o w an ia dan y ch w sp ecjalizo w an y ch b azach dan\ ch c ą form at p lik ó w konfig u racy jn y ch . D o k ład n y opis ję z y k a X M L i je g o zastosow ań w y . k racza p o z a zakres niniejszej książk i — w ty m p u n k cie p rz ed sta w io n y zostanie ty ogólny zarys składni ję z y k a oraz k ró tk a ch ara k te ry sty k a d okum entów JS P zgodnyi ze stan d ard em ję z y k a X M L , w y k o rz y sty w a n y ch w przykładach.
25
Z godność dok u m en tu ze standardem X M L w ym aga: ♦ p o p ra w n o śc i-stru k tu ra ln e j (ang. v a lid ity ) — d o k u m e n t p o sia d a D T D , X S D lub R N G , z k tórym je s t zgodny, ♦ popraw ności składniowej -— d okum ent spełnia w ym ogi popraw nego form atow ania dokum entów XM L. Od w ersji JSP 1.2 m ożna definiow ać dokum enty JSP, które są popraw nym i dokum entam i X M L (tradycyjne dokum enty H T M L n ie s ą z godne ze sta n d ard e m X M L ). N o w e p o dejście ze w zg lęd u n a w iększy niż w p rz y p ad k u trad y c y jn y c h stron ro z m ia r d e fin io w anych dokum entów początkow o nie cieszyło się dużym zainteresow aniem w śród p ro jektantów stron. Jednakże w raz z upow szechnieniem zarów no jęz y k a X M L , ja k i narzędzi w sparcia w zakresie przetw arzania dokum entów X M L (parsow ania, w alidacji, tran s form acji) sy tuacja ta się zm ieniła.
D okum enty X M L zaw ierają dane oraz znaczniki służące do reprezentacji struktury i o. ślające znaczen ie ty ch danych. W p rz ec iw ie ń stw ie do H T M L ję z y k X M L nie p o s t p red efin io w an eg o zestaw u z n aczn ik ó w p o z w ala ją c eg o n a definiow anie sposobu pi zentacji i fo rm ato w an ia danych. Z n aczn ik i s ą defin io w an e p rz ez tw ó rcó w dokumei tó w i m o g ą tw orzyć z biory stan o w iące sło w n ik i d ziedzinow e. A u to r d okum entu mi w n im ko rzy stać je d n o c z e śn ie z w ie lu sło w n ik ó w i d odaw ać w łasne. A b y uniknąć zyka kon flik tó w n azw zn ac zn ik ó w sto sow ane s ą p rz e s trz e n ie n a z w (ang. N a m e S p a c e — x m lns). P rz e strze n ie n azw p o z w a la ją u ż y w ać dow olnie w ielu sło' k ó w zn aczn ik ó w w je d n y m dok u m en cie, a ich k o n stru k c ja je s t bardzo prosta. Z a zde foliow anie użytej przestrzeni nazw odpow iada atrybut xm lns:nazwajp r z e s t r z e n i , gdzi n a zw a ja rze strze n i je s t ałiasem przestrzeni, a w artość tego atrybutu je st jej właściwyr identyfikatorem . Identyfikator m usi m ieć p ostać adresu U R L , choć dokum ent, na któr w sk azu je, nie m usi w cale istnieć (n aw et je ś li istnieje, n ie m u si m ieć żad n eg o związk z d a n ą p rz estrz en ią n azw ). P rzestrzeń z d efin io w an a w elem encie n adrzędnym je s t wi doczn a w elem en tach pod rzęd n y ch .
X H T M L (ang. E xtensible H T M L ) je s t z g o d n ą z ję z y k ie m X M L re p re z e n ta c ją H T M L 4.01, dzięld czem u dokum enty p isan e w X H T M L m o żn a łatw o gen ero w ać z innych dokum entów X M L czy in tegrow ać j e z d o k u m en tam i pisanym i w in n y ch ję z y k a c h o partych n a X M L (np. SV G , R D F , M athM L ). N ajw ażniejsze różnice pom iędzy językam i H T M L i X H T M L (w ynikające głów nie z k o n ieczności zach o w an ia pop raw n o ści skład n io w ej) s ą n astępujące: w szystkie elem enty m u sz ą zn ajd o w ać się w e w n ą trz elem entu g łó w n eg o , co nie było w ym uszane w H T M L ; ♦ w szystkie elem enty XFITM L m u sz ą b y ć p o p ra w n ie z agnieżdżone — niedopuszczalne je s t p rzecin an ie się znaczn ik ó w , np. d o p u sz c za ln y w H T M L zapis < strong> tekst< /em > < /strong> w ję z y k u X H T M L m usi m ieć postać tekst;
C ałe ciało dokum entu zaw iera się w jed n y m znaczniku najw yższego poziom u, zwanyn k o rz en iem (ang. root). C iało m o że być p o p rz ed z o n e o p cjonalnym prologiem , zaw i rającym :
♦ w szystkie elem enty X ITTM L m u s z ą być z am k n ięte (ró w n ież p u ste elem enty, np. , < b r/> itd.);
♦ deklarację w ersji (atry b u t v e rs io n ) i o p cjo n aln ie kodow anie z naków (atrybut
♦ w szy stk ie elem enty ję z y k a m u sz ą być p isane m ały m i literam i;
encoding),
♦ deklarację D T D , X M L S ch em a (X S D ) lub O A S IS R E L A X N G (R N G), o p isu jąc ą uży te zn aczn ik i oraz ich gram aty k ę,
% . 4, Przed przystąpieniem do p ra cy z JS F
j I
♦ instrukcję p rzetw arzan ia, np. w sk a z u ją c ą arkusz sty ló w CSS do form atow ania i sposobu w yśw ietlania dokum entu w przeglądarce czy arkusz X SL do przetwarzania; d o k u m en tu n a inny form at. i O b o w iązu jące obecnie w ersje ję z y k a X M L to w ersja p o d sta w o w a 1.0 i w ersja rozsze: rz o n a 1 .1 — w p ro w ad z ają ca z m ia n y w d o p u sz c z a ln y m z esta w ie z n ak ó w oraz lepszą obsługę sta n d ard u U nicode. O rg a n iza cja W 3 C rek o m en d u je jed n a k że stosowanie' w ersji rozszerzonej w y łą cz n ie tam , gdzie je s t to k o n ieczn e ze w zględu n a kodowanie.' Z alecan y m stan d ard em je s t w c iąż w e rsja p o d sta w o w a , k tó ra je s t ró w n ież w e rsją do m y śln ą w przypadku, gdy d okum ent nie zaw iera jaw nej deklaracji w ersji. Analogicznie d o m y śln y m sy ste m em k o d o w a n ia z naków je s t U nicode w w ersji U T F - 8 .
♦ atrybuty deklarow ane w zn aczn ik ach m u sz ą m ieć w arto ści u jęte w cu d zy słó w lub apostrof; ♦ elem ent głó w n y m usi z aw ierać atry b u t ze w sk az an ie m p rz estrz en i n a zw zgodnej z X M L . N a jn o w sz ą re k o m e n d ac ją W 3C je s t o p u b lik o w an a w m aju 2001 ro k u sp e c y fik a cja X H T M L 1.1. Je d n a k że ze w z g lę d u n a b ra k w s p a rc ia ze stro n y w io d ą ce j n a ry n k u przeg ląd ark i In tern et E x p lo rer d la tec h n o lo g ii X H T M L (z tego p o w o d u m .in. z a rz u cono prace n a d w e rsją 2.0) w ię k sz ą p o p u la rn o śc ią cieszy się sp e c y fik a cja X H T M L 1.0. W ersja 1.0 p o siad a p rak ty czn ie tak i sam z esta w e le m en tó w i a try b u tó w j a k D T D dla H T M L 4.0, dzięki czem u nie spraw ia p roblem ów praktycznie żadnej przeglądarce. A by zw eryfikow ać popraw ność dokum entu X H T M L , w ystarczy p rzed pierw szy m w y stąpieniem elem entu głów nego dołączy ć n a stęp u jąc y kod: UD0CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN""http://www.w3.org/TR/xhtml 1/DTD/xhtml 1-s t r i c t ,dtd">
Ja va S e rve r Fa ces i E clip s e G a lile o , T w o rze n ie a plika cji VW/v>
P o w y ższa d e fin ic ja o d n o si się do w e rsji S tr ic t, k tó ra p o d o b n ie j a k to m a m ie js c J w H T M L -u , p o sia d a w e rsje alternatywne, tj. Transitional i Frctmeset, ich d e fin icje sgl analogiczne do o p isan y ch w yżej. ' | K a s k a d o w e a r k u s z e sty ló w to ję z y k słu żący do d e fin io w a n ia sty lu p re ze n ta c ji strój W W W . Z ostał stw orzony w celu odseparow ania form y prezentacji dok u m en tu o d jego treści, co p o z w a la n a łatw iejsze zarządzanie zm ian am i w d o k u m en tach , zwiększeni? ich d ostępności czy ograniczenie stopnia ich złożoności. S tan d ard C SS 2 b ęd ąc y rozszerzeniem starszej specyfikacji CSS1 je s t obecnie p re fe ro w a n y m p rz ez W 3C sposo- ' b e m fo rm a to w a n ia d o k u m en tó w H T M L , X M L i X H T M L . N ie ste ty , nie w szystkie! przeg ląd ark i o b słu g u ją go popraw nie. 1 A rk u sz stylów je s t zb io rem reg u ł stylistycznych, fo rm atu jąc y ch sposób w y św ietlani!! e le m en tó w H T M L w p rz eg ląd a rce . R e g u ła s ty lis ty c z n a sk ła d a się z pary: se le k to r* i deklaracji. S elek to r określa, jak ie g o elem entu (bądź ic h grupy) d o ty czy re g u ła s t y l * styczna. D eklaracja określa form atow anie elem entu w skazanego przez selektor i zawierał p ary w łaściw o ść-w arto ść, np. następ u jąca reguła: JJ
tekst
spow oduje w y św ietlen ie w n ow ym ak apicie w y tłu sz cz o n eg o tek stu w k olorze n ieb ie « skim . W ła śc iw o śc i elem entów m o g ą dotyczyć sp o so b u fo rm ato w a n ia czcionki, tłąfj koloru, tekstu, p o z y cjo n o w a n ia elem entów czy u sta w ian ia ich m arginesów . * Style e le m en tó w m o g ą być definiow ane p rz ez a u to ra w trze ch m iejscach: w atrybucie s t y l e form atow anego znacznika, w postaci arkusza sty ló w zaw artego w definiowanym dokum encie (ściśle w elem encie < sty le > w ew n ą trz n a g łó w k a ) oraz arkusza stylów z aw arteg o w zew n ętrzn y m pliku. O statnie ro z w iąz an ie je s t zalecan e ze wzglę-' d u na m o żliw o ść p o w ią za n ia arkusza sty ló w z w ie lo m a doku m en tam i, co um ożliw ia łatw e i szybkie form ato w an ie w yg ląd u całej p ro jek to w an ej aplikacji. M iejsce definicji stylu je s t rów nież istotne, gdy reguły CSS w y k lu c za ją się wzajemnie.’ W tak im p rz y p a d k u o tym , k tó ra reguła je s t w ażna, d ecy d u je dość zło ż o n y algorytm: k a s k a d y , u w z g lęd n iają cy różne ź ródła p o c h o d ze n ia reguł. R e g u ły m o g ą b y ć definio w ane p rzez a u to ra (jak w yżej), u ży tk o w n ik a p rz eg ląd a rk i (np. w o pcjach w yśw ietla nia) oraz p ro d u c e n ta przeg ląd ark i w po staci do m y śln y ch u sta w ień z g o d n y ch (lub nie zgodnych ja k w p rz y p a d k u In tern et E x plorera) ze sp e c y fik a c ją C SS. W przypadku reguł definiow anych przez autora najw ażniejsze s ą te, które zostały zdefiniow ane w m iej scu w y stą p ien ia elem entu, dalej zd efin io w an e w n a g łó w k u d o k u m en tu zaw ierającego elem en t i n a k o ń c u reg u ły , zd efiniow ane w o d ręb n y m pliku. J a v a S c rip t (JS ) je s t z o rien to w an y m o biektow o ję z y k ie m skryptow ym , w ykorzysty w anym najczęściej do pisania program ów w ykonujących się w przeglądarce intemetowej; (choć m o żn a z n aleź ć p rz y k ła d y p e łn o p ra w n y c h ap lik acji, tw o rz o n y ch w e współpracy; z innym i technologiam i, np. XU L). Z ostał opracow any przez firm ę N etscape i w prow a dzony w porozum ieniu z Sun M icrosystem s do przeglądarki N etscape N avigator w roku 1995. W 1997 ro k u ję z y k ten doczekał się stan d ary zacji p rz e z o rganizację E cm a In ternational (ang. E u ro p e a n a ssociation f o r sta n d a rd izin g Inform ation a n d c o m m u n i-1 catión sy ste m s — E u ro p ejsk ie S tow arzyszenie n a rz ec z S ta n d ary z ac ji S y stem ó w In -j form acy jn y ch i K o m u n ik acy jn y ch ). I
f o -d riN 1- * Przed przystąpieniem do p ra cy z J S
F
_____________________
27
■K o d jęz y k a JS je st interpretow any i nie w y m a g a kom pilacji, a je g o sk ład n ia była m o delo w an a n a podstaw ie składni ję z y k a Java. T o po w o d u je, że n a u k a JS nie pow in n a ' p rzysparzać trudności p rogram istom Javy. Isto tn ą ró ż n ic ą w sto su n k u do Jav y je s t ■ - -słabe ty p o w a n ie zm iennych — m o g ą one p rz e c h o w y w a ć w a rto śc i d o w o ln e g o typu, a w szystkie konw ersje m iędzy typam i o d b y w a ją się autom atycznie. W JS n ie m a fo r m alnie klas, a funkcje s ą jed n o c ze śn ie d efin icjam i ty p ó w i p ro to ty p a m i obiektów . JS opiera się n a w budow anych obiektach, a każd y no w y obiekt je s t k o p ią utw orzonego w cześniej prototypu. N a p ro to ty p ach oparte je s t ró w n ież realizo w an ie dziedziczenia. N a stronach W W W skrypty JS słu ż ą n ajczęściej do obsługi zdarzeń, sp raw d zan ia p o praw ności form ularzy lub budow ania elem entów naw igacyjnych. D ostęp do elem entów przetw arzanego dokum entu zap ew n ia o b iek to w y m odel dok u m en tu (ang. D o cu m en t O bject M odel — D O M ) opracow any p rzez W 3 C i obsłu g iw an y p rzez w szy stk ie p rz e glądarki. D zięki D O M program ista m oże dyn am iczn ie m an ip u lo w ać z aw a rto śc ią d o kum entu, oknem przeglądarki, h isto rią odw ied zin , w y św ietlan y m ad resem czy p a ra m etram i k lienta H TTP. A b y dołączyć skrypty JS w dokum encie H T M L , należy u ż y ć zn ac zn ik a < s c n pt>, ja k poniżej. « s c r i p t t y p e -" t e x t / ja v a s c r ip t " > tre ś ć s k ry p tu :< /s c rip t> .
W przypadku dokum entów X H T M L n ależy p am iętać, że treść skryptu m oże k o lid o w ać z ich składnią. A by teg o u n ik n ą ć , n a le ż y z am ien ić z n ak i & oraz < n a encje lub otoczyć zaw artość skryptu b lo k ie m C D A T A , j a k p oniżej. « s c r i p t t y p e -" te x t/ ja v a s c rip t" > «![C D A T A [ i f (2 « 4) { } ]] > < / s c r ip t > .
W ygodniej je s t um ieszczać skrypty w o so b n y m p lik u — w ó w czas n ie należy używ ać w nim encji — czy blo k u C D A T A . N a z w a i ścieżka do p lik u w sk az y w a n a je s t przez atrybut src znaczn ik a < s c rip t> . A JA X (ang. A syn ch ro n o u s J a va S c rip t a n d X M L ) je s t m ech an izm em , któ ry po zw ala jęz y k o w i JavaS cript k o m unikow ać się z serw erem asyn ch ro n iczn ie — bez p rz eład o w y w an ia strony. Jest to m ożliw e dzięki u ż y c iu now ego w b u d o w an e g o w JavaS cript o biektu — XMLHttpRequest (w p rz eg ląd a rce In tern e t E x p lo re r o d p o w ied n ik iem je s t obiekt XMLHTTP w kontrolce A ctiveX ). O b iek t XMLHttpRequest u d o stę p n ia m eto d y p o zw alające n a przesłanie żądania do serw era i odebranie odpow iedzi ju ż po załadow aniu strony W W W , w trakcie in terak cji z uży tk o w n ik iem . O d p o w ied ź serw era przesyłana je s t w fo rm atach X M L , JS O N lub w p o sta ci zw y k łeg o tekstu.
1.2.3. M V C w aplikacjach w ebow ych W sp ó ln ą c e c h ą w eb o w y ch szk ieletó w p ro g ram isty cz n y c h je s t k o rzy stan ie z u n iw e r salnych, spraw dzonych w praktyce rozw iązań często pojaw iających się, pow tarzalnych p ro b lem ó w projektow ych. T akie p o p raw n e ro z w iąz an ia określane s ą w literaturze m ia n e m w z o rc ó w p ro je k to w y c h , a ich o b sz e rn y k a ta lo g d la p ro je k tó w re a liz o w a n y c h n a p la tfo rm ie Ja v a E E m o ż n a z n aleź ć w k sią ż c e C ore J 2 E E P a ttern s: B e s t
28
Ja va S e rv e r F a ce s i E c lip s e G a lile o . T w o rze n ie a p lik a cji W A/ty
■
L.
*
Przed przystą pie n iem do pracy z JS F
29
P ra ctises a n d D esig n Strategies, 2 n d E d itio n 1. O pisanie tutaj w szy stk ich ty ch ro z w ią j z ań b y ło b y p o n a d m o żliw o ści a u to ra (oraz zapew ne w ytrzym ałość- C zytelnika), rue-' m niej w m iarę p rz ed sta w ian ia p o sz c ze g ó ln y c h ro z w iąz ań , JS F , najbardziej znane w zo rce b ę d ą id en ty fik o w an e i p o k ró tce p rz ed staw ian e. Istn ieje je d n a k je d e n szcze gólny w zorzec, k tó reg o p o z n an ie ju ż n a ty m etapie m o że po m ó c w lep szy m ziozu-j m ie n iu fu n k c jo n o w an ia aplik acji w e b o w y c h z b u d o w an y ch p rz y u ż y ciu tak ic h szkie-" letów ja k Struts, S pring M V C c zy JSF. Je st to w zo rzec m o d el-w id o k -k o n tro le r (ang. M o d el-V iew -C o n tro ller), b ę d ąc y je d n y m z n a jsta rsz y ch w z o rcó w architekturalnych, p ierw o tn ie op raco w an y i sp o p u lary zo w an y dla ję z y k a S m alltalk, a n a stęp n ie po-, w szechnic stosow any do budow y interfejsu użytkow nika na w ielu platform ach i w w lelu jęz y k ac h . P o d staw o w y m z ało że n iem arch itek tu ry M V C je s t odizo lo w an ie w a rstw y logiki bizne sowej od w arstw y interfejsu użytkow nika i u m o ż liw ie n ie d o k o n y w a n ia zm ian w jednej z ty ch w a rstw bez w p ły w a n ia n a drugą. Je st to tzw . se p aracja asp ek tó w (ang. sepoi ation o f concerns), k tó ra w strukturze M V C je s t realizow ana poprzez podział w szystkich k o m p o n en tó w n a trzy grupy: ♦ lo g ik i b iz n e so w e j (M o d e l) — k o m p o n e n ty o d p o w ie d z ia ln e za re a liz a c ję p ro c esó w b iz n e so w y ch i dostęp do z aso b ó w aplik acji (w arstw y p e rsy ste n cji d anych, u słu g zew n ętrzn y ch ). R e p re z e n tu ją stan oraz dane aplikacji, stanow iąc ty m sam y m je j rdzeń. ♦ w id o k u (V iew ) — k o m p o n en ty in te rfejsu u ży tk o w n ik a o d p o w ied zialn e za pre ze n ta c ję m o d elu w sposób z ro zu m iały dla u ż y tk o w n ik a i u m o żliw iając y in terakcję z nim . Je d y n a część aplikacji, z k tó rą u ż y tk o w n ik m a b e zp o śre d n i k ontakt. ♦ s te r u ją c e (C o n tro ller) — k o m p o n e n ty o d p o w ie d zialn e za p rz e tw a rz a n ie i k o o rd y n a cję o b słu g i z darzeń g e n ero w a n y c h p rz e z u ż y tkow nika. K o m p o n en ty te m o g ą zm ieniać m odel i bezpośrednio -wywoływać i m odyfikow ać k o m p o n en ty w idoku. W p rz y p ad k u a p lik a cji W W W o p artych n a tech n o lo g ii serw letó w w zorzec M V C zo stał zaad ap to w a n y p o d n a z w ą M o d e l 2 (w cześniej o p ra co w a n y d la aplik acji w e b o w y ch w zorzec M o d el 1 n ie rozdzielał w arstw logiki biznesow ej i prezentacji). M odel 2 1 w yróżnia się tym spośród innych im plem entacji M V C, że u w zględnia specyficzny sposób, : w jak i aplikacje w ebow e kom unikują się z użytkow nikiem za p o śre d n ic tw e m p ro to k o łu j H T T P. P ro to k ó ł ten je s t b e zs ta n o w y (ang. sta tele ss), co oznacza, że nie p rzech o w u je J żad n y ch in fo rm acji o p o p rz ed n ich tran sak cjach z klientem . P o z w a la to z n a c z n ie j zm n iejszy ć ob ciążen ie serw era, je d n a k je s t kło p o tliw e w sytuacji, gdy np. trz e b a z a -j p am iętać k o n k retn y stan sesji uży tk o w n ik a, k tó ry w cześniej łąc zy ł się ju ż z serw erem . 1 S chem at w z o rca M V C M o d e l 2 dla p latfo rm y Ja v a E E p rz ed sta w io n y z o stał n a ry- j sun k u ł . ł .
1
Polskie wydanie: Deepak Alur, John Crupi, Dan Malks, Core J2EE. Wzorce projektowe. Wydanie II, tłum. Rafał Jońca, Helion 2004.
R ysu n e k 1.1.. Schemat architektury Model 2 w środowislas Java EE
Korzyści wynikające z izolowania warstw widoku i logiki biznesowej W p rzy p ad k u aplik acji W W W separacja w a rstw y m o d elu i w id o k u oznacza, w du ży m uproszczeniu, że kod aplikacji nie pow inien zaw ierać znaczników jęz y k a H T M L , a strona H T M L n ie p o w in n a zaw ierać k o d u aplikacji. Isto tn y m i p o w o d am i, d la k tó ry ch p ro jektanci d ą ż ą do takiej separacji, są: 1. E n k ap su la cja — w y g lą d G U I je s t zaw arty w y łą cz n ie w szab lo n ach , a lo g ik a b izn e so w a w całości znajduje się w m od elu danych. 2 . C zytelność — szablon nie jest program em , którego w ynikiem je st strona H T M L ;
szablon je s t p lik ie m H T M L , który p ro je k ta n t lub p ro g ram ista m o że czytać bezpośrednio. 3. P o d ział p ra c y — graficy (projektanci) m o g ą p ro jek to w a ć sz a b lo n y strony, a p ro g ram iśc i rów n o leg le w ytw arzać k o d aplikacji. Z m n ie jsza to obciążenie p ra c ą p ro g ram istó w i ogranicza k o szty k o m u n ik acji p o m ię d z y p ro jek tan tam i i program istam i. 4. W ielo k ro tn e u ży cie k om ponentów — p ro jek tan c i m o g ą dzielić sz ablony stro n na m n ie jsz e p o d szablony, takie ja k p ask i n a w ig ac y jn e , listy, nagłó w k i, p ask i w yszukiw ania, etc., których m ożna użyć n a w ielu ekranach i w w ielu projektach.
Ja va S e rv e r F a ce s i E clip s e G a liie o. T w o rze n ie aplikacji
»rzec! przystąpieniem do pracy z JS F
31
«O Zil
5 , Pojedyncze zm iany kom ponentów w idoku — dekom pozycja szablonów i użycie
p o d sz a b lo n ó w (jak w y ż e j) p o w o d u je , że p ro je k ta n t, zm ien iając w ygląd dow olnego elem entu stro n y (np. p a sk a naw ig acji), nie m usi ręcznie zm ieniać je g o w yg ląd u n a w szy stk ic h stronach, w k tó ry ch zo stał on w ykorzystany; w y sta rcz a z m ia n a w p lik u z a w ie ra ją c y m je g o szab lo n . B ra k kodu logiki b izn eso w ej w sz a b lo n ie p o z w a la d o d a tk o w o u n ik n ąć b łęd ó w zw iązan y ch z ró żn y m zach o w an iem ty ch sam ych elem en tó w n a stronach. Przykładem m oże być z achow anie tab e li dan y ch n a stronie p rzeznaczonej dla zw ykłego u ży tk o w n ik a i dla a d m in istrato ra (który oprócz p rzeg ląd an ia danych m oże je m odyfikow ać). 6. U trzy m an ie i k o n se rw a cja — zm iana ’w yglądu n ie w y m ag a dokonyw ania zm ian w k odzie aplikacji, je d y n ie w szablonie strony. Jest to m niej ryzykow ne dla stabilności aplikacji, a po n ad to zm iana sz ablonu n ie w ym aga restartu serw era aplikacji. 7. W ym ienne w idoki — pom ieszanie kodu logiki biznesow ej i H T M L uniem ożliwia k o rz y stan ie z tzw . „ sk ó r” (ang. sk in s). S e p a ra c ja w a rstw kodu p o z w ala n a w ytw arzan ie grup sza b lo n ó w o zupełnie ró ż n y m w yglądzie (różniących sie nie ty lk o k o lo ry s ty k ą czy p a ra m e tra m i c z c io n k i), a n a stęp n ie u ż y w an ie ich n a życzenie. 8
, B e z p iec z eń stw o — z azw y czaj sz a b lo n y do p e rso n a liz a c ji w y g lą d u stron (ang. p a g e c u sto m iza tio n ) s ą u d o stę p n io n e u żytkow nikom , analogicznie do m ak r w p ro g ram a ch biurow ych. N ie za b ez p iec zo n e szablony stanow ią po w ażn e ryzyko d la b e zp iec z eń stw a i dlatego n ie p o w in n y zaw ierać kodu w a rstw y m odelu.
O g ó ln y sch em at k o m u n ik acji u ży tk o w n ik a z a p lik a c ją w e b o w ą o p a rtą n a M odel w ygląda następująco. U żytkow nik przegląda stronę w przeglądarce internetowej i przesyła ż ąd an ie (ang. request) doty czące p o b ra n ia in te resu jąc y ch go inform acji np. poprzez k lik n ięcie odpo w ied n ieg o p rz y c isk u form ularza. K o n tro ler w postaci serw letu nasłu chuje żądań użytkow nika zaw ierających określony adres U R L i p o o trzy m an iu żądania p rzetw arza je. W trakcie przetw arzan ia serw iet k o m u n ik u je się z m odelem , a następnie określa, do k tó reg o k o m p o n e n tu w id o k u p rz ek a za ć ste ro w an ie c elem w ygenerow ania odpo w ied zi (ang. resp o n se) n a żądanie. Po p rz ek a za n iu stero w an ia do odpowiedniego; k o m p o n en tu w id o k u (np. stro n y JS P ) m odel w c iąż m o że być o dpytyw any p rz ez ten k o m p o n en t celem p o b ra n ia d a n y ch n iezb ęd n y ch do w y g e n ero w an ia dok u m en tu za-; w ie rając e g o interesujące dla u ż y tk o w n ik a inform acje. O pisany schem at oczyw iście je s t m ocno uproszczony i w w iększości w ebow ych szkiele-: tó w program istycznych p odlega licznym rozszerzeniom , których zadaniem jest zapewnie-j n ie w iększej sk alo w a ln o ści a p lik a cji oraz w y d ajn o ści kodu. W n a jw ię k sz y m stopniu: n a ry su n k u 1 .1 u p ro sz cz o n a zo stała w a rstw a m odelu, z której z p o w o d zen iem można: w y o d ręb n ić w a rstw y o d p o w ie d zialn e za re aliz a cję logiki biznesow ej, zapew nienie trw a ło ści d a n y ch czy in teg rację z system am i zew nętrznym i. M o d el 2 n ie n a rzu c a im -! p le m e n ta c ji p o sz c z e g ó ln y c h w a rstw m odelu. W p rz y p ad k u im plem entacji lo g ik i b iz n e so w e j m o ż n a k o rz y sta ć z k la s P O JO (ang. P la in O ld J a v a O bjects), JavaB eans
(seiializow ane PO JO ) czy EJB (ang. E nterprise J a va P ean). D la zapew nienia trw ałości danvch m o g ą to być obiekty JD O (ang. J a v a D a ta O bjects), obiek ty d o stęp u do d a nych iinplem entujaće w zorzec D A O (ang. D ata A cc e ss O bjects) czy te ż g otow e ro z w iązan ia,’dostarczające im plem entację in terfejsu JP A (ang. J a v a P ersisten c e A p p lit anon P ro g ra m m in g Interface), takie ja k H ib ern ate czy T opL ink. Z k o lei w w arstw ie integracji m o g ą to być kom ponenty u ży w ające tech n o lo g ii k o n e k to ró w JC A (ang. ■Java EE C onnector A rchitecture), u słu g i siecio w e (ang. Web S ervices), tech n o lo g ie ste ro w a n ia p rz e p ły w e m k o m u n ik a tó w im p le m e n tu ją c e in te rfe js JM S (ang. J a v a M e ssa g in g Service), etc. D ość isto tn ą i szeroko sto so w an ą w w e b o w y c h sz k ieleta ch p ro g ram isty cz n y c h m o d y fikacja M odel 2 je s t centralizacja punktu dostępow ego do system u ja k o p o czątkow ego m iejsca obsługi w szy stk ich żądań. D zięk i tem u ro z w iąz an iu m o żn a u n ik n ąć p o w ie la nia logiki sterującej w k o m p o n en tach w id o k u , co z ap e w n ia le p s z ą e la sty c z n o ść k o d u i u łatw ia zarządzanie nim . D okładny op is w ła śc iw o ści teg o ro z w iąz an ia m o ż n a z n a leźć w książce J2EE . W zorce p ro je k to w e . W ydanie 2, w ro z d z ia le „ W z o rce w a rstw y prezentacji” , w części zawierającej opis w zorca Front Controller (w literaturze polskiej nazyw anego często w ysu n ięty m k ontrolerem ). N ajczęściej k o rz y sta się z je d n e g o w y suniętego kontrolera, nie m a je d n a k przeszk ó d , aby ap lik acja u ż y w a ła w ie lu k o n tro le rów . z k tó ry ch każd y ud o stęp n ia inny zb ió r usług, ja k k o lw ie k w o d ró ż n ie n iu o d M o delu 1 w a rchitekturze M odel 2 k o n tro le r zaw sze je s t im p le m e n to w an y za p o m o c ą klasy serw letu. Jest to jed y n e ograniczenie im plem en tacy jn e w z o rca M o d e l 2, gdyż w przypadku pozostałych kom ponentów nie m a takich ograniczeń (co zostało w cześniej pokazane w o dniesieniu do w arstw y m odelu). W w arstw ie w id o k u te c h n o lo g ia JS P m oże być z p o w o d zen iem z astąpiona p rz ez d o w olny system szab lo n ó w (ang. tem p la te engine) dla p latform y Java E E , ja k po k azan o n a ry su n k u 1.1. Innym ro zszerzen iem m oże być w y k o rz y stan ie k o m p o n en tó w p o m o cn ic zy c h , k tó ry ch zadaniem je s t zdefiniow anie przepływ ów sterow ania w aplikacji, zarządzanie w idokam i i w ykonyw anie poleceń (w zorzec A pplication Controller). W d u ż y ch a p lik a c ja c h sto suje się podejście polegające na odizolow aniu kom ponentów w idoku od m odelu p o p rz ez z asto so w an ie k o m p o n en tó w p o m o cn ic zy c h , w s p ie ra ją c y c h p ra cę k o n tro le ra . K o m ponenty te p o śred n iczą w kom unikacji p om iędzy w id o k iem a m odelem (w zorzec View Helper), pobierając dane z m odelu i dołączając je do obiektu żądania w postaci obiektów tran sfero w y ch (w zorzec Transfer O bject). E le m en ty teg o ro z sze rz en ia zo stały w y ró ż nione n a ry su n k u lin ią przeryw aną. S tosow anie m o d elu M V C w a plikacjach w e b o w y c h nie og ran icza się ty lk o do a rch i tektury. D o d a tk o w ą k o rz y śc ią je s t n a rzu c an ie o k reślonych p ra k ty k p ro g ra m isty c z nych — sam o u ży cie w zo rca M V C je s t tego przejaw em , zw ykle też n a rzu c a się p e w n ą k o n w e n cję n azw p ó l w b azie danych, strukturę k atalo g ó w i p lik ó w w pro jek cie, konw encję n a zw klas, szablonów . D zięk i tem u m o żn a u niknąć żm udnej k o n fig u rac ji każdego a sp ek tu takiej ap likacji (choć zw ykle m o żn a te ko n w en cje zm ien ić), a p o w stające p ro jek ty s ą spójne, łatw e do z arząd zan ia p rzez p ro jek tan tó w i z ro zu m ien ia p rzez n o w e osoby.
1-2^1. irr.jŁem entacJa HVT-’u •»« i " ! -
i
'
P osiadanie stan o w eg o in te rfejsu u ż y tk o w n ik a, oparteg o n a k o m p o n en ta ch G D I (aą G raphicai U ser In te rfa c e — g ra fic zn y interfejs u ż y tk o w n ik a ), zarządzanie ich statiej i o b słu g a zdarzeń p rz ez nie g en ero w a n y c h w z b o g a c a ją z n ac zn ie m odel M V C w JSj tak że przypom ina on bardziej klasyczne rozw iązania G U I dla aplikacji desktopow ych Ą architekturę M odel 2, co m o ż n a zauw ażyć n a ry su n k u 1.2. K lie n t
‘
M odel z d arzeń .u ży ty w JS F pozw ala, aby tw orzone aplikacje były m niej zależne od p ro to k o łu HTTP,, i u p raszcza sam proces w ytw órczy. N ie je s t o n je d n a k w stanie za pew nić pełnej funkcjonalności klasycznych G U I — w przypadku obsługi w ielu zdarzeń n a - więcej'.niż jed n y m ekranie użytkow nika po w raca pro b lem bezstanow ego protokołu. N ależy rów nież pam iętać, że każda zm ian a lub m o d y fik a cja w id o k u w y stęp u je z a w sze na żądanie użytkow nika (ew entualnie przeglądarki), co pow oduje, że stan aplikacji, który użytkow nik obserw uje na ekranie, m oże być nieaktualny, gdy zaszły zm iany w warstwie m odelu aplikacji.
K o n te n e r ± „ 2 .4 .1 - K o n t r o le r W arstw a k o ntrolera składa się głów nie z obiektu FacesSerwlet pełn iąceg o rolę w y su niętego kontrolera, plików konfiguracyjnych oraz zbioru m etod obsługi zdarzeń i akcji użytkow nika. FacesSerw let je st punktem początkow ym , obsługującym żądania klientów HTTP. w yzw alanym poprzez w ystępow anie odpow iedniego łańcucha znaków w adresie UR.L (np. * /f a c e s / * ) , i odp o w iad a z a kontrolę w y k o n a n ia w szy stk ic h k ro k ó w z m ie rzający ch do p rz y g o to w a n ia odp o w ied zi. Po w c z y ta n iu p a ra m e tró w p o c z ą tk o w y c h z pliku k o nfiguracyjnego fa c e s-c o n fig .x m l FacesServl e t w y k o n u je n astęp u jące kroki: ♦ Korzystając z fabryki obiektów FacesContextFactory, tw orzy obiekt FacesContext zaw ierający w szy stk ie inform acje dotyczące a ktualnie p rz e tw a rz a n e g o ż ąd a n ia i odpow iedzi. O biekt FacesContext je s t aktyw ny, dop ó k i n ie zo stan ie w y w o ła n a jeg o m etoda r e i ease ( ) , po której żadne w y w o ła n ia do nieg o n ie s ą dostępne, ♦ K orzystając z fabryki o biektów Li fe c y c l eF a cto ry, tw o rz y obiekt L i fe c y c le i przekazuje do niego sterow anie w raz z u tw o rz o n ą in sta n c ją FacesContext. Obiekt Li fe c y c l e nadzoruje przetw arzanie żądania etapam i, w edług określonego porządku, w czasie trw ania których obiekt FacesContext m oże być m odyfikow any. Praca serwletu kończy się praktycznie po przekazaniu żądania do obiektu Li fe c y c l e (w ła ściwie obiektu klasy dziedziczącej po klasie abstrakcyjnej L i fe c y c l e). O biekt Li fe c y c l e zarządza c yklem p rz etw a rza n ia żądania, któ ry je s t p o d z ie lo n y n a sześć faz, tj.: 1
. odtw arzanie w idoku,
2
. aktualizacja stanu kom ponentów ,
3 . w ery fik acja danych, 4. ak tualizacja w arto ści m o d elu n a podstaw ie o d c zy tan y ch i z w ery fik o w an y ch w artości żądania, 5. w yw ołanie m eto d aplikacji, 6
. renderow anie odpow iedzi.
K olejność w y k o n a n ia p o sz c ze g ó ln y c h etap ó w n ie m o że b y ć zm ien io n a, ale m o żliw e jest opuszczenie poszczególnych faz i przejście bezpośrednio do generow ania odpow ie dzi. D okładny opis cyklu ż y cia p rz etw a rza n ia żądania w raz z o p ise m m o żliw y c h sc e nariuszy w yjściow ych znajduje się w rozdziale 4. W tym m iejscu należy zaznaczyć, że to w łaśnie obiekt Li fe c y c l e je s t faktycznie odpow iedzialny za p rzetw o rzen ie żądania. W p o sz c ze g ó ln y c h fazach p rz etw a rza n ia n adzoruje on:
Ja v a S e rv e r F a c e s i E clip se G a lileo. Tw orzenie a p iite x ji
4 k o n stru k c ję d rz ew a k o m p o n en tó w ,
s p e c y f i k a c j ą . JS F n ie n a rzu c a żad n y ch w y m a g a ń co do tec h n o lo g ii k o m p o n e n tó w - w arstw y lo g ik i b izn eso w ej aplikacji, choć n ie d o ty czy to jej ro zszerzo n y ch w ersji, np. Śeam integruje technologie JSF i E JB 3.0. W rozdziale 2. C zytelnik znajdzie w ięcej inform acji na-tem at integracji w arstw y logiki b iznesow ej w aplikacji JSF.
♦ re je strac ję k las n a słu c h u ją c y c h zdarzenia, ♦ re je strac ję k las w e ry fik u ją c y c h p o p ra w n o ść p rzesy łan y ch danych,
c
#■ u sta w ien ie w ła śc iw eg o zesta w u klas ren d era ją cy c h k o d odpow iedzi (W M L , H T M L ),
o
♦ u sta w ien ie w e rsji ję z y k o w e j,
s
♦ p rz etw a rza n ie z d a rz e ń z w iąz an y c h ze z m ia n ą stanu w idoku,
1
W zo rze c delegata b iz n e s o w e g o W zorzec d elegata b iznesow ego (ang. B u sin ess D e leg a te), b ęd ąc y w a rian tem w z o rca fasady (Façade), pozw ala ukryć przed klientem złożoność m odelu, w ystaw iając interfejs dający klientom dostęp do m etod kom p o n en tó w u słu g o w y c h . Jego użycie p o z w a la na zw iększenie w ydajności p o p rzez b uforow anie danych, og ran iczając n iep o trzeb n e o p e racje sieciow e. Strategie im plem entacyjne w z o rca z a k ła d a ją je g o w y k o rzy stan ie jak o pośrednika bądź adaptera. W p rzypadku u ż y c ia z JS F deleg at b izn e so w y m o że pełnić funkcję pośrednika stanow iącego fasadę całej w a rstw y m odelu. M oże bu fo ro w ać zdalne referencje do o biektów kom p o n en tó w u słu g o w y c h lub w rę cz do sam y ch k o m ponentów . D o d a tk o w ą z a le tą tego ro zw iązan ia m o że być p rz y ja zn a o b słu g a w y ją tk ó w aplikacji, p o le g a ją c a n a p rz e c h w y ty w a n iu i o b słu d z e sy tu a cji w y ją tk o w y ch , b łę d ó w i aw arii w ystęp u jący ch w w arstw ie m od elu i p rz etw a rza n ie ich n a w y jątk i aplikacji.
♦ k o n w e rsję i w e ry fik a c ję p a ram etró w żądania, ♦ a k tu a liz ac ję stan u m o d elu , ♦ w y k o n a n ie k o d u m e to d y zw iązanej z a k c ją p rzesłan ia form ularza, ♦ g en ero w an ie o d p o w ie d zi. Ja k łatw o z au w a ż y ć , to w ła śn ie o b ie k t L ife c y c le fak ty c zn ie in icju je i odpow iada k o m u n ik a c ję z o b ie k ta m i o b słu g i z d a rz e ń oraz ele m en tam i in n y ch w a rstw (widokj i m odelu).
Głównym obiektem w zorca je st delegat biznesow y działający po stronie klienta, ja k p o k a zano na rysunku 1.3. M oże on opcjonalnie korzystać z lokalizatora usług (ang. Service Locator), aby w yszukać odpow iednią usługę biznesow ą (ang. B usiness Service).
.4 ,2 . M o d e i P recy zy jn e z d efin io w an ie w a rstw y m o d elu w JS F je s t trudnym zadaniem i w literak rze często p o ja w ia ją się ro z b ie ż n e opinie co do ról, jak ie p o szczególne komponenty tej w arstw y pow inny odgryw ać. W ynika to z istnienia m odelu kom ponentów GU I i ko n ie c z n o śc i p r z e c h o w a n ia ic h sta n u p o stro n ie serw era. S tą d m odel d a n y ch w ISi op ró cz stru k tu ry d a n y ch z w ią z a n y c h z lo g ik ą b iz n e so w ą (m odelu aplikacji) zawtet. d ane zw iąz an e ze sta n em k o m p o n e n tó w G U I (m odel w a rstw y w idoku). Sposób pi w ią za n ia ty ch d w ó ch fa k ty c z n ie w y stęp u jący ch m odeli je s t p rz y c z y n ą w ielu ożywio n y c h d y sk u sji w sp o łe c z n o śc i d ew elo p eró w JSF. D ość k u szący m p o d e jściem wydaję się u m ie sz cz e n ie z aró w n o o b iek tó w log ik i biznesow ej, ja k i stanu kom p o n en tó w Gil w tzw . k o m p o n en ta ch w sp ie rają cy c h , je d n a k ż e ro zw iązan ie to pow oduje, że waistwj w id o k u i m o d elu n ie s ą p ra k ty c zn ie o d siebie odseparow ane. K o m p o n e n ty w s p ie r a ją c e (ang. B a c k in g B ea n s — B B ) p o śre d n icz ą p o m ięd zy wido' kiem i m odelem i są definiow ane przez użytkow nika, który decyduje, ja k w iele umieścić w n ic h logiki b izn eso w ej i k o d u z ap ew n iająceg o trw ałość danych. D o ść p o w sz e c i n y m p o d e jśc ie m je s t m ak sy m a ln e ogran iczen ie ic h roli w y łączn ie do deleg o w an ia l i g ik i b izn eso w ej do m o d e lu aplikacji. W tak im p rzy p ad k u k o m p o n en ty wspierające m a p u ją o b iek ty m o d elu , ta k b y k o m p o n en ty w id o k u m o g ły w yśw ietlić w arto ści pa ra m e tró w ty c h obiek tó w . D z ię k i tem u w a rstw y w id o k u i m o d elu s ą dobrze izolowane In n y m ro z w iąz an ie m je s t sk o rz y sta n ie ze w z o rca B u sin ess D eleg a te, któ ry zmniejsz! z ależn o ści p o m ię d z y o d d z ie lo n y m i w arstw am i i stanow i p o jed y n czy pun k t dostęp! do z d aln y ch u słu g w a rstw y log ik i b iznesow ej (stro n a 35 „W zorzec d ele g ata biznesń w e g o ”). P rz y k ład p ra k ty c z n e g o w y k o rz y stan ia uproszczonej w ersji w z o rca delegata b izn eso w eg o z o stał p o k a z a n y w p u n k c ie 1.3.12, „P odsum ow anie p rz y k ła d u ” , nato m ia st w ięcej in fo rm a cji n a tem a t m o d eli obiektów znajduje się w p u n k c ie 3.1, „Kom p o n e n ty z a rz ą d z a n e ” .
ż y s u n e k 1 .3 .
Wzorzec delegata Biznesowego
Klient
Delegat biznesowy
używa w
Usługi biznesowe A
używa tworzy/wyszukuje TOM
Uwaga
Istn ie ją d u że ro z b ie ż n o ś c i w ś ró d d e w e lo p e ró w na te m a t roli i m ie js c a k o m p o n e n tó w w s p ie ra ją c y c h (B B ) w a rc h ite k tu rze M V C . W a rty k u le P u t JS F to W ork (n a s tro n ie w w w .ja va w o rld .co m ) D e re k Y a n g S h e n u m ie s z c z a B B w w a rs tw ie m o d e lu ze w zg lę d u na t o , że s e p a ru ją o n e d e fin ic ję k o m p o n e n tó w Ul o d o b ie k tó w re a liz u ją c yc h p rz e tw a rza n ie i p rz e c h o w yw a n ie d a n y c h . T a k ie p o d e jś c ie z o s ta ło za a d a p to w a n e w n in ie js z e j k s ią ż c e , c h o ć n a le ż y z d a w a ć s o b ie s p ra w ę z t e g o , ż e j e s t to p e w n e u p ro s z c z e n ie — B B za w ie ra ją d e fin ic je akcji b ę d ą c e ro z s z e rz e n ie m fu n k c jo n a ln o ś c i k o n tro le ra , W s zc z e g ó ln y c h p rz y p a d k a c h B B m o g ą p rz e c h o w yw a ć i g e n e ro w a ć p o d w id o k i, c o s y tu o w a ło b y je w w a rs t w ie w id o k u . T a k a s y tu a c ja m o że m ieć m ie js c e , g d y d rze w o k o m p o n e n tó w ro zw ija n e j e s t d y n a m ic zn ie w k o d zie Ja vy , a w ią za n ia p o m ię d z y s z a b lo n e m s t ro n y i d rz e w e m k o m p o n e n tó w re a liz o w a n e s ą przez instan cje ko m po nen tów G U I inicjo w anych w kodzie BB (o p is za a w a n so w a n ych te c h n ik g e n e ro w a n ia w id o k u zn a jd u je s ię w d a ls z y c h ro zd z ia ła c h ).
Ja va S e rv e r F a c e s i E c lip s e G a lile o. T w o rze n ie a plika cji
36
1 .2 .4 .3 . W idok C e n tra ln y m e le m e n te m w a rstw y w id o k u je s t d rz e w o k o m p o n e n tó w — kolekc k o m p o n en tó w in te rfejsu u ż y tk o w n ik a (ang. U ser In terfa c e — U i), które przechow uj! stan in te rfejsu u ż y tk o w n ik a . K o rz eń d rz ew a rep re z en to w a n y je s t z a p o m o c ą obiek k lasy UIViewRoot, a n a stro n a ch JS P je s t o n o sad zan y p rz y u ż y c iu znaczn ik a widok z b ib lio tek i JS F C ore. K a żd a stro n a JS P (bądź innej technologii w idoku) je zg o d n a z JS F, gdy n a stro m e z aw ie ra d o k ład n ie je d e n z n aczn ik w idoku. Podobnie ja ko m p o n en ty g raficzn e u ż y w an e w b ib lio te k a c h S w ing i A W T (ang. A b stra c t BindoT oolkif), k o m p o n en ty JS F im p le m e n tu ją zm o d y fik o w a n y w z o rz e c k o m p o z y tu (pa poniżej „W zo rzec k o m p o z y tu ”). Is to tn ą z a le tą tego ro z w iąz an ia w JS F je s t m ożliw o re n d ero w an ia p o sz c z e g ó ln y c h k o m p o n en tó w b ąd ź całego d rzew a w sposób od w ie d n i d la o k re ślo n eg o ty p u a p lik a cji k lie n ta (p rzeg ląd ark a internetow a, urządzeń przenośne itp.). P rzykładem je st w ykorzystanie języ k a znaczników W M L (ang. Wirele, M a rku p L a n g n a g e ) do o b słu g i żąd a ń p rz e sy ła n y c h z u rząd zeń przenośnych.
Przed przystą pie n iem do p ra c y z JS F
TSF dostarcza zbliżonej do oryginału, choć nieco uproszczonej im p lem en tacji w z o rca v mpożYtu — n i 6 odróżnia, k o m p o n en tó w złożo n y ch od p o jed y n czy ch . N a ry su n k u ' i °4 elem ent, liścia zo stał z az n aczo n y in n y m kolorem , ja k o że n ie je s t w y k o rz y sty w a n y w :modelii kom ponentów JSF. JSF im plem entuje interfejs w postaci abstrakcyjnej Idasy U l C o m p o n e n t , p o której d z ie d z ic z ą w szy stk ie im plem entacje k o m ponentów . W yg o d n e tw orzenie kom p o n en tó w u m o żliw ia ró w n ie ż k lasa abstrakcyjna UIComponentBase, k tó ra definiuje dom yślne z ach o w an ie w szy stk ic h m etod UlComponent. S tandardow o JS F dostarcza zbiór p o d sta w o w y c h k o m p o n en tó w , tala ch ja k form ularz (IJIForm) czy p an el (UIPanelY, ale użytkow nik m oże łatw o tw orzyć w łasne k o m p o n en ty , ro z sz e rz a ją c je d n ą z wyżej w ym ienionych klas bazow ych, co pozw ala tw orzyć zarów no ele m en ty term i nalne, j a k i złożone. ■ R ysunek 1.4. Struktura w zo i ca kom pozytu
K om ponent + + + +
W trakcie projektow ania w idoku m odel kom ponentów UJ stanow i podstaw ę do budów drzew a kom ponentów . K om ponenty, z których zbudow ane je st drzew o, m ogą korzys opcjonalnie z oddelegow anych do ich obsługi obiektów pom ocniczych, zapew niających : 1
operacj a() dodaj () usuń() pob ierzD zieck o ()
..* dziecko
0
♦ k o n w e rsję w arto ści p a ra m e tró w k o m p o n e n tu do (z) ty p u znakow ego, ta k b y m o żn a b y ło p rz esy ła ć je p ro to k o łe m tek sto w y m (konw ertery), ♦ w ery fik ację p o p ra w n o śc i d a n y ch (w alid ato ry ), ♦ renderow anie kom ponentów w dokum entach W W W przesyłanych do użytkow nika' oraz d e k o d o w an ie stan u k o m p o n en tó w z żądań p rz esy ła n y ch o d użytk o w n ik a (renderery).
:
i — o p eracja))
Podobnie ja k k orzeń drzew a, pozostałe k om ponenty JSF s ą reprezentow ane n a stronacH JS P z a p o m o c ą z n ac zn ik ó w b ib lio te k JS F H T M L i JS F C ore. W ią z a n ia pom iędzj! z n aczn ik am i n a stro m e a in stan cjam i lub w ła śc iw o ścia m i instan cji kom p o n en tó w rnj terfejsu u ż y tk o w n ik a z n a jd u ją się w k o d z ie k o m p o n en tó w w spierających.
K om pozyt
Liść + + + +
operacja)) dodaj () usuń() pob ierzD zieck o ()
ł rodzic
Wzorzec kompozytu W zo rz ec k o m p o z y tu (ang. C o m p o site ) to stru k tu ra ln y w z o rz e c p ro je k to w y , któregoj celem je s t um ożliw ienie składania o b iek tó w w grupy, tak b y m ogły być one traktowanej p rz ez u ż y tk o w n ik a ja k p o jed y n c zy obiek t. W zo rzec z n ajd u je zasto so w an ie w tw orze n iu takiej re p re z en tac ji stru k tu r d rz ew ia sty ch , k tó ra p o z w a la u ży tk o w n ik o m ignoro-| w ać różnice m ię d z y c z ę ś c ią b ąd ź c a ło ś c ią d rz ew a a je g o p o jed y n c zy m i liśćm i. P rzy kładem takiej struktury drzew iastej m o że być obiektow a reprezentacja graficznego interfejsu u ż y tk o w n ik a , w której k o n ten e ram i s ą okna, ra m k i czy p a n ele, a liśćm i ele m en ty p o d staw o w e, j a k p rz y c isk i c z y p o la tek sto w e. 1 K lien ty u ż y w a ją in te rfejsu k la sy K o m p o n e n t w celu k o m u n ik o w an ia się z obiektam i w ystępującym i w składanej strukturze. Jeśli o dbiorcą je st liść, to żądania są realizowane bezp o śred n io . Jeśli o d b io r c ą je s t k o m p o z y t, to z w y k le p rz e k a z u je o n ż ąd a n ia swoim kom ponentom -dzieciom , opcjonalnie w yk o n u jąc przed przek azan iem i po przekazaniu dod atk o w e operacje. S tru k tu ra w z o rc a k o m p o z y tu z o stała p o k a za n a n a ry su n k u 1.3
Uwaga
N ie n a le ży m ylić w z o rc a C o m p o s ite z p o d o b n ym w s e n s ie Idei w zo rc e m C om p ositeView , k tó ry j e s t w zo rc e m w a rs tw y p re ze n ta c ji Ja v a E E I u m o żliw ia k o n s tru o w a n ie d o k u m e n tó w s tro n W W W p o p rz e z z ło że n ie ich z m n ie jszyc h e le m e n tó w s k ła d o w yc h , np. na p o d s ta w ie s z a b lo n ó w (u m o żliw ia ją c k o rzy s ta n ie ze w s p ó ln y c h n a g łó w k ó w , s to p e k , p a n e li n a w ig a c y jn yc h w w ie lu m ie js c a c h d o w o ln e g o z g e n e ro w a n ych d o k u m e n tó w ).
Role p ro je k to w e w y n ik a ją c e z podziału p ra c y w JSF D zięki zasto so w an iu M V C p o d z ia ł p ra c y w projektach JSF je s t w y ra źn y i p o z w ala n a szybkie i łatw e w y tw a rz a n ie a p lik a cji. B io rąc p o d u w a g ę k ry te riu m p e łn io n y c h ró l w projekcie, w śró d c zło n k ó w zesp o łu w ytw ó rczeg o m ożem y w y ró żn ić (n a p o d staw ie dokum entacji S un M icrosystem s):
38
Ja va S e rv e r F a ce s i E c lip s e G alilee. Tw orzenie a plika cji WyS
3
♦ p ro jek tan tó w stron — d o św ia d c zo n y c h w u ż y w an iu jęz y k ó w skryptow ych do ! p ro je k to w a n ia stron (np. H T M L ); ich p ra c a z JS F p o leg a n iem al w yłącznie na-’ k o rz y stan iu z b ib lio tek znaczników ;
♦ d o sta w c ó w n a rzę d zi do sz y b k ieg o i łatw e g o w y tw arzan ia oraz w drażania aplikacji. P o d c z as re aliz a cji w ielu p ro jek tó w poszczeg ó ln i członkow ie zespołu p e łn ią w ięcej h | j e d n ą ro lę (czego d o św ia d c z y ró w n ie ż C z y te ln ik , re aliz u ją c p rz y k ła d o w ą aplikację" ja k k o lw ie k w a rto ro z p a try w a ć u ż y te c z n o ść JS F ró w n ie ż z p e rsp ek ty w y ró l projel to w y c h . K ry te riu m ró l p ro je k to w y c h z o sta ło u w z g lę d n io n e w strukturze rozdziało), k siążk i, p rz y k ła d o w o ro z d ział 3. d o ty cz y u ż y c ia p o d staw o w y ch elem entów JSF a d reso w an y do osób p e łn ią c y c h ro le p ro je k ta n tó w i p rogram istów aplikacji, rozdział 5. je s t a d reso w an y do p ro g ra m istó w k o m p o n en tó w , a n in iejszy rozdział zaw iera ',-ek in fo rm a cji d o ty czący ch in stalacji i k o n fig u rac ji n a rzę d zi dew eloperskich.
1 .2 .5 . K luczow e elem enty JS F — podsumowanie D efinicje n ajw ażniejszych elem entów szkieletu JS F zostały zam ieszczone w tabeli l k
1 ,3 , Pierw sza ap lik a c ja JSF w środow isku E c lip s e
33
T a b e la 1.2- K lu czo w e e le m e n ty JSF
Opis
O b ie k t
-Komp'■onenł U l
♦ p ro g ram istó w aplikacji, k tó rzy p ro g ra m u ją o biekty w arstw y m odelu, logikę b izn eso w ą, k lasy o d p o w ie d zialn e za o b słu g ę zdarzeń, w alidatory i naw igację; p o z a ty m m o g ą d ostarczać w ła sn e ro z w iąz an ia w p ostaci klas pom ocniczych; ♦ p ro g ra m istó w k o m p o n e n tó w — d o św ia d c z o n y c h w p ro g ram o w a n iu G U I i p re fe ru ją c y c h tw o rz e n ie k o m p o n e n tó w u ż y tk o w n ik a z w yk o rzy stan iem ję z y k a Java;
i z e-', przystąpieniem do p ra cy z JS F
o
' Stanowy obiekt, przechowywany na serwerze, dostarczający odpowiednią funkcjonalność interakcji z końcowym użytkownikiem. Implementowany w postaci obiektów JavaBean stanowi podstawowy element do budowy drzewa komponentów. Obiekt odpowiedzialny za wyświetlanie komponentu U l po stronie końcowego użytkownika. Komponent U l może posiadać wiele rendererów odpowiedzialnych za jego wizualną prezentację, a renderer może wizualizować wiele komponentów Ul.
R enderei
'
Zestaw tematycznie powiązanych rendererów. Może implementować spersonalizowany wygląd aplikacji (tzw. s k ó r y — ang. skin , look& feeT) bądź właściwy sposób wyświetlania komponentów U l w specyficznych urządzeniach, jak telefony komórkowe, czytniki ekranu itp.
• R e n d e r-iit
K om ponent w sp ierający (B acking B ean)
Komponent implementowany w postaci obiektu JavaBean, przechowujący wartości komponentów Ul bądź referencje do nich oraz implementujący metody odpowiedzialne za obsługę zdarzeń i akcji generowanych przez użytkownika.
Konwerter
Powiązany z komponentem U l obiekt odpowiedzialny za konwersję wartości parametrów komponentu U l na postać i z postaci łańcucha znakowego. Wymagany ze względu na użycie protokołu tekstowego do przesyłu danych (HTTP, WAP).
Walidator
Powiązany z komponentem Ul obiekt odpowiedzialny za weryfikację poprawności i kompletności danych przesyłanych od użytkownika końcowego.
Metoda obsługi zdarzeń (ang. even t listener)
Metoda odpowiedzialna za przetwarzanie zdarzeń generowanych przez skojarzony z nią komponent UL Zdarzenia m ogą dotyczyć zmiany wartości bądź przesłania formularza (zdarzenie akcji).
Metoda akcji (ang. action han d ler)
Metoda pozwalająca na wykonanie kodu logiki biznesowej aplikacji, wyzwalana przesłaniem formularza (poprzez kliknięcie przycisku bądź odnośnika). Wartość zwracana może wpływać na nawigację.
Komunikat
Dowolna informacja (lub komunikat o błędzie) przesyłana do użytkownika końcowego.
W celu w ykonania i p rz etesto w an ia aplikacji z o stan ą w y k o n a n e n astęp u jące kroki: W p o n iż sz y m p rz y k ła d zie C z y te ln ik z ap o z n a się k ro k po k ro k u ze w szystkim i c z y i n o śc iam i n iez b ęd n y m i do w y tw o rz e n ia i u ru c h o m ien ia pierw szej, prostej aplikacji opartej n a JS F w śro d o w isk u E clip se . P rz y k ła d zaw iera: ♦ op is p ro c e só w in stala cji n iez b ęd n y c h n a rzę d zi, w tym środow isk u ru c h o m ien io w e g o i d ew elo p e rsk ieg o , ♦ op is p ro c e s u im p le m e n tac ji i te sto w a n ia a p lik a cji K alk u lato r T em peratur, p rz elic z ając e j sto p n ie F a h re n h eita n a sto p n ie C elsiusa, zaw ierający k o d y ź ró d ło w e i z rzu ty ekranow e, ♦ p rz y b liże n ie n a jw aż n ie jsz y ch ro z w ią z a ń słu ż ąc y ch do projek to w an ia aplikacji JS F w śro d o w isk u E clip se , ♦ ilu stra c ję n a jw aż n ie jsz y c h k o n c ep c ji a rch ite k tu ry JS F, w ym ienionych w ro z d ziale 1 .2 .
1. U tw o rzen ie p ro je k tu w e b o w e g o a p lik a cji JS F — p o sia d a ją c e g o o d p o w ie d n ią stru k tu rę k ata lo g ó w oraz niezb ęd n e p lik i k o n fig u racy jn e (■w eb.xm l i fa c e s-c o n fig .x m l w k atalo g u src/w eb a p p /W E B -IN F ). 2. Z definiow anie log ik i bizn eso w ej — k lasa Kai kul a to r. 3. Z definiow anie i zare je stro w a n ie kom p o n en tu w sp a rc ia — k la sa Kai ku l atorB 8. 4. U tw orzenie strony do w p ro w ad z an ia danych — K a lku la to r js p . 5. U tw orzenie strony w y św ietlającej w y n ik — W ynik.jsp. 8
. Z adeklarow anie re g u ł n a w ig ac ji w p lik u fa ce s-c o n fig .xm l.
7. U ruchom ienie i p rz etesto w an ie działania aplikacji n a lok aln y m serw erze.
40
Ja va S e rv e r F a c e s i E c lip s e G a lile o . T w o rze n ie a p lik a cji '
,i
1 .3 .1 . Instalacja kontenera se rw le tó w W zw iązk u z p o trz e b ą u ru c h am ia n ia i te sto w a n ia p ro jek to w a n y ch a p lik a cji wykosty w an y je s t tn k o n ten e r se rw letó w A p a ch e T o m cat 6.0.18. S z c ze g ó ło w a dolcumei cja p roduktu oraz p lik i instalacyjne dla ró ż n y ch system ów operacyjnych udostęps ą p o d a d rese m h ttp ://to m c a t.a p a c h e .o r g . In sta la c ja k o n ten e ra p o le g a n a p o b skom presow anego pliku instalacyjnego i rozpakow aniu go w wybranej lokalizacji guracja k o n ten era c zy też w e ry fik a c ja je g o in stala cji m o g ą b yć w y k o n an e p rz y u ż y | n a rzę d zi śro d o w isk a E clip se, co je s t o p isa n e w d a lszy c h czę śc ia c h teg o ro zd ziału ori w rozdziale 6 . ■§ N a decyzję o w y b o rz e A p ach e T o m c at sp o śró d w ielu k o n k u re n cy jn y ch produkty m ia ła w p ły w p rzed e w szy stk im je g o d u ża p o p u larn o ść, p ro sto ta o bsługi oraz bard^ : dobre w sparcie ze strony śro d o w isk a E clip se W T P . Z aaw an so w an i u żytkow nicy 8 nych serw erów aplikacji czy k o ntenerów m o g ą bez p roblem u zastąpić k o n ten er Tomes p re fe ro w a n y m p rz ez siebie ro z w iąz an ie m — o ile d o stęp n y je s t d la n ieg o adapter pj zw ala ją c y n a in tegrację ze śro d o w isk ie m E clip se W T P . S tan d ard o w a in stala cja Wjj p o z w ala n a in teg rację n a stęp u jąc y c h serw erów : A pache T o m cat v. 3.x - 6 .x, IBjj W eb S p h ere v. 6.0, JB o ss v. 3.2.3 - 5.0, O b je c t W eb JO nA S v. 4, O racle OC 4 l | 10.1.3, ale tę listę łatw o m o żn a ro z sze rz y ć. =?
W tym celu z m enu aplikacji w ybieram y W indow /P references/Server/R untim e Environ ments, a p o o tw arciu okna S e rv e r R u n tim e E n viro n m en ts klik am y p rz y c isk A d d łj ekranie pojaw i się okno dialogow e N e w Server R untim e E nvironm ent, w którym klikam łącze D o w n lo a d a d d itio n a l s e rv e r a d a p ters, co pow oduje o tw a rc ie k o le jn e g o okna^ In sta ll N e w E xtension. W n o w y m oknie a u to m a ty c zn ie p o b ieran e i w y św ietlan e sąnj form acje o d o stęp n y ch a d ap tera c h d la se rw e ró w aplikacji. N a w y św ietlo n ej liście al apterów zaznaczam y w ybór i akceptujem y go przyciskiem N ext, przechodząc do kolejni strony zaw ierającej in fo rm acje o w a ru n k ac h licencji. Po z aa k ce p to w an iu w a ru n k | licen cy jn y ch i k lik n ię ciu p rz y c isk u F in ish o d p o w ie d n ie ro zszerzen ie je s t automatyi nie pob ieran e i in stalo w an e p rz ez śro d o w isk o E clipse. W o pisany w yżej sp o só b m o żn a p o b ra ć a u to m a ty c zn ie ad ap tery d la se rw e ró w Apacl G eronim o, Sun G lassFish EE5 i E E 6 , M ortB ay Jetty, O racle W eb L ogic, SA P NetWeav czy IB M W eb S p h ereA S CE. W p rz y p a d k u innych, m niej p o p u larn y c h p ro d u k tó w i a ptery trze b a in stalo w ać ręczn ie lub z w y k o rz y stan ie m k re ato ra in stalo w a n ia rozszi rz eń (o p cja H e lp /In sta ll N e w S o ftw a re w m en u aplikacji), p o d ając ich lokalizacj Szczegóły m ożna znaleźć w dokum entacji środow iska E clipse, dostępnej p o d adrese h ttp ://h elp .e c lip se .o rg /g a lile o /in d e x .jsp .
1 .3 .2 . Instalacja środow iska E clipse Galileo Eclipse to całkow icie darniow e, uniw ersalne środow isko dew eloperskie, służące do tw rżenia ró żn eg o typu aplikacji. Je st ono o fe ro w a n e n a licencji C o m m o n P u b lic Licem (C P L ), zgodnej z lic e n c ją O p en S o u rc e In itia tiv e (O S I). D z ię k i tem u m o ż liw e je: k o m e rc y jn e w y k o rz y sty w a n ie E clip se , d o stę p do je g o k o d u ź ró d ło w e g o c z y dystif
♦ przed przystąpieniem do pracy z JS F ___________
41
bucja w dow olnym kraju. Pakiety instalacyjne Eclipse, m ające postać zw ykłych plików archiwalnych, udostępnione śą na-oficjalnej strom e sp o łe c z n o śc i E clip se , p o d adresem tyrp /w w w . éclipse, o rg /d o w n lo a d s. Poniew aż E clipse to znacznie w ięcej n iż tylko z in te g ro w an e śro dow isko p ro g ram i styczne Javy (ang. Integrated D evelopm ent E nvironm ent — ID E ), na jeg o stronie m ożna znaleźć w iele k onfiguracji p rz ez n ac zo n y c h do ró ż n y c h z astosow ań. Z a w ie ra ją one oprócz najnow szej w ersji platfo rm y E clip se v .3 .5 .0 (G alileo ) ró w n ież p a k ie ty w tyc ze k program istycznych (ang. p lu g -iń ), z a p e w n ia ją c y c h w sp arcie śro d o w isk a d la tak ró ż nych zastosow ań, ja k m odelow anie aplik acji w ję z y k u U M L , ra p o rto w an ie, tw orzenie aplikacji dla urząd zeń m o b iln y c h czy p ro g ram o w a n ie w ję z y k a c h C /C + + oraz PH P. Aby zrealizow ać cele opisane w e w stępie książki, zalecana je s t instalacja w ersji E clipse I D E f o r Java E E D evelopers (189 M B ), dostępna w p lik u eclipse-j ee-galileo-w in32 .zip . W ersja ta zaw iera p rzed e w szy stk im p latfo rm ę W e b T ools P la tfo rm (W T P ), k tó ra je s t zbiorem zintegrow anych narzęd zi do tw o rz en ia aplik acji w eb o w y ch . W szy stk ie p rz y kłady p rezentow ane w książce zostały p rz y g o to w a n e w tej w ersji środow iska. Instalacja E clipse je s t w yjątkow o łatw a i p o le g a n a ro z p ak o w a n iu skom presow anej zaw artości p lik u do w yb ran eg o katalogu. N a le ż y p a m ię ta ć, że in stalacja E clipse nie zaw iera śro d o w isk a u ru c h o m ie n io w e g o Ja v y — trz e b a j e z ain stalo w a ć w cześn iej. W przypadku środow iska E clipse G alileo zalecane je s t u życie środow iska uruchom ie niowego Javy w w ersji co najm niej JTRE 5 (gdy p o sta w a ła ta książk a, b y ła w y korzy stywana w ersja JR E 6 U pdate 17). Jeszcze lepszym rozw iązaniem je st instalacja dystrybu cji Java D evelopm ent K it (JD K), która oprócz w budow anego środow iska JR E posiada wiele narzędzi do w ytw arzania oprogram ow ania oraz kody źródłow e klas Javy. Po pierw szym uru ch o m ien iu śro d o w isk a E clip se pojaw i się ekran p o w italn y p rz ed stawiony na rysunku 1.5. W centralnej części okna w yśw ietlane są ikony z odnośnikam i do stron zaw ierający ch doku m en tację p o d p ro jek tó w E clipse w c h o d zą c y ch w skład in stalacji W TP, w tym dokum entację n a rzę d zi w e b o w y c h (W eb), n a rzę d zi do integracji środowiska z serw eram i H T T P i Java E E (Server T ools) czy w sparcia dla technologii JSF. Aby rozpocząć pracę ze śro d o w isk iem E clipse, w y sta rcz y zam k n ąć kartę z oknem pow italnym — w ten sposób p rzech o d zim y do e k ran u z aw ierająceg o o b szar roboczy.
Wtyczki programistyczne w Eciipse W szystkie narzędzia, którym i się posługujem y w środow isku Eclipse, s ą w istocie w tycz kam i p ro g ram isty cz n y m i — je s t to je d n a z n a jw a ż n ie jsz y c h k o n c e p c ji a rc h ite k tu ry Eclipse. W tyczki s ą lokalizow ane i ład o w an e p o d c za s p ro c e su u ru ch am ian ia, co p o zw ala n a łatw e ro z sz e rz a n ie fu n k c jo n a ln o śc i E clip se . W y sta rc z y w ty m c elu p o b ra ć bądź utw orzyć p ak iet w ty c ze k i u m ieścić je w o d p o w ie d n ic h k atalogach. W ten spo sób m ożem y skorzystać z bardzo w ie lu c ie k aw y ch ro z sze rz eń , np. E clipse M odelling T ools (E M T ), H ibernate T ools czy JB oss T ools. E clipse G alileo p o sia d a specjalne kreatory instalacji p ak ietó w w tyczek. A b y z a in stalo w a ć w tyczkę, należy w y k o n ać n a stę pujące kroki: 1. Z m enu aplikacji w y b ieram y p o lec en ie H e lp /In sta ll N e w S oftw are. P o jaw i się okno k re ato ra In sta ll, zaty tu ło w an e A v a ila b le Softw are.
R ysunek 1 .5 , Ekran powitalny wyświetlany po pierwszym uruchomieniu Eclipse Galileo
Jeśli kontener serw letów je s t z ain stalo w an y n a dysku, należy w śro d o w isk u E clipse dodać środow isko u ruchom ieniow e dla aplikacji w ebow ych. W c elu a u tom atycznego wykrycia i zintegrow ania środow iska uruchom ieniow ego w ykonujem y n astępujące kroki:
w
2. W polu W ork with w pisujem y adres, pod którym został udostępniony odpow iedni! pakiet wtyczek. Jeśli chcem y przejrzeć p redefiniow aną listę w itryn podprojektów 1 Eclipse, w ybieram y opcję - A l l A vailable Sites—. G dy rozw iniem y dow olny węzeł, j w yśw ietli się lista w tyczek w chodzących w sldad p a k ie tu w ra z z in fo rm a cja m i j 0 ich dokładnej w ersji. 3. Z aznaczam y o d p o w ie d n ią opcję i klik am y p rz y c isk N ext. W z ależn o ści od p ro d u cen ta w ty czk i m oże w yśw ietlić się okno k reato ra In sta ll/R ev ie w ' L icenses, w k tó ry m w y b ieram y opcję I a c ce p t term s o f the license agreem ents 1 klik am y p rz y c isk F in ish . O kno k re ato ra In s ta ll z o stan ie z am k n ięte, ’ a po p o b ra n iu i z a in sta lo w a n iu w ty c ze k śro d o w isk o E clip se w y św ietli o k n o d ia lo g o w e z z a p y ta n ie m , czy p o n o w n ie u ru c h o m ić śro d o w isk o w celu aktyw acji n o w y c h funkcji. łj W ykorzystanie m en e d że ra aktu alizacji nie je s t jed y n y m dostępnym sp o so b em insfg lowania pakietów — ale je st zalecane ze w zględu na w ygodę i bezpieczeństw o. DokładnA opis źródeł in stalacji o ra z sp o so b ó w a k tu alizacji p a k ie tó w m o żn a z n aleź ć w książę* E clipse. P o d rę c z n ik p ro g r a m is ty 2. P ra c ę z w ty c z k a m i u ła tw ia p e rsp e k ty w a P h ig -i D evelopm ent oraz grupa okien dostępna z m enu aplikacji W indow/Show View/OtheriŁ /P lu g -in D evelo p m en t. P o z w a la ją one na p rzeg ląd a n ie i m o d y fik o w an ie rejestru wtffj czek, podgląd zależności czy analizę zainstalow anych w ty czek w aktyw nej przestrzeli roboczej (szczegółow a dokum entacja je st dostępna pod adresem http://help.eclipse.orm gcilileo/index, jsp).
1. Z m enu aplikacji w y b ieram y W indow /P references. W w y św ietlo n y m oknie pojaw i się po lewej strom e lista grup preferencji, z której rozw ijam y w ęzeł Server i w ybieram y opcję R u n tim e E nvironm ents. Z praw ej strony ek ran u u k a ż e się lista środow isk u ruchom ieniow ych dla aplikacji w ebow ych (początkow o pusta). 2. Za pom ocą przycisku Search urucham iam y okno dialogow e Search F o r R untim e E n v iro n m e n ts, w k tó ry m w y św ie tli się stru k tu ra k a ta lo g ó w w sy stem ie operacyjnym. A by zawęzić obszar poszukiw ań, w oknie z lewej strony w ybieram y w ęzły pro w ad zące do lo k alizacji, w której um ieszczo n o p ro g ra m serw era. Z atw ierdzam y p rz esz u k iw a n ie p rz y cisk iem O K i je ś li w p o d an ej lokalizacji b ęd zie w y k ry ty i ro z p o z n a n y se rw e r ap lik a cji (k o n te n e r se rw le tó w ) to zostanie on au tom atycznie d odany do listy, ta k ja k p o k a za n o n a ry su n k u 1 .6 . Rysunek 1.6. Lista środowisk uruchomieniowych po wyszukaniu serwera Apache Tomcat
(A d d ,-re m o v e , o r e d i t s e r r e c .t u n t i m e e n v ir o n m e n ts . ' S e rv e r r u n tim e e n v iro n m e n ts ;.
D ata M a n a g e m e n t H elp
.N a m e
'
.
- ...ty p e .
.........
f
. :
Add-
in sta ilf'U p d a te i □ a p a c h e - to m c a t- ô .O J - à ..,
A p a c h e T o m c a t y6 ,0
I
Java EE
:A l
■J
P lu g -in D e v e lo p m e n t
j
. 4
R e m o te S y s te m s R u n /D e b u g
f
L a u n c h in g
j
P ro file rs .R u n tim e E n v ir o n m e n ts , T asks’
Polskie wydanie: Sherry Shavor, Jim D ’Anjou, Scott Fairbrother, Dan Kehn, John Kelierman, Pat McCarthy, Eclipse. Podręcznik program isty, tłum. Adam Bochenek, Piotr Rajca, Jaromir Senczyk, Helion 2004.
''
j
I
OK
i •
C ancej
j
44
Ja va S e rv e r r a c e s i E c lip s e G a lile o. T w o rze n ie a p lik a cji
1’S ;
Przeii przystą pie n iem tło pra cy z IST
p n.o rd z ia l 1-
G dy serw er nie je s t rozp o zn aw an y p rzez W T P lub p o d a liśm y z łą lokalizację, p o jaęą się kom unikat N o new server runtim e environm ents w ere found. M ożem y w tedy ręcznie; dodać serw er za p o m o c ą k re ato ra u ru c h a m ia n e g o p rz y c isk ie m A d d . P e łn a in teg racją z serw erem aplikacji pozw alająca na k o rz y sta n ie z k re a to ró w do edycji je g o par; trów serw era m ożliw a je st dopiero po utw orzeniu instancji serw era, n a której wdrożony 2 i u ru chom iony m a zostać n a sz p ro jek t (co je s t o p isan e w dalszej części rozdziału).
i ¡ J S F C a p a b ilitie s ^
■Jh F irttc le m e n ta ric -n lib r a r y ~j p Ł
U se- L o r a " ,
za rz ą d z a j b ib lio te k a m i
Wskazówka
J e ś li C z yte ln ik c h c e n a p ra w d ę s z y b k o s k o m p ilo w a ć , u ru c h o m ić i p rz e te s to w a ć za s o b y pro jektu w e b o w e g o (z a ró w n o s ta ty c z n e g o , ja k 1 d y n a m ic zn e g o ), m o że w tym c e lu w yk o rzy s ta ć s e rw e r J 2 E E P re v ie w . Z a s to s o w a n ie go u w a ln ia u żytk o w n ik a od k o n ie c zn o śc i instalacji i integracji ze w n ę trzn yc h s e rw e ró w ze ś ro d o w isk ie m E c lip s e , p o zw a la ją c w te n s p o s ó b z a o s z c z ę d z ić d u ż o c z a s u .
p o b ie rz b ib lio te k i .
-o
;SF C o n f tg u r s o c n R i e t ; /'.^E B -IM F /faces-cor.fíg.xm S ęonf gutesT U ~ F 7 F T a - sppiiccEtc . 'o u -e I F 1
S e rw e r J 2 E E P re vie w je s t w is to c ie o s a d z o n y m w ś ro d o w is k u E c lip s e k o n te n e re m s e rw le tó w M o rtB a y je t t y , k tó ry z o s ta ł zin te g ro w a n y i d o m y ś ln ie s k o n fig u ro w a n y na p o trze b y s zy b k ie g o te s to w a n ia p ro je k to w a n y c h a p lik a c ji w E c lip s e . O p c ja u życia J 2 E E P re vie w d la c e ló w t e s to w y c h j e s t s z c z e g ó ln ie w s k a z a n a w e w c z e s n y c h fa z a c h te s to w a n ia a p lik a c ji, a c z k o lw ie k p rz e p ro w a d z a n ie t e s t ó w k o ń c o w y c h z a le c a s ię na ze w n ę trzn ym (d o c e lo w y m ) s e rw e rz e a p lik a c ji. A b y u tw o rzyć ś ro d o w is k o uru c h o m ie n io w e dla s e rw e ra J 2 E E P re v ie w , n a le ż y w y k o n a ć n a s tę p u ją c e kroki:
In c lu d e lib ra rie s w itf r tn is a p p lic a tio n -
•
EARmembEfihip
..
-
- J S F Se rvlet N a m e .
- F a c es Servlet
i jS F .S e r v ie tQ a s s n a m e : ■ja v a x .fa c e s -w e b a p p .F a c e sS e fv -•URL M aD D iag P a tte r n s : i /fac es-1'*
1 . W m e n u a p lik a c ji w y b ie r a m y o p c j ę W in d o w /P re fe re n c e s /S e rv e r/R u n tim e E nviro n m e n ts. P o ja w i S ię o k n o S e rv e r R u n tim e E n viro n m e n ts. 2 . P rzycisk ie m A d d o tw ie ra m y o k n o N e w S e rv e r R u n tim e E nviron m en t, w któtym w g łó w n ym o k n ie d ia lo g o w y m w y b ie ra m y o p c ję B a s ic /J 2 E E Preview . C a ło ś ć za tw ie rd za m y p rz yc is k ie m Finish.
1 .3 .4 , Tw orzenie projektu JS F W celu utw o rzen ia p ro jek tu aplik acji W W W opartej n a JS F n ależy w ykonać następu ją c e kroki: 1. Z m enu aplikacji w ybieram y opcję F ile/N ew /P roject. Pojaw i się okno kreatora N e w P roject, w k tórym w y św ietli się lista ty p ó w projektów .
R y s u n e k 1 .7 . Tworzenie projektu J S F — konfiguracja projektu webowego po lewej, ustawienia JSF
po prawej 4. Z listy rozw ijanej Type w p an elu J S F Im p le m en ta tio n L ib ra ry w y b ieram y opcję U ser L ib ra ry, któ ra p o z w ala nam na d o łąc ze n ie b ib lio tek JSF. Jeśli po siad am y ju ż pliki z im p le m e n tac ją JS F, m o że m y je d o łączy ć w oknie dialogow ym M anage Libraries, klikając ikonę w sk azan ą objaśnieniem zarządzaj bibliotekam i na rysunku 1.7. Jeśli nie posiadam y żadnej im plem entacji JSF, m ożem y j ą pobrać z intem etu. W tym celu klikam y ikonę w sk az an ą objaśnieniem p o b ie r z biblioteki. P o jaw i się okno d ialo g o w e D o w n lo a d L ib ra ry, p o kazane n a ry su n k u 1 . 8 .
2. N a liście w skazujem y grupę p ro jek tó w w e b o w y c h (W eb). P o rozw in ięciu elem entów gru p y w y b ieram y op cję D y n a m ie W eb P ro jec t i zatw ierd zam y przy cisk iem N ext. W y św ietli się okno k re ato ra N e w D y n a m ie Web P ro ject, po k azan e n a ry su n k u 1.7. 3. W p o lu P ro jec t nam e w p isu je m y n a zw ę p rojektu. N astęp n ie z listy rozw ijanej T arget R u n tim e w y b ieram y śro d o w isk o u ru c h o m ien io w e serw era, n a k tó ry m u rucham iana będzie n a sz a aplikacja. N a liście C o n figuration zam ien iam y d o m y śln ą w artość n a J a v a S e rv e r F a ce s v .L 2 P ro jec t, z a z n ac zo n ą n a ry su n k u 1.7 (lew a strona). W szy stk o z atw ierd zam y p rz y cisk iem N ext. K olejne strony, które p o jaw ią się w o knie kreatora, z atw ierd z a m y bez dok o n y w an ia żad n y ch zm ian, aż do p o jaw ie n ia się strony J S F C a pabilities, pokazanej na ry su n k u ł . 7 (praw a strona). Rysunek 1 .8 , Menedżer automatycznego pobierania implementacji JSF
Ja v a S e rv e r F a c e s i E c lip s e G a lile o. T w o rze n ie a p lik a cji '
46
I + Przed przystąpieniem do pracy z JS F
5. Z listy dostaw có w im p le m e n tac ji JS F w y b ie ram y opcję Sun R I, a n astępnie w p olach L ib ra ry n a m e i D o w n lo a d d e stin a tio n o k re ślam y o d p o w ie d n io nazw ę i lokalizację d la p o b iera n y ch plików . W y b ó r zatw ierdzam y-przyciskiem N ext. N a ekranie p o ja w i się okno z in fo rm a c ją o w aru n k ach licen cy jn y ch dla pobieranego oprogram ow ania, po k azan e na ry su n k u 1.9. A kceptujem y licencję (zaznaczając je d y n e d o stę p n e p o le w y b o ru ) i k lik a m y p rz y c isk F in ish . E clipse ) p o b iera p lik i JS F, tw o rz y b ib lio tek ę u ż y tk o w n ik a i d odaje j ą do bieżąceg o projektu, po c zy m w y św ietla p o n o w n ie stro n ę J S F C apabilities (jeśli pole w y b o ru przy n a zw ie u tw o rzo n ej b ib lio tek i JS F n ie zostało zaznaczone, to zaznaczam y je). R ysunek 1 .9 . Strona z warunkami licencji
. W ybieram y ikonę zarządzaj bibliotekam i i w oknie d ialo g o w y m b ib lio tek użytkow nika (rysunek 1 . 1 0 ) tw orzym y biblio tek ę p rz e c h o w u ją c ą u przednio . pobrany p lik JA R z b ib lio tek ą JS T L . W ty m celu tw o rzy m y n o w ą b ibliotekę J . p rzyciskiem New,_ a następnie d odajem y p lik JA R , p o d ając je g o lokalizację w oknie dialogow ym w yśw ietlan y m po k lik n ię ciu p rz y cisk u A d d J A R s .... W szystko zatw ierdzam y p rz y cisk iem OK, po czym p o n o w n ie w y św ietlan a je s t strona J S F C apabilities. 6
7.
Dóumibad Library: '. L ib r a r y L ic e n s e T h e s e le c te d lib ra ry h a s lic e n s e te r m s t h a t ¡>
Z aznaczam y pole w yboru przy b ib lio tece JS T L i z atw ierd zam y utw o rzen ie now ego projektu JSF przyciskiem F inish. Jeśli korzystam y z innej perspektyw y niż Java E E , p o jaw i się okno d ialo g o w e z p y tan ie m , czy p rz e łą c z y ć n a tę perspektyw ę — m ożem y o dpow iedzieć tw ierdząco (w dalszej części rozdziału więcej szczegółów ).
o w n lo a d in g t h e lib ra ry .
W skazów ka
1. D e f in it io n s . C o n t r i b u t o r ” rrn s a r c o w c u te c
- .sag?: tlsing: tilassrisn .- -.--..
47
each individual or sntit1 c c r e w c n of L’ cuificah
Je ś li k o rzysta m y z w c z e ś n ie j u tw o rz o n e g o p ro je k tu D ynam ie W eb A p p lic a tio n , który nie za w ie ra ł p a k ietu w s p a rc ia dla J S F , m o że m y go w c a ło ś c i d o d a ć . Z m ertu apli kacji w yb ie ra m y o p cję P ro je c t/P ro p e rtie s , a n a s tę p n ie z lis ty w y ś w ie tlo n e j w lew ej c z ę ś c i o kna — o p cję P ro je ct Facets. W p raw ej c z ę ś c i o k n a w y ś w ie tli s ię lis ta d o stę p n yc h w ś ro d o w is k u p a k ie tó w ro z s z e rz e ń (fa c e tó w ), z któ rej w yb ie ra m y i za zn a c za m y po le w yb o ru J S F (k o n c e p c ja fa c e tó w o ra z s p o s ó b ich u życ ia z J S F s ą p rze d s ta w io n e w ra m ce „ J S F F a c e t” ).
;
■ w ] I accept th e teems.cf. this license.-
JS F F a c e t Pakiety rozszerzeń p rojektu — tz w . fa c e ty — d e fin iu ją c h ara k te ry sty k ę i w ym agania p rojektów Ja v a EE i są u ż y w an e ja k o c zęść k o n fig u rac ji u ru c h o m ie n io w e j. D o d an ie facetu do pro jek tu p ow oduje, że p ro jek t je s t sko n fig u ro w an y do w y k o n a n ia określo nego zadania czy w yp ełn ien ia pew n y ch w ym agań.
R y su n e k 1 .1 0 .
Okno dialogowe bibliotek użytkownika
U s e r L ib ra rie s - ' Ja v a B u ild P a th U ser L ib rarie s
Przykładem m oże być utw orzenie projektu nieokreślonego typu, zgodnego z kon cep cją facetów (New Project/G eneral/F acetedP roject), a następnie dodanie do niego faceta E A R — co spow oduje, że do pro jek tu zo stan ie d o dany p lik desk ry p to ra w d ro ż eń i u sta w ie nia ścieżki p rz e s z u k iw a n ia (ang. classpath).
. .U ser lib r a rie s c a n b e a d d e d to- a J a v a B u ild p a t h a n d . b u n d l e 2 n u m b e r o f e x te r n a l . a rc h iv e s ,. S y s te m lib r a n e s w itE .b e a d d e d t o . t h e b o o t c la s s p a i n w h e n l a u n c h e d . • J J e f t n e c u s e r lib ra rie s:
........................
i J S F 1 .2 ( S u n RD i JSTL 1.2
I»!»- jsti-1.2.jar - GixgaiileotworkspaceUibranes
Tat),
j Facety m o g ą być dodaw ane w y łącznie do p ro jek tó w Java E E oraz innych typów p ro jektów bazujących na platform ie Java EE, tj. projektów : E nterprise A pplication, Dynam ie Web A pplication oraz EJB. N ie m ożna ich dodać do zw ykłych projektów Javy czy pro jektów w tyczek program istycznych. Z azw yczaj p ro je k t p o sia d a je d e n facet, n a którego podstaw ie tw orzona je st konfiguracja początkow a, ale w trakcie p ra cy m o żn a dodaw ać kolejne facety do projektu.
¿2) S o u r c e a t t a c h m e n t ( N o n e ) j a v a a o c lo c a ti o n : (L io n e l N a tiv e lib r a ry lo c a ti o n : (N o n e ) sS s A c c e s s ru les : (N o r e s tric tio n s )
I m p o r t...
JSF F acet d o starcza następ u jące funkcje w sp arc ia tw o rzen ia i u ru c h am ia n ia aplikacji z JSF: ♦ w sparcie k o nfiguracji i w d rażan ia p o stronie serw era b ib lio tek JSF, ♦ zarządzanie k o n fig u rac ją aplikacji (A p p licatio n C o n fig u ratio n M anagem ent), ♦ sem antyczną w eryfikację popraw ności (w alidację) stron JSP z kom ponentam i JSF,
przed przystą pien iem do p ra c y z JS F
♦ a sy sten ta w p ro w ad z an ia k o d u (ang. c o n te n t assista n t) d la b ib lio tek znaczników JS F C ore i JS F H T M L , . . i ♦ w sp arcie u ru ch am ian ia stro n JS P z k o m p o n en ta m i JS F n a serw erze (ang. R un on Server). D ołączen ie do p ro jek tu fa ce ta JS F w y m a g a w c ze śn ie jsze g o u ż y c ia facetów : DynanTe Web M o d u le w w ersji 2.3 lub w yższej oraz J a v a w w e rsji 1.4 lub w yższej. Po dolą czeniu fa ce ta JS F do p ro jek tu następuje: ♦ d o d a n ie do śc ież k i p rz e sz u k iw a n ia p ro je k tu w y sp e c y fik o w a n e j p rz ez u ż y tk o w n ik a b ib lio tek i JSF, je ś li n ie zo stała w d ro ż o n a, lub dodanie zależności p ro jek tu (Jav a E E M odule D ep en d en cies), co p o z w a la tra k to w a ć'b ib lio te k i ja k J w irtualne p lik i JA R i um ieszczać je w k a ta lo g u W E B -IN F /lib dopiero w czasie p u b lik o w an ia aplikacji (u m ieszczan ia b ą d ź a k tu alizacji p ro jek tu n a serw erze), ♦ ak tu alizacja p lik u d e sk ry p to ra w d ro ż en ia aplikacji w ebow ej (yveb.xml) o w pisy d oty czące serw letu F a c e s S e rv le t, tj.: ♦ n azw ę serw letu, ♦ m ap o w an ie serw letu, ♦ p aram etry k o n tek sto w e d la k o n fig u rac ji aplikacji, ♦ utw o rzen ie p u steg o p lik u kon fig u racji JS F fa ce s~ c o n fig .xm l i um ie sz cz e n ie go w k a ta lo g u W E B-IN F . Odinstalow anie JSF Facet pow oduje w yłącznie usunięcie odpow iednich w pisów w plik deskryptora w d ro ż eń w e b .x m l — żaden p lik w p ro jek c ie (w łączając faces-config.xm l nie je s t usuw any.
1.3,5. Praca z JS F w oknie roboczym E clipse zaw iera b ard zo w iele różnych e dytorów oraz ty p ó w w id o k ó w służących do n w igow ania w ram ach p ro jek tu b ą d ź w y św ietlan ia k o m u n ik a tó w czy inform acji o jegj strukturze. W c elu w y g o d n ej re aliz a cji ty p o w y c h z a d a ń E c lip se d o sta rc z a z a p a m i| tane k onfiguracje (rozkłady) o k ien ed y to ró w oraz w id o k ó w — p e rs p e k ty w y . Z a p | m ocą funkcji dostęp n y ch w m en u W indow m o ż n a je do w o ln ie zm ieniać, a n a w et tw rzyć w łasne. Po p ierw szym u ru ch o m ien iu śro d o w isk a E clipse i zam k n ięc iu okna pow italn eg o wy św ietlana je s t perspektyw a R esource, która ułatw ia zarządzanie zasobam i projektów , ale nie je st w y godna podczas projektow ania aplikacji w ebow ych. W przypadku projektó niew ielkich aplikacji w e b o w y c h m o żn a efek ty w n ie p ra co w a ć z p e rsp e k ty w ą W eb -i zależy to w y łączn ie od p re fe re n cji p ro jek tan ta (program isty). D o m y śln ą perspektyw? dla w szelkich p ro jek tó w w e b o w y c h je s t p e rsp ek ty w a J a v a E E — po u tw o rz en iu do wolnego projektu w ebow ego środow isko sam o zapyta nas, czy m a przełączyć w idok na tę perspektyw ę. O d pow iednie u łatw ien ia p ra cy ze w szy stk im i aplik acjam i webowymi
:
49
(rów nież b ez JSF) zapew nia p a k ie t W eb T ools P latform . O kno ro b o cze w śro d o w isk u E clipse p o d czas pracy z p ro jek tem JS F p o k a za n e zostało na ry su n k u 1 .1 1. W id o c zn e s ą n a h im elem enty ch arak tery sty czn e dla ro z w iąz ań W T P i JS F F acet, tj.: > Listw a narzędzi W TP pozw alająca n a w ybór trybu pracy edytora (edytor graficzny W Y S IW Y G , e d y to r tek sto w y lub w y św ie tla n ie o b u u ło ż o n y c h p io n o w o lub p o z io m o ) oraz p o d staw o w e op eracje n a tek ście (ro zm iar i w y ró ż n ian ie). ♦ O kno e dyto ra W T P do p ra c y z p lik a m i źró d ło w y m i, zaw ierające d w ie zakładki: D esign, do p ro jek to w an ia stro n JS P w je d n y m z w yżej w y m ien io n y c h try b ó w g raficzn y ch , oraz P re view , s łu ż ą c ą do p o d g lą d u d o k u m en tu w y n ik o w e g o w przeglądarce. ♦ P aleta kom ponentów , z a w ie rają ca sta n d ard o w o zn aczn ik i d la k o m p o n en tó w H T M L , JS P i JS F (po z a in sta lo w a n iu d o d a tk o w y c h w ty c z e k ró w n ie ż k o m p o n en tó w b ib lio tek z e w n ę trz n y c h d o sta w c ó w , np. M y F a c es, R ic h F a c e s czy F acelets, a także k o m p o n en tó w w łasnych). Z naczn ik i m o g ą b y ć w sta w ia n e w edytow anym szablonie te c h n ik ą „ przeciągnij i u p u ść ” (ang. d ra g & d ro p ), zarów no w trybie graficznym , j a k i tekstow ym . P aletę m o żn a u ak ty w n ić (dezaktyw ow ać) w m enu aplikacji k om endą W indow /Show V iew /G eneral/P alette. ♦ O kno w łaściw o ści po zw alające n a p rzeg ląd a n ie i edycję atry b u tó w w y b ra n y c h elem entów . O d standardow ego o k n a w ła śc iw o ści śro d o w isk a E clipse ró żn i się tym , że z aw ie ra dw ie zak ład k i: Q u ic kE d it, p o z w a la ją c ą n a sz y b k i d o stęp do n ajczęściej w y k o rz y sty w a n y c h a try b u tó w z n ac zn ik ó w , o ra z A ttrib u te s , u d o stę p n ia jąc ą w szy stk ie atrybuty. P o n ad to m oże zaw ierać w e w n ę trz n e o k n a dialogow e, zaw ierające m inik reato ry , np. pozw u lające rejestro w ać o b iek ty nasłuchujące zdarzeń w y b ran eg o elem en tu czy edytow ać je g o styl C SS w o d rębnym oknie. Istotną zaletą środow iska Eclipse je st m ożliw ość personalizacji układu okna roboczego, dow olnego p rzestaw ian ia pozycji i ro z m iaru okien. W dalszej części k sią żk i o m ó w io ne b ę d ą p o z o stałe elem enty obszaru ro b o czeg o , w id o czn e n a ry su n k u 1 . 1 1 .
1.3.5.1. W idok P ro je ct E xp lo re r i stru k tu ra a plika cji W W W Pojaw ienie się now ego pro jek tu w przestrzen i roboczej E clipse je s t o d n o to w y w a n e natychm iast w oknie w id o k u P ro je c t E xp lo rer, które służy do w y św ietlan ia stru k tu ry logicznej p ro jek tó w i ich zasobów . W id o czn a w oknie struktura p ro je k tu z ależ y o d je g o typu i b ędzie inna dla sam odzielnej aplik acji Javy, aplik acji k o rp o rac y jn ej czy aplikacji W W W . Po u tw o rz en iu p ro jek tu d y n am icznej ap lik a cji W W W , o p a rte j n a szkielecie JSF, okno w id o k u p o w in n o w y św ietlać strukturę a n alo g icz n ą do p o k a za n ej na rysunku 1 . 1 2 , gdzie prezentow any je s t w id o k o k n a p o re a liz a c ji c ałeg o p rz y k ła d u aplikacji K alkulator (celem ilustracji rozm ieszczenia poszczególnych typów zasobów ).
Ja va S e rv e r Fa ces i E clip s e G a liie o. Tw orze nie a plika cji v<í)
50
Bo dzia* 1. ♦ Przed przystąpieniem do pra cy z JS F
51
W przypadku aplikacji W W W (w tym aplikacji o p a rty c h n a JSF) strukturę k ata lo g ó w definiuje specyfikacja Java Servlet, określając p o ło że n ie d o k u m en tó w H T M L , JSP, skompilowanych H as, ścieżek dostępu do klas, deskryptorów w drożenia czy m etadanych. .M oduł aplikacji W W W je s t p rzen o śn y i m oże zostać w d ro ż o n y w d o w o ln y m k o n te nerze serw letów , zgodnym ze sp e c y fik a cją serw letó w Javy, p o p rz ez u m ie sz cz e n ie go w odpow iedniej lokalizacji. M o d u ł m oże być w d ro ż o n y w postaci struktury p lik ó w lub po spakow aniu go (archiw izacji) do p lik u W A R (ang. Web A p p lic a tio n a R ch ive ), który w odróżnieniu od zw y k ły ch archiw ów Ja v y (ang. J a v a A p p lic a tio n a R ch ive — JA R ) posiada rozszerzenie .war. P lik W A R m oże zostać przesłany do kontenera, który sam odzielnie go rozp ak u je i w droży. H ierarchia pro jek tu D y n a m ie W eb P r o je c t w y św ie tla n a w w id o k u P ro je c t E xp lo re r nie pokryw a się d okładnie ze stru k tu rą aplikacji W W W o k re ślo n ą p rz ez specyfikację serw letów , gdyż odzw ierciedla tę strukturę w sposób, k tó ry m a u łatw iać p racę d e w e loperów. Dlatego głów ny katalog projektu zaw iera w szystkie m ożliw e elem enty zw iązane z procesem w ytw arzania aplikacji W W W , a dopiero zaw artość w ęzła W eb C ontent p o siada strukturę zgodną z w ym aganiam i specyfikacji serw letów . Z aprezentow ana po lewej stronie na rysunku 1 .1 2 hierarchia projektu zaw iera n a stęp u jąc e elem enty (o dpow iednio od góry): ♦ Skrót do p lik u d eskryptora w d ro żen ia w eb .x m l (D e p lo ym e n t D e scrip to r) niezbędnego do u ru c h o m ien ia aplikacji n a serw erze. ♦ K atalog b u ild — tutaj u m ieszczan e s ą skom p ilo w an e p lik i klas Jav y (zaw artość je st n iew idoczna w ty m oknie).
R ysunek
Elementy Web Tools Platform widoczne w perspektywie Java EE j P ro je c t E x p lo rer ¿Z
n.’
k alk ulato r; ¡iáj D ep lo y m e n t D escriptor: K alkulator £2? b u itd «gl i‘a v a R e so u rces: sic co iu .jir.v p ra tc ty ce .k aík u lato r.k c n tro ief
> K alkuÍB tor S ' M E T A -IN F
t § co m .jsfw p ra k ty cs.k slk u S a to r.m o d el ^ L ibraries S Ś Ja v aS crip t R e so u rce s S3» EC’vlA Script B uilt-In Library
(1
M A N IF E S T .M F
W E B -IN F a
¿A? c la s s e s ? com
^ lll EC!vtA 3 B ro w ser S u p p o rt Library
;>?7 jsfw pralcfcyce
£ 3- W e b C o n te n t &
a
M E TA -IN F WEB-1NF
.2^7 k a lk u la t o r k o n tr o le r
a
2r» lib Ü? fac a s-c o n fig jc m l ÍXj
♦ K atalog źró d ło w y ch zasobów Javy (Ja v a R eso u rc es: srć) — tu u m ie sz cz a n e są utw orzone p rz ez u ż y tk o w n ik a p lik i źródłow e p ro jek tu z aw ierające definicje klas: m odelu, kom ponentów , serw letów , filtrów i nasłuchujących (ang. listeners). Po d odaniu z aso b ó w do p ro je k tu s ą o ne a u to m a ty c z n ie k o m p ilo w a n e , a w y g en ero w an e p lik i z k o d e m b a jto w y m s ą d o d a w an e do k a ta lo g u W ebC ontent/W E B -IN F /classes (niew idoczny) i p u b lik o w an e n a serw erze. Pliki źródłow e n ie s ą standardow o w d ra ża n e n a serw erze (ani arch iw izo w an e do pliku W A R ), chyba że zostanie u sta w io n a o d p o w ie d n ia opcja.
K a lk u ia to rB B .c la s s a
webami
Cw m odel &
Í¡2¡ K alkulator.jsp
a
§} W y n ik jsp
K aifc u lato r.c fa ss
Qfifi lib
♦ Skróty do b ib lio tek klas Jav y (Java R esources: src/L ib ra ries) — tu w yśw ietlan e są biblioteki zaw ierające plik i JA R dołączone do projektu. Pliki JA R nie re zy d u ją fizycznie w ty m k a ta lo g u , p o n iew aż s ą d o łąc za n e d y n a m ic zn ie w trak c ie pu blikow ania aplik acji n a serw erze. K a talo g o d zw iercied la zaw a rto ść k a ta lo g u W ebC ontent/W E B -IN F /lib, p u b lik o w an ą n a serw erze. ♦ B iblioteki w sp arc ia ro z w o ju k o d u w ję z y k u Jav aS crip t (Ja va S crip t R eso u rc es) — szczegółow y opis w sp arc ia Jav aS crip t D e v elo p m en t T o o ls d la E clipse znajduje się w ro zd ziale 4.
¿¡ii j s f - a p i j a r
& Servers
jS j js f - im p l.j a r
QS> a o a c n e -to m c a t-ó .O J 3 a t Ic c alh o s t-c o n fic
¡iśj js tl-1 .2 .ja r
-1 c ata lin a .p ciicy
t i f ta c e s - c o n f i g .x m i
Igj c a ta iin a .p ro p e rtie s :Xl c o n tex t.x m i :_Xj server.xm í
[5 ) K a lk u la to r .js p
!X] to m c a t-u s e r s o m l
a
rxj w e b .x m l
W y n ik .js p
jSj w e b a m i
R ysunek 1 .1 2 . Struktura projektu Kalkulator w oknie widoku Project Explorer (po lewej) i fizyczna struktura pliku WAR aplikacji Kalkulator (po prawej)
4 K atalog p u b liczn ie d o stę p n y ch z aso b ó w aplik acji W W W (W eb C o n ten t) — lokalizacja w szy stk ich p lik ó w aplik acji W W W , łączn ie z dokum entam i: H T M L , JSP, plikam i graficzn y m i, skryptam i, etc. T y lk o p lik i zaw arte w ty m k a ta lo g u oraz w je g o p o d k a ta lo g ac h s ą p u b liczn ie dostępne p o u ru ch o m ien iu aplikacji na serw erze (sta n o w ią z a w a rto ść p lik u W A R ). P liki p rojektu, zn ajd u jące się p o z a tym k atalogiem , s ą zaso b am i w y k o rz y sty w a n y m i ty lk o w trak cie w y tw arzan ia aplikacji (np. plik i źró d ło w e .java, skry p ty .sq l files itp.) i nie s ą w d rażan e w procesie testo w an ia czy p u b lik o w an ia n a serw erze.
52
Ja va S e rv e r F a c e s i E c lip s e G a lile o . T w o rze n ie a p lik a cji W W y
♦ K a talo g m eta d an y c h o p isu jący ch arch iw a ( W eb C o n ten t/M E T A -IN F ) — zawier; n iez b ęd n y dla n a rzę d zi arch iw izu ją cy c h p lik P M N IF E ST ..M F ,-deim iający ścieżk i d o stęp u do Idas z n ajd u jąc y ch się w p lik a c h JA R , w e w n ą trz innych p o w ią za n y ch p ro jek tó w . K atalo g m o że o p cjo n aln ie zaw ierać pliki deskryptorór z b io ru z n ac zn ik ó w T L D (ang. Tag L ib ra ry D e sc rip tio n ) dla stro n JS P lub in n y ch tec h n o lo g ii w idoku. G dy z aw arto ść k a ta lo g u je s t w d ro ż o n a n a serw erze, staje się n ie d o stę p n a dla klien tó w a p lik a cji — p ró b y p o b ra n ia z aw a rto śc i k a ta lo g u z a k o ń c z ą się b łęd e m 404. ♦ K a talo g m e ta d a n y c h o p isu jący ch aplikację W W W ( W ebC ontent/W E B -IN F ) — zg o d n ie ze sp e c y fik a c ją serw letó w k atalog z aw ie ra zaso b y a p lik acji W W W , w ty m pliki k o n fig u rac y jn e d esk ry p to ra w d ro ż e n ia aplik acji W W W (w eb.xm l) o ra z k o n fig u rac ji sz k ieletu JS F (fac.es-config.xm l). P o zo stałe zasoby, takie ja k sk o m p ilo w a n e k la s y Jav y , p lik i JA R , p lik i z n a c z n ik ó w c zy d e sk ry p to ry b ib lio tek zn ac zn ik ó w , z n a jd u ją się w podk atalo g ach . Z e w zg lęd u n a to, że po d o b n ie j a k w cześn iej opisany k atalo g M E T A -IN F , nie je s t on d o stęp n y d la klien tó w ap lik acji, zazw yczaj u m ie sz cz a się w nim tzw . p ry w a tn e stro n y JSi (stro n y s ą d o stę p n e łydko p o p rz ez p rz ek a za n ie ż ąd a n ia z serw letu lub innej strony JS P d ostępnej publicznie).
R o z d z ia ł 1 . ż Przed przystą pien iem do pracy z JS F
53
. jed n a k zaw sze bezw arunkow ej aktualizacji zaw arto ści o k n a - ■p e w n iejsz y m rozw iązanierii je s t zapis edytow anego pliku. O kno J S F C o m ponent Tree podzielone je s t n a d w ie części. Po lew ej stronie w y św ie tlane je s t drzew o zaw ierające rozw ijane w ę zły re p re z en tu jąc e k o m p o n en ty JSF, po praw ej stronie p rzy u życiu licznych rozw ijanych z ak ład e k p rezen to w an e s ą w ła śc iw o ści z aznaczonego w ęzła drzew a, j ak p o k azan o n a ry su n k u 1.13.
W skazów ka
N a le ży zw ró c ić u w a g ę , że nie w s z y s tk ie zn a c zn ik i u ż yte n a s tro n ie JS P (X H T M L ) są re n d e ro w a n e w w id o k u d rze w a . J e ś li je d n a k s ą o n e zw ią z a n e z k o m p o n e n ta m i JS F , to in fo rm a c ja o tym z o s ta n ie w y ś w ie tlo n a w s e k c ji w ła ś c iw o ś c i. Na p rzykład k o n w e rte ry i w a lid a to ry s ą w y ś w ie tla n e w za k ła d c e D e co ra to rs. A b y w y ś w ie tlić s tru k tu rę w s z y s tk ic h zn a c zn ik ó w u żytych na s tro n ie , n a le ż y w y b ra ć o k n o O utlin e, d o s tę p n e w m en u a plikacji W in d o w /S h o w View. W p rzyp a d k u d o k u m e n tó w JS P zg o d n yc h z X M L b ę d z ie to ró w n ie ż s tru k tu ra d rz e w a .
JSF C c r r p c n e G t I r s e V ie "* G S c ik u ia tcr.jS D ( P r o je c t: K a lk u la to r ! ; Ijïs ta n c e In fo
♦ K a ta lo g b ib lio te k (W e b C o n te n t/W E B -IN F /lib ) — z aw ie ra p lik i JA R w ykorzystyw ane- w aplikacji. W sz y stk ie pliki archiw um , które tu się z n a jd u ją b ę d ą d o stęp n e d la aplikacji. Z aw artość k atalo g u je s t n iew id o czn a w w id o k u P ro je c t E xp lo rer.
N a m e : H tm S C o r n m a n d B u t t c n I d : jö J s p - 2 P a r e n t Id : jd is p O j T y p e I n fo I n fo rm a tio n C o m p o n e n t T y p e : ja v a x .f a c e s .H tm iC o m m a n d B u tto n
Z aw arto ść p lik u W A R w y g en ero w an eg o w w y n ik u kom pilacji całego p ro je k tu Kai k u łato r p o k a za n a je s t po praw ej stronie n a ry su n k u 1.12. Po lew ej stro n ie oprócz! stru k tu ry p ro jek tu K a lk u la to r w oknie P ro je ct E x p lo re ra w id o czn y je s t ró w n ie ż węzeł p ro jek tu Servers, w k tó ry m dostępne s ą p lik i k o n fig u rac y jn e d la u tw o rz o n y ch instań cji serw eró w W W W zin te g ro w an y c h z E clipse. O pis zaw arto ści ty ch p lik ó w oraz po rady d o ty cz ąc e k o rz y stan ia z n arzędzi w sp arc ia d la kon fig u racji serw e ró w znajduj się w ro zd ziale 6 .
% Uwaga
A b y w y ś w ie tlić fiz y c z n ą s tru k tu rę k a ta lo g ó w i p lik ó w p ro je k tu , w tym z a w a rto ś ć ka ta lo g u b u ild o ra z pliki u s ta w ie ń i m e ta d a n y c h s a m e g o p ro je k tu , m o żn a w yk o rzy s ta ć w id o k N a v ig a to r, którego o kno s ię w yśw ietli po w ybraniu w m enu a p lik a c ji o pcji W in d o w /S h o w V ie w /N a v ig a to r.
1 .3 ,5 .2 . O kno drzew a kom ponentów U ży cie okna w id o k u J S F C om ponent Tree p o z w ala na w izu alizację d rz ew a kom poj n e n tó w o sad z o n eg o w szablonie dok u m en tu JS P b ą d ź dok u m en tu in n eg o typu, np. X H T M L . O kno m o żn a w yśw ietlić, w ybierając z m enu aplikacji W indow/Show View/Jovt S e rv er F a c e s/J S F C o m p o n e n t Tree. Z aw artość o k n a odnosi się do e d y to w an e g o i ak tyw n eg o p lik u sz a b lo n u (np. edytow anej strony JS P ) i je s t ap ro k sy m o w an a w trakcie p rojektow ania. P o z a p isa n iu edytow anego p lik u lub p rzeb u d o w an iu p ro je k tu (opcjef P roject/C lean... i B u ild P roject) w szelkie zm iany dokonane w trakcie edycji strony J S | s ą a u to m a ty c zn ie u w z g lę d n ia n e w w id o k u okna. In n y m sp o so b em o d św ie ż e n ia za w arto ści okna je s t sk o rzy stan ie z p rz y cisk u R efre sh , którego u życie n ie powoduje
C o m p o n e n t C la s s ja v a x .f a c e s .c o m p o n e n i.h tm l.H tm S C o m m s n d B u tto n C o m p o n e n t F a m ily : ja v a x . f a c e s . C o m m a n d R e n d e r T y p e : j a v a x .f a c e s .B u t t o n •: I n t e r f a c e s s D e c o ra to rs
Rysunek 1 .1 3 . Wizualizacja drzewa komponentów w oknie widoku JSF Component Tree
1.3.6. Definiowanie modelu Ze w z g lęd u n a p ro stą funkcjonalność projek to w an ej aplik acji K a lk u la to r T em p eratu r cala logika b izn e so w a zaw arta je s t w m eto d zie p rz e l i cz () k lasy Kai kul a to r. A by utw o rzy ć klasę Kai kul a to r w oknie P ro je c t E xp lo re r, lew y m p rz y cisk iem m y szy zaznaczam y p ro jek t K alkulator, a następnie p ra w y m p rz y cisk iem m y szy otw ieram y m enu kontekstow e i w ybieram y opcję N ew /C lass. Pojaw i się okno dialogow e N e w Java Class, w k tó ry m w yp ełn iam y tylko nazw ę p a k ie tu (p o le P a c k a g e ) oraz k la sy (pole N am e). D la w y g o d y w artości ty ch pól p o w in n y b y ć z g o d n e z n azw am i w y stę p u jąc y m i n a listin g u 1 . 1 , zaw ierający m k o d klasy. Listing ±.X. Kod logiki biznesowej przykładowej aplikacji Kalkulator Temperatur package com.jsfw praktyce.kalkulator.m odel; * K a lk u la to r
54
Ja va S e rv e r Fa ces I E clip se G a lile o. Tw orze nie a plika cji Ho
55
>rzed przystąpieniem do p ra cy z JS F
*/
-M etody d o s tę p o w e ------------------ */
p u b lic c la s s K a lk u la to r {
p u b lic K a lk u la to r g e tK a lk u la t o r!) { i. re tu rn k a lk u la to r;
* P rzelicza tem peraturą z e ska li F a h ren h e ita n a Celsii
p u b lic v o id -'S e tk a lfc u la to r(K a lk u la to r k a lk u la to r)
* (a)param fa h r e n h e it
w a rto ść do p r ze lic ze n ia * (cpretum rezu lta t w s k a li C elsiusa
o u b lic double getTem pFahrenheitO
*/ p u b lic double p rz e lic z (d o u b le fa h re n h e it) { re tu rn (5 .0 / 9 .0 ) * (fa h re n h e it - 3 2 ) :'
{
t h i s . k a lk u la to r = k a lk u la to r;
*
{
re tu rn tem pFahrenhelt; ;1
p u b lic v o id setTem pFahrenheit(double tem pFahrenhelt) { t h i s . tem pFahrenhelt = tem pFahrenhelt;
}
1
lin io w a n ie komponentu w spierającego
i
K om ponent w sp ie rają cy p e łn i funkcję elem entu spinającego w arstw y m odelu i widol — definiuje w łaściw ości i m etody pow iązane z szablonam i stron. D zięki je g o zastoso w aniu k lasy m o d e lu nie m u s z ą w ogóle odnosić się do sp o so b u w y św ietlan ia danyc — w ro z w a ż a n y m p rz y k ła d z ie k lasa K a lk u la to r n ie z aw ie ra żad n y c h m eto d bąd| z m ie n n y ch z w iąz an y c h ze sp o so b em prezen tacji danych. W p rzy k ład zie k o m p o n en te m w sp ierający m je s t k lasa K a lku la to rB B , k tó ra specyfi? kuje dw ie w ła śc iw o ści p ry w a tn e JayaB eans, użyte do p o b iera n ia danych wejściowych (tem pFahrenhelt) oraz w y św ietlan ia w yniku ( r e z u lt a t ) . O bie w łaściw ości sąm odyfij kow ane i dostępne publicznie poprzez użycie m etod dostępow ych zaw ierających przedś rostki g e t- i s e t-, których szczegółow y opis m ożna znaleźć w rozdziale 3. K a lkulator zaw iera ró w n ież m etodę p r z e lic z O , d e le g u ją c ą p rz e tw a rz a n ie do m e to d y o takiej sam ej n a zw ie w obiek cie m o d elu — k lasy K a lk u la to r. M e to d a p r z e lic z O zwraca łań cu ch znak o w y do p rz etw a rza n ia zw iązanego z naw igacją. L istin g 1.2 zaw iera koi k lasy Kai kul at L isting 1 .2 . K o d kom ponentu w spierającego K a lk u la to rB B package com. jsfw praktyce. k a lk u la to r.kontroi e r ; im p o r t com.jsfw praktyce.k a lk u la to r.model.K alkulator ; pu bl ic c l a s s K a lk u la to rB B { /* * R e p re zen tu je o b iekt m odelu. V p r i v a t e K a lk u la to r k a lk u la to r = new K a lk u la t o r !); /* * T em p era tu ra do p rze lic ze n ia . * /
p r i v a t e double tem pFahrenhelt = 0 .0 ; / * * W ynik. */ p r i v a t e double r e z u lt a t = 0 .0 ;
/* * K o n s tr u k to r V p u b li c K a lk u la to rB B O s u p e r ( );
}
{
o u b lic double g e tR e z u It a t !) { re tu rn r e z u lt a t ;
}
o u b lic v o id s e tR e zu lta ttd o u b le r e z u lt a t ) <; t h i s . r e z u lt a t = r e z u lt a t ;
} /** * W yw ołuje m eto d ę b izn eso w ą * (jyreturn łańcuch zn a ko w y p o zw a la ją c y zd efin io w a ć n a w ig a cję
*/ p u b lic S t rin g p r z e l i c z ! ) { r e z u lt a t = k a lk u la t o r.p rz e lic z (t e m p F a h re n h e it ); re tu rn "sukces";
}
B y spełniać sw oje funkcje, k o m p o n en t w sp ie rają cy m usi być je d n o c z e śn ie k o m p o nentem zarządzanym p rzez śro dow isko JS F, które oferuje d e k la raty w n y m ech an izm tw orzenia kom ponentów JavaB ean i zarządzania nim i. K o m p o n e n ty z a rz ą d z a n e (ang. m a n a g e d beans') k o n fig u ro w an e sa^ w p lik u fa c e s -c o n fig .x m l. JS F tw o rz y in stan c ję kom ponentu zarządzanego na żądanie, gdy napotka w yrażenie odw ołujące się do kom po nentu, a in stan cja k om p o n en tu w żąd a n y m z asię g u n ie b ę d z ie dostępna. O d w o ła n ia do kom ponentów zarządzanych re aliz o w a n e b ę d ą p rz y u ż y ciu ję z y k a U n ifie d E x p ressio n L anguage, co zostanie po k azan e n a sz a b lo n a ch JS P w dalszej części rozdziału. A by utw orzyć kom p o n en t w sp ie rają cy w śro d o w isk u E clipse, n a le ży w y k o n ać n a stę pujące kroki: 1. T w orzym y klasę Kal kul atorBB, po d o b n ie ja k w p u n k c ie 1.3.6. 2. R ejestrujem y klasę Kal kul atorBB w p lik u fa ce s-c o n fig .x m l, do czego używ am y specjalnego kreatora. W oknie P ro ject E xp lo re r rozw ijam y w ęzeł W eb C onten t/ W E B -IN F i klik am y p lik fa c e s -c o n fig .x m l; w oknie ro b o c zy m p o jaw i się okno kreatora Faces Configuration. N a dole okna w ybieram y zakładkę M anagedBean. 3 . K lik am y przy cisk A d d i w n o w y m oknie w y b ie ram y opcję U sin g an e xistin g J a v a class, po czym p rzy u ż y c iu p rz y cisk u B ro w se p rz esz u k u jem y dostępne klasy i w ybieram y K a lku la to rB B . C ało ść z a tw ie rd z a m y p rz y c isk ie m F in ish — n ie m a p otrzeb y k o rz y stan ia z d a lszy c h stron kreatora.
Ja v a S e rv e r F a c e s i E c lip s e G a lile o . T w o rze n ie a p lik a cji '
56
Popraw ne w ykonanie w szystkich czynności pow inno spow odow ać pojaw ienie sie elc w yśw ietlającego w łaściw ości k om ponentów zarządzanych, z zaw artością ja k n a tvsi 1.14. Fizycznie w pliku fa ce s-c o n fig .x m l po jaw i się w pis pokazany na-listingu 1 3 Za& ra on nazw ę kom ponentu, któ ra będzie w ykorzystyw ana przez inne kom ponenty odwni jące się do niego, p e łn ą n a zw ę klasy definiującej oraz zasięg w idoczności kom ponentu^! R ysunek 1 .1 4 . Ekran właściwości komponentu zarządzanego 'w Neatorze konfiguracji JSF
‘ I h a te -
Rozdział 1. / P rzsd przys t 4 P'eniem do p ra cy z JS F 2
:n t- a mV
•MariagetíBeart-
’
'•» •.M an a ae rf B ear» E le m e n t s ' T h e fo llo w in g m a n a g e d b e a n s
57
Z a p o m o c ą przy cisk u N e x t p rzec h o d zim y do k o lejnej strony kreatora, zatytułow anej S e le ct J S P Tem plate (pokazanej n a ry su n k u 1.15), któ ra oozw ala w skazać szablon projektow anej strony. W y b ie ram y opcję N e w Ja va S erver F a ce s P a g e (xhtm l, x m l syntax), tj. sz a b lo n d o k u m en tu JS F JS P spełn iający w y m o g i d o k u m en tu X M L . N a stę p n ie w y b ó r z atw ierd z a m y orzyciskiem F in ish . N a ekranie po jaw i się okno edycji p lik u JSP, p o d zielo n e n a dw ie części: e d y to r graficzny i e dytor tek sto w y (o p isan e ju ż w cześniej n a rysunku 1 . 1 1 ).
' T h is s e c ti o n d e sc rib e s g e n e ra l
» fig u ratio n of th is m a n a g e d S e le c t J S P T e m p la te
üíiü-p.naroiiüs c o m .jsr.v p ra k ty c e .k a lk u la t i. Browse;)
S e le ct 3 te m p la te a s initial o
:erst in t h e JSP p a g e .
äS\ k aik u lato rB B ik i Ms e JS P 'T e m p ia te
f!Ui.::uiv..ijVipn
■ ■
■’T e m p la te s;
Y ou c a n initialize th e m a n a g e d b e a n 's p r o p e r tie s o r its e lf if it is 111-,c:ia m i.v.'/i.tivtl.t-iaii n r mv.s.i.jUU.iU'
iManm
■■■■
N ew Ja vaS erver Fa c es (JSF) P a g e (h tm l)
. ■■■■ ;■ ■
■ •!■■
i.m ncM i-n.iv,
, iviur.j
- ■l.i-,:
D e sc rip tio n
N ew ísvaS erver F e c es (JSF) P a g e « h tm l )
JSP w ith x h tm l m a rk u p , x m l sty le sync a x a n d d e fa u lt v ie w s e tu p j
: m ....» ¡..vomA-tvet r a o
JSP w ith h im ! •narkup
\l« . i JS¡- ’ ile um »' i
l‘V
Mw / i‘ i- i ne i nvnui Ni-, JM’ 1"11Mim ’r i l P re v ie w
I I n tr o d u c tio n j O v erv ie w j N a v ig a tio n R u le ; N la n ag e d B e;
.
-.vii.u nvm t '-"¡srktjo a n d d e fa u lt v ie V iwlUil JSP w i th x h tm l m a rk u p a n d d e f a u lt vr ■w '.HiCUO
/
im
h im
m a rk u p
JSP w itn x h tm l m a rk u p a n d xrnf sty le y n ta x
.Hl " llb.'ll ''
'
C o m p o n e n t. O th e rs ; Sourc e m p la c e s a re N e w j S P ‘ te m p la te s r o u n d m t h e A
re fe re r.e e p a g e .
Listing 1 .3 . Rejestracja komponentu wspierającego w pliku config-faces.xml kalkulatorBB«/managed-bean-name> «managed-bean-c la s s > c o m .js fw p ra k ty c e .k a lk u la to r.k o n tro i e r . K aikulatorBB «managed-b ea n -sco p e> req u est«/managed-bean-scope>
1 .3.8. Utw orzenie stro n y do wprowadzania danych S tro n a słu ż ąc a do w p ro w a d z a n ia d a n y c h b ę d z ie z aw ie rać ty lk o je d n o p o le teksto.f — do -wprowadzania w arto ści tem peratury w skali F ahrenheita — oraz przy cisk umój liw iający zatw ierd zen ie p rz esła n y ch danych. A b y utw o rzy ć stronę do w p ro w ad z an ia danych, w y k o n u jem y n a stęp u jące kroki: 1. W oknie P ro je c t E x p lo re r lew y m p rz y cisk iem m yszy zazn aczam y pro jek t K a lk u la to r , a n a stęp n ie p ra w y m p rz y cisk iem m y szy otw ieram y m en u k o n tek sto w e i w y b ie ra m y op cję N e w /J S P . P o ja w i się okno k re a to ra N e w J a va S e rv er P a g e, w k tó ry m w p isu je m y w p o lu F ile nam e nazw ę p lik u zaw ierająceg o szab lo n strony — K alku la to r.jsp .
Rysunek 1 .1 5 . Ekran wyboru typu szablonu strony JSP 3. W oknie p alety (P alette) rozw ijam y listę kom ponentów JSF H T M L i w ybieram y pole tekstow e (T ext Input). W y b ran y elem ent p rz ec ią g a m y n a d okno e dytora g raficzn eg o , a n a stęp n ie u p u sz c za m y w m ie jsc u p rz ez n ac ze n ia. Z au w aż m y , że elem ent osadzony został w ew nątrz autom atycznie w ygenerow anego elem entu fo rm u la rza — n iezb ęd n eg o do p rz esy ła n ia danych. 4. Z aznaczam y w sta w io n y elem ent T ext In p u t i w ok n ie w ła śc iw o ści (P roperties) ustaw iam y w artość atrybutu value na U fkalkulatorBB. tem p F a h ren h e it}. 5. Z palety k o m p o n en tó w JS F H T M L w y b ieram y k o m p o n en t C o m m a n d B u tto n (przycisk) i um ie sz cz a m y go w ew n ątrz fo rm u la rza (o b o k p o la tekstow ego, ja k na rysunku 1.11). A nalogicznie do poprzedniego punktu ustaw iam y w arto ść atrybutu va lu e n a P rze lic z (d efiniujem y tekst w y św ietlan y n a p rzycisku) oraz atrybutu a ction n a # {ka lku la to rB B .p rzelicz}. 6
. W k odzie strony w sta w ia m y w ew n ątrz elem entu < t i t l e> ty tu ł strony.
K o d form ularza b ęd ąc y re zu lta te m p o p ra w n eg o w yk o n an ia pow yższych operacji jj p o k azan y n a listingu 1.4, D ru g a lin ia k o d u zaw iera w iązanie zm iennej prywatę tem p F ah ren h eit k o m p o n en tu k alk u l atorBB z u tw o rzo n y m polem tekstow ym — fĄ tości w pisane do p o la tek sto w eg o b ę d ą po p rzesłan iu form ularza autom atycznie ka w ertow ane na typ doubl e i zapisyw ane w zm iennej kom ponentu wspierającego. Czw® lin ia k o d u zaw iera p o w ią za n ie m e to d y p rz e 1 i c z ( ) k o m ponentu ka lkulatorB B z pf cisk iem P rze lic z — p o k lik n ię ciu teg o p rz y c isk u i p rz esła n iu fo rm u la rza w ykona' k o d m eto d y z d efiniow anej w k o m p o n en c ie w spierającym . L is t in g 1 .4 . K o d fo rm u la rz a do prze syła n ia danych
i
i 3,5). U t w o r z e n ie strony do w yśw ietlania w yniku Strona służąca do w yśw ietlania w yniku będzie zaw ierać tylko k o m u n ik a t przed staw iaw ysokośćT em peratury w skali C elsiusa. A b y u tw o rz y ć stronę, w y k o n u jem y n a stępujące kroki: 1. Podobnie ja k w przypadku strony K a lku la to r.jsp , tw o rz y m y stronę W ynik.jsp. 2. W oknie palety (P alette) rozw ijam y listę k om ponentów JS F H T M L , w ybieram y w yjściow e pole tekstow e (O utput Text) i p rz ec ią g a m y je n a d okno e dytora graficznego. Z auw ażm y, że w p rzy p ad k u o sa d z en ia w y jśc io w e g o kom p o n en tu form ularz n ie je s t autom atycznie generow any. a Z aznaczam y w staw iony elem ent O ntp u tT ext i w o knie w ła śc iw o ści (P roperties) ustaw iam y w artość atrybutu va lu e n a # {k a lk u la to rB B .rezu lta t}. 4
. W kodzie strony w staw iam y w ew nątrz elem en tu < t i t l e> ty tu ł strony.
S z a b lo n y d o k u m e n tó w J S P E clip se oferuje m o żliw o ść k o rz y stan ia z szablonów przy tw o rzen iu n o w y c h strój JS P, H T M L , d o k u m en tó w X M L c zy też serw letów . U życie p red efin io w an y ch szabli n ó w u łatw ia i znacznie p rz y sp ie s z a p ro c es p ro je k to w a n ia stro n — n ie m a potizei p o w tarzać w kółk o ty ch sam y ch żm u d n y c h czynności. R ezu ltatem zasto so w an ia sza b lo n u je s t z ain icjo w a n y p o c z ą tk o w ą z a w a rto śc ią szkielet d okum entu w y branego typf U ż y tk o w n ik m a m o żliw o ść w y łą c z e n ia o pcji gen ero w an ia stro n n a p o d staw ie szabli nu (pole w y b o ru Use J S P T em p la te n a rysunku 1.15) — w tak im p rzy p ad k u tworzoą je s t p u sty p lik JSP. U ż y tk o w n ik m o że ró w n ież m o dyfikow ać istniejące i defLmo\vf w ła sn e szablony, k o rz y stając z k re a to ra szablonów , dostępnego w m enu aplikaj ( W in d o w /P re fe re n c e s/W e b /J S P F ile s/E d ito r/T e m p la te s) lub p o k lik n ię c iu łąc za j | T em plates n a stro m e S e le ct J S P T em plate (ry su n e k 1.15). j
1
W E clipse p rz etw a rza n ie d o k u m en tó w X M L w celu gen ero w an ia pod p o w ied zi, po! św ietlan ia słów k lu cz o w y c h czy w a lid a cji k o d u realizow ane je s t znaczn ie efektywni niż w p rz y p ad k u d o k u m en tó w H T M L , a sam e d okum enty X M L m o g ą być p o prz tw o rz en iu z a p o m o c ą sp e c ja ln y c h sk ry p tó w (X S L ) w yk o rzy stan e w w ie lu miejsca p ro je k tu (np. je d n o c z e śn ie sta n o w ić fo rm at doku m en tó w w y sy ła n y c h p rz ez serw er k lie n ta i ra p o rtó w generow anych w p o sta ci p lik ó w PD F). D latego stro n y JS P preze! to w a n e w k sią ż c e p o s ia d a ją p o sta ć p o p ra w n ie sfo rm u ło w a n y ch d o k u m e n tó w XMJ a do ich tw orzenia w ykorzystyw any je s t szablon d okum entu JS F JSP, o p arty n a języ l X H T M L i sty lu składni X M L (p rzy k ła d szab lo n u je s t o m ów iony dalej i zaprez w a n y n a listin g u 1.5).
Wskazówka
P o d c z a s p ra c y z d o k u m e n ta m i X M L w a rto s k o rz y s ta ć z p e rs p e k ty w y X M L , która za w ie ra m .in . o k n a n a rzę d z i d o p ro je k to w a n ia d o k u m e n tó w X M L , g e n e ro w a n ia s k ry p tó w p rz e tw a rza ją c y c h X S L , t ra w e rs o w a n ia s tru k tu ry d a n y c h w ję z y k u XPath c z y o kn o linii p o le c e ń d o w y k o n y w a n ia in stru k cji w ję zy k u X P a th .
An a liza d o k u m e n tu J S P z g o d n e g o z X M L , w y g e n e ro w a n e g o z s z a b lo n u w ś ro d o w is k u E c iip s e N a listingu 1.5 przed staw io n o kod ź ródłow y strony W ynik.jsp, w y g en ero w an y w w y niku realizacji czy n n o ści opisanych w p u n k cie 1.3.9, b ę d ą c y p rzy k ła d em popraw nie sform ułow anego d okum entu JSP, zgodnego z ję z y k ie m X M L . Listin g 1.5. K o d źródłow y dokumentu Wynik.jsp
____________________________________________
< js p : ro o t xmln s :js p = " h t t p :/ / Ja v a . sun. com/JSP/Page" xm lns: f - " h t t p :/ / ja v a . su n . com /jsf/co re" x m ln s :h -“ h t t p :/ / ja v a .sun .com /jsf/htm l" v e rs io n “ " 2 .0"> < js p :d ire c t iv e .p a g e language“ "ja va " c o n te n tT yp e = "te xt/ h tm l: c h a rse t-IS O -8 8 5 9 -1 " pageEncoding="IS0-8859 -l" /> < js p :te x t> ]]> < js p :te x t> U [C D A TA [ < !DOCTYPE htmi PUBLIC "-//W3C//DTD XHTML 1.0 T r a n s it io n a l/ /EN" '»•"h t t p : //www.w3.org/TR/xhtml 1/DTD/xhtml 1-t r a n s it io n a l,d t d " > ]]> < / js p :te x t> < title > W y n ik < / title > < f:view > < h :o u tp u tT e xt v a lu e -" # {k a lk u la to rB B . re z u lt a t }" > < / h : outputText> < / f:vie w > < / js p :ro o t>
60
ja v a S e rv e r F a c e s i E c lip s e G a lile o. T w o rze n ie a plika cji
D o k u m e n t JS P z ac zy n a się od tzw . p ro lo g u , tj. d e k la rac ji u ż y c ia ję z y k a (), zaw ierającej n um er w e rsji sp ecy fik acji X M L i deklarację strony koc wykorzystanej w dokum encie (opcjonalnie). W następnej linii zdefiniow any je st g}j elem ent drzew a d okum entu z w an y k o r z e n i e m (< jsp : root>),' w k tó ry m zagnieć są w szystkie pozostałe elem en ty d o k u m en tu JSP. K o rz eń identyfikuje p lik jako k u m e n t JSP, o k re ślając p rz y ty m w e rsję sp e c y fik a c ji JS P , z k tó rą dokum ent z g o d n y (v e rsio n ), i zaw iera deklaracje d o stę p n y ch p rzestrzen i nazw . W przykład w y s tę p u ją p rz e strz e n ie n a zw d la d w ó c h z b io ró w z n a c z n ik ó w JS F (C o re i HI oraz zbioru znaczników JSP. O soby znające składnię dokum entów JSP łatw o zau\ że deklaracja p rzestrzen i n azw w d o k u m en c ie JS P z astępuje dy rek ty w ę fa g i Ib, so w a n ą w p rzy p ad k u zw y k ły ch (n ieb ę d ąc y c h dokum entam i X M L ) stron JSP. Ogół k a żd e m u zn ac zn ik o w i JS P o d p o w ia d a ró w n o w a ż n y z n ac zn ik X M L , czeg o kole p rzy k ład znajduje się w linii 5. Z n ac zn ik < j s p :di r e c t i v e . page> je s t odpowiec dyrektyw y (śpage i w ty m p rzy k ład zie d efiniuje u sta w ien ia strony, tj. ję z y k (1 arguac w artość n agłów ka H T T P specyfilcującego typ M IM E odpo w ied zi (contentT yoe). z arejestrow any w IA N A 1 (ang. In te rn e t A ssig n e d N u m b e rs A u th o rity ) standard d o w an ia znaków (pageEncodi ng). :
g ¡¡dział 1- '• PrzetJ P o s t ą p ie n ie m do p ra cy z J S F
- W sekcji ciała d o k u m e n tu znajd u je się' elem ent < f :view>, k tó ry reprezentuje k o rz eń drzew a k o m p o n en tó w JS F (k o m p o n en t U IV iew R oot). K a ż d a stro n a re n d ero w a n a przy w - ' riżyciu J S F ' m usi zaw ierać.-ten elem ent, a w szy stk ie k o m p o n en ty JSF u ży te n a stronie : ; jg p m u ś z ą być! w _nim zagn ieżd żo n e. W a n alizo w a n y m p rz y k ła d zie je d y n y m k o m p o nentem JS F je s t w y jścio w e p o le tekstow e. K od źródłow y p okazany na listingu 1.5 został niem al w całości w y g en ero w an y n a bazie octow ego sz ablonu strony JS P w E clip se (p atrz ry su n e k 1 .1 5 ) — je d y n y m d o d a n y m elem entem do szab lo n u je s t k o m p o n en t w y jśc io w e g o p o la tek sto w eg o (lin ia 21.). D o kum ent odpow iedzi będący rezultatem p rz etw o rz en ia strony W ynik.jsp z o stał po k azan y na listingu 1 .6 . L isting 1 .6 . Kod wynikowy dokumentu X H T M L wygenerowany na podstawie Wynik.jsp "-Dml v e rs io rM '1 .0" e n c o d in g -"IS 0 -8 8 5 9 -l"? > .-•TOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 T r a n s it io n a l//EN" “http://w w w .w 3.org/TR/xhtm l1/DTD/xhtmi1 -t r a n s it i o n a l ,d t d ” > ■wm l xm ln s -"h t t p :/ /www.w3.org/1999/xh tm l"> . W a rto ści zm ien nej ś ro d o w is k o w ej $ { e n c o d in g } u s ta w ia m y w o k n ie W in d o w /P re fe re n c e s /W e b /J S P F iles. J e ś li d o d a tk o w o w p o lu filtru z a w a rto ś c i w p is z e m y en co d in g , o trzy m a m y p o d g lą d in n ych typ ó w d o k u m e n tó w tw o rz o n y c h z s z a b lo n ó w ; d la d o k u m e n tó w tyc h m o że m y zd e fi nio w a ć d o m y ś ln y s ta n d a rd k o d o w a n ia (p a trz ry s u n e k 1 .1 6 ).
R ysunek 1 .1 6 . Ustawianie standardu kodowania dokum entów tworzonych z szablonów
3 -ęyybieramy plik Kalkulator.jsp i zatw ierdzam y w ybór przyciskiem OK. W oknie - . e£jytora graficznego pojaw i się ikona strony JSP podpisana etykietą Kalkulator. A nalogicznie w p ro w ad z am y do e d y to ra g ra fic zn e g o stro n ę W ynik.jsp.
4 W oknie palety (P alette) u a k ty w n ia m y elem en t w ią za n ia (L ink) poprzez
jednokrotne k lik n ięcie lew y m p rz y c isk ie m m y sz y (k u rso r z m ie n i kształt). N astępnie klikam y kolejno ikony stro n K a lku la to r i W ynik. W y łączam y tryb w iązania, naciskając klaw isz E sc. 5. Z aznaczam y w iązanie i w oknie w łaściw o ści (P roperties) u sta w iam y w artość atrybutu F rom O utcom e n a sukces (patrz ry su n e k 1.17). N a stę p n ie z apisujem y edytow any plik.
1 .3 .1 0 . Deklarow anie regui naw igacji
q
‘S Vvvmk
_t
Ksikuistoi
~ N o d es -
P ro je k to w an a a p lik acja z zało żen ia m a d ziałać w e d łu g następ u jąceg o schem atu: ! I n tr o d u c tio n ; O v e r v ie w ; N a v i g a tio n R u le : t v i a n a g e c s B e a r u C o m p o n e n t i O t h e r s : .S o u r c e ; yu
1 . W p ro w ad z a n ie dan y ch — u ży tk o w n ik w p isu je dane w e jśc io w e w form ularzu a stro n y K a lk u la to r i z atw ierd z a p rz esła n ie d a n y ch p rz y cisk iem P rzelicz. 2
[FO *M arkei5 5 <-T P rc c e r ii e s
. W y św ie tlen ie dan y ch — dane w ejścio w e p o d le g a ją p rz etw o rz en iu w warstwie? logiki b izn e so w ej, a je g o rezu ltat je s t w y św ietlan y n a stronie Wynik.
t Quick Edit
Attributes
2
. W o k n ie p a le ty (P a le tte ) w y b ie ra m y e le m e n t stro n y (P a g e) p o p rz ez je d n o k ro tn e k lik n ię cie lew y m p rz y c isk ie m m yszy. N a stę p n ie p rzen o sim y k u rso r n a d okno e d y to ra graficzn eg o i p o n o w n ie k lik a m y lew y m p rzyciskiem m yszy. P o ja w i się okno d ialogow e S e le c t J S P F ile , w k tó ry m w y św ietlo n a je s t stru k tu ra p ro je k tu z d o stęp n y m i p lik a m i JSP.
k z S m o p tts
&
C o n * -o lc
_ suscce;
Rysunek 1.17. Definiowanie reguł nawigacji w edytorze graficznym , Rezultatem w ykonania p o w y ż sz y ch czy n n o ści pow inno być d o d an ie do p lik u fa c e s conjig.xm l w pisu p okazanego na listingu 1.7. Listing 1.7. Definicja reguły nawigacji w pliku faces-config.xml
_______________ _________________
< n a v :g a tio n -ru le > Kalkulator < fro m -vie w -i d>/Kai k u la t o r . js p < / fro ra -v ie w -i d> ■'-ridvigat1on-case> sukces < to -vie w -id > /W yn ik . js p < / to -v ie w -id > < / n a v :g a tio n -ru le >
R e g u ły n a w ig ac ji (ang. na vig a tio n rules) o k re śla ją w aru n k i p rz ejśc ia pom iędzy p i szczeg ó ln y m i stro n a m i aplik acji i s ą d e fin io w an e w p lik u fa c e s-c o n fig .x m l lub ii p lik u X M L , w s k a z a n y m ja k o je g o ro z sz e rz e n ie . A b y z d e fin io w a ć re g u łę nawigaś w e d y to rz e g raficzn y m , w y k o n u je m y n a stęp u jąc e kroki: . W o knie P ro je c t E x p lo re r o tw ieram y k a ta lo g W e b C o n te n t/W E B -IN F i p lik fa c e s -c o n fig .x m l. N a e k ran ie p o w in n o p o ja w ić się o k n o e d y to ra F a ces C o n fig u ra tio n E d ito r. P o p raw ej stro m e w y św ietli się okno palety.
3 D a t a S o u r c e E x plore'-
raise
W sz y stk ie e le m e n ty p o trz e b n e do z re a liz o w a n ia teg o sc h e m a tu d z ia łan ia aplik: w ła śc iw ie s ą ju ż g otow e — zaró w n o strony w id o k ó w , ja k i k o d w a rstw y sterów; o raz log ik i bizn eso w ej zo stały ju ż zaim p lem en to w an e. D o pełnej realizacji p ro jek to w y c h p o z o sta je je d y n ie określić w a ru n ek p rz e jśc ia p o m ię d z y stronam i, sta n o w i w p e w n y m se n sie w ią za n ie p o m ię d z y stro n a m i K a lk u la to r i W ynik czy-fi spina czynności w prow adzania i w yśw ietlenia danych. W arunkiem w yzw alającym prze ście ze stro n y K a lk u la to r do strony W ynik b ę d zie łań c u ch z n ak o w y o w artości suką zw racany przez m etodę akcji przel i c z ( ), pow iązaną z przyciskiem Przelicz, a sam ru n e k z o stan ie z d efin io w a n y w p o sta ci tzw . re g u ły n a w ig a c y jn e j.
1
4"s S e r v e r -
-St Link
z
1.3.11. Urucham ianie aplikacji W celu zapew nienia m ożliw ości szybkiego u ru c h am ia n ia i testo w an ia ap likacji należy zintegrow ać środow isko E clip se z serw erem aplikacji, tj.: ♦ zdefiniow ać środow isko u ru c h o m ien io w e ap likacji u ru c h am ia n y c h n a serw erze, ♦ utw orzyć instancję serw era (k onfigurację startow ą), w ty m środow isku.
L
Ja va S e rv e r F a c e s i E c lip s e G a lile o. T w o rze nie a plika cji
64
D efin io w an ie śro d o w isk a u ru c h o m ien io w e g o je s t opisane w p unkcie 1.3.3, a pr je g o zasto so w an ia p rz y tw o rzen iu p ro jek tu w eb o w eg o — w punkcie 1.3.4. Przv"i żeniu, że tak a d efinicja zo stała ju ż p rz ez u ż y tk o w n ik a u tw o rz o n a; najprostszym so b e m n a w y g e n ero w an ie in sta n c ji se rw e ra b ę d zie po p ro stu u ru c h o m ie n ie app i skorzystanie z k reato ra R un on S e rv e r , któ ry auto m aty czn ie u tw o rz y n iezbę stancję (konfigurację). W tym celu w y k o n u je m y n astęp u jące kroki: 1
2
■■ n a P rze d p rz y s tą p ie n ie m do pracy z JSF g 0 zd iia^ęę_ _ ..................................................... ...
% •■ Uwaga
. W oknie P ro jec t E xp lo re r otw ieram y k a ta lo g W ebC ontent i.najeżd żam y k u rso rem n a d p lik K a lku la to r j s p . K lik ając p ra w y m p rz y cisk iem m yszy, u rucham iam y m en u kontekstow e.
ii A d d a n d R e m o v e
¿y .-iC r =m.e' : J R u n On S e r v e r
its g n tto coniigufe.tr
K o rzys ta n ie z w b u d o w a n e j w ś ro d o w is k u E c iip s e p rze g lą d a rk i m o że b yć w pełni s a tysfa k cjo n u ją cy m ro zw ią za n ie m dla w ię k s z o ś c i z a s to s o w a ń zw ią za n y c h z te s to w a niem s tro n c zy c a łyc h a p lik a c ji. W yn ik a to z fa k tu , że w b u d o w a n a p rz e g lą d a rk a je s t za im p le m e n to w a n a na b a z ie je d n e g o z -p o p u la m y c h s iln ik ó w p rz e g lą d a re k (z a le ż nie od w e rsji in sta la c yjn e j E c iip s e s ą to s iln ik i G e c k o i T rid e n t), s p e łn ia ją c y c h w ięk s zo ś ć w ym agań o k re ślo n y ch p rze z W 3 C . Na p rzykład w e rs ja in sta la c yjn a E c iip s e dla syste m u W in d o w s za w ie ra p rz e g lą d a rk ę o p a rtą n a siln ik u T rid e n t 4 .0 i k o m p a ty b il ną z in te rn e t E xp lo re re m 7 .0 . Je ś li c h c e m y te s to w a ć s tro n ę d e d y k o w a n ą d la o k re ś lo n e j p rz e g lą d a rk i — za w ie ra ją c ą n ie typ o w e (in te rp re to w a n e tylk o p rz e z w yb ra n e p rz e g lą d a rk i) re g u ły s ty lis ty c z ne bądź skrypty o dw ołujące s ię do nietypow ych fu n k cjo n a ln o ści za im ple m ento w a nych w w ybran ej p rz e g ią d a rc e — k o n ie c zn ym ro zw ią za n ie m b ę d z ie u ż y c ie p rze g lą d a rk i ze w n ę trzn e j. T a k ie ro zw ią za n ie b ę d z ie ró w n ie ż w s k a z a n e w p rz y p a d k u , g d y p ro je k ta n t stro n b ę d z ie c h c ia ł s k o rz y s ta ć ze s p e c ja lis ty c z n y c h n a rzę d z i do d e b u g o w a n ia kodu Ja va S crip t, analizy błęd ó w na stro n ie , pro filow an ia stro n y, w izualizacji obiektów DOM czy m etryk C S S lub m onito ro w an ia a ktyw n o ści siecio w ej przeglądark i. W przy padku dw óch n a jp o p u la rn ie jszy ch p rze g lą d a re k , którym i s ą In te rn e t E x p lo re r i M o zilia Firefo x, w y m ie n io n e fu n k c je s ą za p e w n ia n e p rz e z s p e c ja lis ty c z n e w ty czk i p ro g ra m istyc zn e , tj. o d p o w ie d n io IE D e b u g B a r i FF F ire B u g .
. W m enu kon tek sto w y m w y b ie ram y opcję R u n A s/R u n on S erver. N a ek pojaw i się okno dialogow e R un on Server, w którym w szystkie pola dialo p o w in n y być w y p e łn io n e w a rto śc ia m i d o m y śln y m i; w ty m p rz y k ła d z ie nie T trzeba ich m odyfikow ać. T eraz m o żem y p rz y cisk iem F in ish zakończyć k onfiguracji serw era i uru ch o m ić aplikację. Jeśli chcem y po d ejrzeć zasoby * u m ieszczo n e na serw erze, k lik a m y p rz y cisk N ext.
G dy w ykonam y pow yższe czynności, w centralnej części obszaru roboczego się okno w budow anej p rzeg ląd ark i E clip se, w k tó ry m m ożem y testow ać u r u c ł u r n a serw erze aplikację. Jednocześnie w zak ład ce Servers p o w in n a się p o jaw ić serw era A pache T om cat. P rzykład k o n fig u rac ji k o n ten era serw letó w A p ach e T~ z o stał pokazany na ry su n k u 1.18.
65
Uwaga
Aby szy b k o zm ie n ić u s ta w ie n ia d o m yś ln e j p rz e g lą d a rk i, n a le ż y w m e n u a p lik a c ji w ybrać W in d o w /W e b B ro w s e r i w s k a z a ć na liś c ie w ła ś c iw ą o p c ję . S ta n d a rd o w o li sta o p cji za w ie ra c z te ry p rz e g lą d a rk i: w b u d o w a n ą ( in te rn a l w e b b ro w s e r), s y s t e m ową ( D e fa u lt s y s te m Web bro w se r) o ra z F ire fo k s a i In te rn e t E x p lo re r. M o żn a tę listę ro zs z e rzy ć , w yb ie ra ją c z m en u a p lik a c ji W in d o w /P re fe re n c e s /G e n e ra t/W e b Browser. P rze g lą d a rk i d o s tę p n e w s y s te m ie o p e ra c yjn ym m o g ą z o s t a ć w y s zu k a n e autom atycznie w podanej lokalizacji (m o żn a s k o rzy sta ć z przycisk u Search) lub sko nfi gurow ane rę c zn ie w o k n ie d ia lo g o w y m po k lik n ię c iu p rz yc is k u New.
1.3.12. Podsum owanie przykładu
«tvSJSí catvñ.OSi nsJJEE an.
N ajw iększą przeszk o d ę w p ro c esie p o z n aw a n ia JS F C z y te ln ik m a ju ż za sobą. P rz y kład ilustruje najw ażniejsze elem enty szk ieletu p ro g ram isty cz n e g o JS F i stanow i p o d sum ow anie teo rety czn y ch ro z w aż a ń d o ty cz ąc y c h je g o a rch ite k tu ry oraz k luczow ych koncepcji. Schem at p rzep ły w u z d arzeń g e n ero w a n y c h w trak cie in terak cji u ż y tk o w nika z ap lik acją K alk u lato r T em p era tu r z o stał p o k a z a n y n a ry su n k u 1.19. S ch em at ten uw zględnia o dseparow anie w a rstw w arch itek tu rze M V C ; n a ry su n k u m o że m y w y różnić w arstw y: ♦ w id o k u — okna aplikacji k lie n ta oraz d rz ew a k o m p o n en tó w re n d ero w a n y c h stron JSP, ♦ sterow ania — kom p o n en t w sp ie rają cy oraz re g u ły naw igacji, ♦ m odelu — k o m p o n en t zaw ie rają cy logikę b izn e so w ą, o p a rty na w z o rcu B u sin ess D elegate.
R ysunek 1.3.8. Uruchamianie kontenera serwletów Apache Tomcat — okno konfiguracji serwera (po lewej) i okno modyfikacji zasobów umieszczonych na serwerze (po prawej)
A by zachow ać czytelność przy k ład u , p o m in ię to w ie le elem en tó w JS F, które m o g ły b y być w n im ja w n ie u ż y te , np. re n d ere ry , w a lid a to ry , k o n w e rte ry , p lik i k o m u n ik a tó w
6 6 ______________________
Ja va S e rv e r F a c e s i E clip s e G a lile o. T w o rze n ie aplikacji
i inne — są one opisane w dalszej części książki. U z u p ełn io n y p rz y k ła d znajduj’ w rozdziale 4., w któ ry m stanow i on ilustrację p rzetw arzania żądania w poszczegó fazach cyklu p rz etw a rza n ia JSF.
Po zapoznaniu się z pod staw o w y m i w iad o m o ściam i n a tem a t arch itek tu ry i m o żliw o ści szkieletu JS F m ożem y p rzejść do zag ad n ień zw iązan y ch z w y tw a rza n iem realn y ch aplikacji W W W w śro d o w isk u p ro g ra m isty c z n y m E c lip se G alileo . W n in ie jsz y m rozdziale w y b ra n e fazy w y tw a rz a n ia a p lik a cji s ą z ilu stro w a n e n a p rz y k ła d z ie I n t e r netow ego S y ste m u R e c e n z o w a n ia P u b lik a c ji (w skrócie IS R P ), p rz ez n ac zo n e g o do zapew nienia o bsługi in fo rm a ty cz n ej p ra c y re d a k c ji c za so p ism n a u k o w y c h oraz w spom agania organizacji k o n fe re n c ji naukow ych. Z akres fu n k cjo n aln o ści p ro jek to wanego system u obejm uje obsługę rejestracji arty k u łó w z g ła sz an y c h p rz e z autorów , proces recenzji artykułów oraz a d m in istro w an ie k ontam i użytko w n ik ó w . Nie jest intencją autora zam ieszczenie w tym m iejscu pełnej dokum entacji system u ISRP jako złożonego studium p rz y p ad k u u ż y cia JS F (ang. case study), ale raczej p rz ed sta w ienie pew n y ch p ra k ty k p ro jek to w y c h z w iązan y ch z a rch ite k tu rą i p ro jek to w an iem aplikacji JSF n a platfo rm ie Ja v a E E . P rezen to w an e ro z w iąz an ia s ą w y p a d k o w ą d o św iadczeń w ielu osób w zak resie w y k o rz y stan ia szk ieletu JSF do w y tw a rza n ia w ar stwy prezentacji w ap likacjach o arch itek tu rze w ielow arstw ow ej. S z czeg ó ln a u w aga pośw ięcona je s t w y b ran y m asp ek to m z w iąz an y m z czynnościam i fa zy przedim plem entacyjnej projektu, tak im ja k m od elo w an ie interfejsu u ż y tk o w n ik a oraz p ro jek to wanie aplikacji oparte na architekturze w ielow arstw ow ej. Z am ieszczone w tym rozdziale m odel i zało żen ia p ro jek to w e b ę d ą ro zw ijan e w dalszej części k sią żk i i stanow ić je d nocześnie odniesienie dla kolejnych przykładów ilustrujących elem enty technologii JSF.
Ja va S e rv e r F a ce s i E c lip s e G a lile o. T w o rze n ie aplikacji 1
68
J e S o w
a iili.
,
u ży tk o w n ik a ptzy wykorzystaniu! t e e iiiiik i scenopisu Ja k o ść m o d e lu p ro jek to w a n eg o system u często d ecy d u je o po w o d zen iu projektiil fo rm a ty c z n e g o , a je g o najbardziej p o ż ą d a n ą c e c h ą je s t kom prom isow ość. M odef w in ie n b y ć je d n o c z e śn ie zro zu m iały dla klien tó w , k tórzy n a je g o p odstaw ie oce fu n k c jo n a ln o ś ć system u, j a k też zaw ierać w szy stk ie n iezb ęd n e dane d la zespolu-S jek to w e g o , k tó ry z niego korzysta w fazie projektow ania. Z jednej strony m odel powim by ć d o p aso w an y do technologii stosow anych w fazach projektow ania i implemei (przy założeniu, że s ą one znane w cześniej i w y n ik ają np. z w ym agań niefunkcjo n y c h ), a je d n o c z e ś n ie nie p o w in ie n w y m a g ać rozległej w ie d zy na ich tem at od i U tyków w y tw a rz a ją c y c h m odel. s Z e w z g lę d u n a k o m p o n en to w y ch arak ter szk ieletu JSF, sc e n o p is w ydaje się tecli m o d e lo w a n ia , k tó ra doskonale sp ełn ia opisane w y żej kry teria. S cenopis specy m o d e l z a w ie ra ją c y analizę fu nkcjonalną, k o m p o n en ty funk cjo n aln e oraz inter: p o m ię d z y n im i n a -ek ra n ac h oraz p rz ep ły w y i p ro je k ty ekranów . N a jw ię k s z ą ; sc e n o p is u j e s t to, że je s t on zro zu m iały d la o sób sp o za b ra n ży inform atycznej, cdi p e w n ia ją d ia g ra m y przy p ad k ó w u ż y cia i p ro to ty p y ekranów . W dalszej części d z ia łu z a p re z e n to w a n e z o sta n ą p o sz c ze g ó ln e ele m en ty scenopisu, ilustrow ane wy n y m i fra g m e n ta m i m odelu aplik acji ISR P.
Scenopis i metodyki modelowania, projektowania i dokumentowania systemów informatycznych M e to d y k i w y tw a rz a n ia sy stem ó w in fo rm a ty cz n y ch sta n o w ią je d e n z głów nych i tó w in ż y n ie rii o program ow ania. O becnie sta n d ard o w y m n arzę d zie m do modelowa] sy s te m ó w in fo rm a ty cz n y ch je s t ję z y k U M L w w ersji 2.1, k tó ry stanow i jednoczę s y s te m w iz u a liz a c ji, sp ecy fik o w an ia oraz d o k u m en to w a n ia elem entów system u? fo rm a ty c z n e g o . U M L je s t u ż y w an y w raz z je g o re p re z e n ta c ją g ra fic zn ą — jego t m e n to m p rz y p is a n e s ą sym bole, któ re w iązane s ą ze so b ą n a diagram ach. Ze wzglęi n a to że U M L z o stał stw orzony z m y ślą o o p isie św iata w analizie obiektow ej, jejf sp e c y fik a c ja n ie definiuje g o to w y ch ro zw iązań d la sp e c y fic zn y c h z astosow ań, takfjl j a k m o d e lo w a n ie interfejsu u ż ytkow nika. P o n ie w a ż nie p o w sta ł zunifikow any sti d a rd d la m o d e lo w a n ia z ach o w an ia i struktury a p lik acji W W W , np. w zakresie moi lo w a n ia n a w ig a c ji, p rz ep ły w ó w ste ro w an ia n a ek ran a ch czy p ro jek tó w ekranów , i n e o rg a n iz a c je i firm y fo rsu ją w ła sn e ro z sze rz en ia ję z y k a U M L w ty m zakresie. O p ie ra ją c się n a U M L , stw orzono m eto d y k ę p ro je k to w a n ia o program ow ania Rlj {R a tio n a l U n ifie d P rocess), któ ra definiuje sz a b lo n p ro c esu iteracyjnego wytwar: o p ro g ra m o w a n ia o pracow any p rz ez firm ę R a tio n a l S oftw are C orporation. Szablę R U P p o z w a la n a korzystanie z jeg o elem entów w zależności od potrzeb projektom S p o ś ró d n a jle p sz y c h p ra k ty k i z a sa d in ży n ie rii o p ro g ra m o w a n ia , k tó re s ą w nim s w a rte , w a rto w s k a z a ć dość isto tn e z p u n k tu w id z e n ia specyfiki aplikacji tworzi • I
JSF zarządzanie w y m ag an iam i (ang. R eq u ire m e n t M a n a g e m e n t), używ anie archi bazującej na k o m p o n e n ta c h (ang. C o m p o n e n t-b a se d A r c h ite c tu r e ) czy g ra ficzne projektow anie o program ow ania.
te k tu r y
'S c e n o p is (ang. storyboard) je s t m o d e le m p ro je k to w y m , z w y k le tw o rz o n y m przez
"analityków b izn e so w y ch i p ro je k ta n tó w in te rfe jsu u ż y tk o w n ik a , d o sta rc z o n y m zenołowi dew eloperów ja k o część sp ecy fik acji funkcjonalnej. Id e a sc e n o p isu w y w o d zi się z przedstaw ionej w yżej m eto d y k i R U P , k tó ra d efiniuje m .in. m o d e l p ro je k to w a n ia interakcji oparty na d o św ia d czen iu u żytko w n ika (ang. U ser-eX p erie n c z — U X) w p o staci ekranów , ich dynam icznej zaw arto ści i sp o so b u naw igacji. T y p o w y scenopis zaw iera pięć elem entów : ę przypadki użycia opisujące w y m a g an ia funk cjo n aln e i p rz ep ły w y zdarzeń, b m odel ekranów U l sp ecy fik u jący ekrany, k o m p o n en ty i ele m en ty U X , ó diagram naw igacji ilu stru jący zw iązki p o m ięd zy ekranam i (przede w szy stk im reguły naw igacji), o party n a n o tac ji graficznej diag ram u klas, ♦ m akiety ekranów (ang. m o ck-u p ) p o k a zu jąc e szczeg ó ło w o elem enty funkcjonalne interfejsu G U I, tj. k ontrolki i ich ro zm ieszczen ie, 4
diagram y m aszyny stanow ej dla każd eg o ekranu ilustrujące interak cję w a rstw y kontrolera ekranu z w a rstw ą m o d elu aplikacji.
«m
1 .1 . Przypadki użycia W ygodnym n arzędziem sto so w an y m n a p o trzeb y iden ty fik acji i d o k u m en ta cji w y m a gań funkcjonalnych s ą d iag ra m y p r z y p a d k ó w u ż y c ia (ang. U se C ase — U C) w ję z y ku UML. Ilu stru ją one ffm kcjonalność sy ste m u p o p rzez w y szc ze g ó ln ie n ie i p rz e d sta w ienie za p o m o cą sym boli graficznych: ak to ró w inicjujących d ziałania, p rz y p ad k ó w użycia system u oraz w y stę p u jąc y ch p o m ię d z y nim i zw iązków . D z ię k i sw ojej p ro sto cie oraz abstrahow aniu od ro z w iąz ań tech n iczn y ch , d iag ram y p rz y p a d k ó w u ż y c ia s ą zrozum iałe naw et dla osób, któ re nie p o siadają w ykształcenia inform atycznego. Z zało żenia stanow ią one czytelne narzędzie pozw alające na kom unikację pom iędzy tw órcam i system u i jeg o poten cjaln y m i odb io rcam i czy inw estoram i. P odsum ow ując, przy p ad k i użycia opisują, co sy ste m p o w in ien robić, a n ie ja k m a to robić. N a rysunku 2.1 przedstaw iono diagram przypadków użycia m o d elu jąc y aktorów , przy padki użycia oraz p o w ią za n ia p o m ię d z y nim i, w y stę p u ją c e w sy ste m ie IS R P . S che m atyczny rysunek p o sta ci ludzkiej zło żo n y z k ilk u k re se k je s t sy m b o lem g ra fic zn y m aktora, definiującego sp ó jn y z b ió r ról od g ry w an y ch p rz ez u ż y tk o w n ik ó w p rzy p ad k u użycia w czasie je g o realizacji. P rz y p a d k i u ż y cia oznaczo n e s ą p rz y w y k o rz y stan iu w ypełnionych elips, a ich re aliz a cje z w y k ły m i liniam i. R elacje ro z sze rz an ia i z aw ie rania dla p rzypadków u ż y cia opisane s ą p rz y zasto so w an iu ste reo ty p ó w u m ie sz cz o nych w cudzysłow ach o strokątnych. R elacje u o g ó ln ia n ia (w sensie z w iąz k u tak so n o m icznego, o p isu jąc eg o d z ie d z ic z e n ie cech) p rz e d sta w io n e z o sta ły za p o m o c ą linii zakończonych strz ałk ą z p u sty m grotem .
Ja va S e rve r F a ce s i E c lip s e G a lile o, Tw orze nie a p lik a cji ift
¡ozdzia ł 2. ♦ P lanow anie, modelow anie i projektow anie a p lik a cji J S F na platform ie Jav
oba zespoły. M odel ekranów U l definiuje zbiór e k ran ó w (w raz z ich zaw arto ścią) n ie zb ęd n y ch do z rea liz o w a n ia w ym agań fu n k cjo n aln y ch o k re ślo n y c h p rz e z p rz y p ad k i użycia. W p rzypadku zaw artości ekranów m odel definiuje w y łączn ie ele m en ty funk cjonalne, jak ie pow in n y znaleźć się n a nich, b ez o k reślan ia sz czeg ó łó w do ty czący ch typów k ontrolek (np. p o la tekstow ego albo listy ro z w ija n ej) czy ich rozm ieszczen ia. W technice scenopisów standardow ym elem entom U M L n adaw ane s ą n ow e znaczenia poprzez użycie stereotypów przedstaw ionych w tabeli 2 . 1 . 'abela 2 .1 . Stereotypy modelu Ul wykorzystywane w technice scenopisów • Rozszerzany e le m en t UML
S te re o ty p
R eprezentuje
Screen
Class
Ekran (w postaci strony WWW).
Compartment
Class
Fragment ekranu (strony WWW) przeznaczony do wykorzystania na wielu stronach aplikacji W W W (definiujący sekcję strony np. stopkę, nagłówek itp.).
Form
Class
Formularz strony WWW.
Input
Attribute
Pole wejściowe formularza.
Submit
Operation
Element zatwierdzający formularz i generujący akcję.
S tatyczne inform acje takie ja k etykiety, obrazki czy p an ele nie s ą w og ó le re p re z en tow ane w m odelu UL D ane biznesow e są p rzed staw ian e n a ekranie p rz y u ży ciu a t r y b u tó w . Jeśli atry b u t opatrzony je s t stereotypem « i n p u t » , o zn acza to, że służy on do w p row adzania danych. P ełn y opis atrybutu p re ze n to w an y je s t w edług następ u jąceg o formatu: widoczność nazwa :typ liczebność =dom yślnajwartość {w łaściw ości}. Z ałóż my, że m am y ekran słu żący do tw orzenia k onta n ow ego uży tk o w n ik a, d o stę p n y w y łącznie dla ad m inistratora system u. Pole służące do w p ro w ad zan ia u p ra w n ień d la n o w ego u ży tk o w n ik a m oże zostać opisane w n astęp u jący sposób: « i n p u t » + ro le :S tr in g 1 »re v ie w e r {u s e r .roie-=adm1n}
R ysu n e k 2 .1 . Diagram przypadków użycia dla ISRP
D o k ła d n y opis w y k o rzy stan ia diag ram ó w U C do m od elo w an ia fun k cjo n aln o ści s; tem u C zy teln ik znajdzie w książce J ę z y k U M L 2 .0 w m o delow aniu sy ste m ó w infi m a tyczn ych , a w yczerpujący opis scen ariu szy p rz y p ad k ó w u ż y cia (tekstow ej fo n p re ze n ta c ji U C ) znajduje się w ksią żc e W riting E ffe ctiv e Use C a se s1.
2 .1 .2 . Model ekranów interfejsu użytkow nika M o d el ekranów U l stanow i centralny p u n k t w yjściow y dla rów noległego rozw oju aj kacji, p ro w ad zo n eg o w z esp o ła ch p ro jek tan tó w stron W W W i p ro g ram istó w aplikac stanow iąc jed n o c ze śn ie interfejs u m o żliw iając y in tegrację k o d u w y tw arzan eg o p n 1
Polskie wydanie: Alistair Cockbum, Jak pisać efektywne przypadki utycia, tłum. Krzysztof Stencel, W arszawa 2004.
P ow yższy zapis inform uje nas, że atrybut r o le re p re z en tu je p o le w e jśc io w e d la d a nych ty p u String, w y p e łn ia n e p rz ez u ż y tk o w n ik ó w z u p ra w n ie n ia m i ad m in istrato ra. W idoczność elem entu określa, czy je g o zaw artość je s t w y św ietlan a n a ekranie (+), czy też je st ukryta (-). N azw a atrybutu pow inna identyfikow ać pole w prow adzania danych (np. w artość atry b u tu name dla odpow iedniego p o la form ularza). T y p em atry b u tu m o że być dow olny typ p ry m ity w n y lub obiektow y, w łączn ie z abstrak cy jn y m i typam i danych, reprezentującym i złożone struktury d a n y ch (takie j a k listy czy m apy, które m o g ą być rep rezen to w an e p rzez k lasy abstrakcyjne L is t b ą d ź Map). P o z o sta łe w ła śc i w ości atrybutu s ą o pcjonalne i nie m u sz ą być definiow ane. L iczeb n o ść określa, ile in stancji elem entu m oże być renderow anych na e k ran ie, w a rto ść d o m y śln a j e s t w a rto śc ią u ż y w a n ą d la ele m en tó w , k tó re n ie s ą in icjo w an e, a n a w ia s y klam row e um ożliw iają zam ieszczenie dodatkow ych w ła śc iw o ści b ą d ź o g ra n ic z e ń d o ty c z ą c y c h a try b u tu , np. w zakresie dostępu do p o la danych. Z d arzenia g enerow ane p rz e z interfejs u ży tk o w n ik a oraz ak cje u ż y tk o w n ik a reprezen towane s ą za p o m o cą o p e rac ji. Jeśli o p e rac ja je s t d o d a tk o w o o p a trz o n a ste reo ty p em « s u b m i t » , o z n a c z a to, że w sk az an y elem en t U l słu ży do z a tw ie rd z a n ia fo rm u la rza
72
Ja va S e rv e r F a c e s i E c lip s e S a liie o . T w o rze n ie a p lik a cji V\P
zdział 2, « P lanow anie, m odelow anie ¡'p ro je k to w a n ie a p lik a cji JS F na platform ie Java
i generow ania akcji, której w ynik m oże w pływ ać na naw igację aplikacji. Pełny opis opę ra c ji p re z e n to w a n y je s t w e d łu g n a stę p u ją c e g o fo rm atu : w id o czn o ść nazwa ( / is param etrów) -.zwracany_typ {w ła śc iw o ści}. N a p rz y k ła d e le m en t w y zw alający akcji p o leg a jąc ą n a przejściu do okna edycji bieżącego użytk o w n ik a m oże być opisany w nf stępujący sposób: « s u b f f l i t » + e d it ( k S t r i n g
-
{c u r r e n t . user— notErapty}
N a z w a operacji p o w in n a b y ć p o w ią za n a z n a z w ą m eto d y służącej do-obsługi zdarzi n ia w y g e n ero w an e g o p rz ez o p erację lub n a z w ą p o w ią za n eg o z o p e ra c ją p o la (np. gd; o p e rac ja d o ty cz y w a lid a cji d a n y ch w p ro w ad z an y c h do p o la w ejścio w eg o po stronię klienta). W idoczność elem entu określa, czy akcja m a być podjęta po strom e klienta (-).) czy po stronie serw era (+). W łaściw o ści d o d atk o w o c h arak tery zu jące operacje zad m ieszczane s ą w op cjo n aln y ch n aw iasach klam ro w y ch . N a ry su n k u 2.2 zaprezen to w an o m odel ek ran u re aliz u jąc eg o dw a p rz y p ad k i użycia sy stem u IS R P — rejestrację n o w eg o u ż y tk o w n ik a i edycję d a n y ch u ż y tk o w n ik a uwie rzy teln io n eg o . O bie fun k cjo n aln o ści sy ste m u s ą dość p o d o b n e i o p e ru ją n a jednym z biorze danych, w ięc do ich obsługi zam o d elo w a n y został je d e n ekran. E k ran składa; się z trze ch części: n a g łó w k a (topMenu) z aw ie rają ce g o p rz y cisk i n aw igacji, m enu dla_ uw ierzytelnionych użytkow ników (1 eftMenu) i form ularza danych użytkow nika. W przy padku re je strac ji n o w eg o u ż y tk o w n ik a elem en ty m en u leftM enu oraz p rz y cisk zapi sy w an ia fo rm u la rza n ie s ą w id o czn e, p o d o b n ie j a k p rz y cisk i n a w ig ac ji (patrz rysunek 2.4). Z k o lei w p rzy p ad k u k o rz y stan ia z ek ran u p rz ez a d m in istrato ra w szy stk ie jego e le m en ty s ą w idoczne.
«c o m p a rtm e n t»-: in c Iu d e s ::ie ftM e n u
ad d P a p er{u se r.ro ie “ =authop}()(:.String : a d d U se r {user.role==adm in}() «S trin g ' allP apersUst.{user.roie== adm in}() : String ■ authorsPapersList (user.roie= = a utho r}(): String editA ccount{currentUser==notEm pty}(): String review ersPapersList (u s er.role= = re vie w er}(): String usersList -{user.roie== adm in}(): String
■.-slim.!’.» city: text . t country: seiect .. .. - . department: text. .: firstNam e; text., gender: .radio . iastName: texr . password: text . •. • - phone: text. . role {user.role==adm in}: select street: text . title: text - zip C od e : text
*br . k
ip sk
tp
«com partm ent» in c lu d e s x to p M e n u + . .userNam e {usep==authorized}: String •t+
e n g iis h (): void poiishQ : void
«su b m it» + login {u ser= = n otA u th orize d }(): String + logout {u ser= = a u th o rize d }(}: String + registration {user==notAuthorized}() : String
«su om it» -b.. sa ve {c u rre n tU s e r= = n o tE m o ty )0 : S tn n g
+
2 .1 .3 . M odel naw igacji
73
registration {curren tU se r= = e m p ty}(): String
i
W tech n ice scen o p isó w diag ram y n a w ig ac ji nie k o n c e n tru ją się n a kon k retn y m przej p ły w ie zd arzeń , ale p o k a z u ją zw iązki p o m ię d z y ekranam i. M o d e l naw ig acji zawieraj g ra fic z n ą ilu strację p rz ep ły w ó w naw ig acji dla w szy stk ic h p rz y p ad k ó w użycia. Przej p ły w y n a w ig ac ji d la p o sz c ze g ó ln y c h p rz y p a d k ó w m o g ą b y ć p rezen to w an e n a odj d z ie ln y c h d ia g ra m a c h b ą d ź je d n y m d iag ra m ie z b io rc zy m , ja k p o k a za n o n a ry sn n k j 2.3. Ja k m ożna zauw ażyć, przedstaw iony diagram naw igacji je s t bardziej szczegółow | niż o p isan a w ro zd ziale 1. g raficzn a re p re z en tac ja reg u ł n a w ig ac ji w E clipse WTIg N iem n iej p o d c za s tw o rzen ia diagram u m o żn a w y k o rz y stać gotow e o biekty ekranóvj stanow iące zaw artość utw orzonego w cześniej m odelu ekranów interfejsu użytkow nika.J W y stęp u jąc e n a d iagram ie asocjacje sk iero w an e w s k a z u ją k ieru n e k p rzep ły w u stercf w a n ia p o m ię d z y d w om a ekranam i. W sz c ze g ó ln y c h p rz y p ad k a ch asocjacje m o g ą b y j w yprow adzane do form ularza ( « f o r m » ) , ale zaw sze m iejscem docelow ym je s t ekrarj K a ż d a aso c ja cja p o w in n a p o siad ać p o w ią z a n ą z d o c elo w y m e k ran e m u n ik a to w ą naj zw ę, k tó ra b ę d zie m o g ła zostać w y k o rz y stan a p o d czas d e fin io w a n ia reg u ł nawigacji JS F (jako w a rto ść elem entu ).
Rysunek 2 ,2 . Model ekranu rejestracji i edycji danych użytkownika
2.1.4. P rototypy ekranów Z rozum iały, ergonom iczny i p rz ejrzy sty interfejs u ż y tk o w n ik a je s t je d n y m z klu czo w y ch c zynników decydujących o su k cesie aplik acji W W W . K on su lto w an ie w yglądu in terfejsu p rz ez p o ten cjaln y ch u ży tk o w n ik ó w system u w fazie przedim plem entacyjnej lub w trak cie im plem entacji p o z w a la ten su k ces o siągnąć. C elem p rz e a n a liz o w a n ia preferen cji uży tk o w n ik ó w w zak resie fu n k c jo n a ln o ści in terfejsu stosuje się tzw . p ro to typow anie, p o leg a jąc e n a w y tw a rz a n iu m a k ie t e k ran ó w (ang. m o c k-u p ). P ojęcie m ak iety je s t m ało precy zy jn e i ch arak tery zu je w szelk ie p ro jek ty ekranów , począw szy od o d ręczn y ch szkiców , p o p rzez p r o je k ty szkie le to w e ekranu (ang. w irefram es), aż po gotow e interaktyw ne pro to ty p y e k ran ó w p o sia d ając e b o g a tą szatę g ra fic z n ą i u m o żli w iające testow anie ek ran u n a fa łszy w y c h danych. P ro jek ty szkieletow e n ie uw zg lęd n iają szaty graficznej, a ich celem je s t przedstaw ienie ogólnej funkcjonalności p o szcze g ólnych ekranów oraz sposobu p re ze n ta c ji dan y ch biznesow ych.
•fał 2. ♦ Planow anie, m odelow anie i projektow anie aplikacji JSF na platform ie j e „a
75
. P rzykład p rojektu szkieletow ego dla ek ran u rejestracji u ż y tk o w n ik a w sy stem ie ISR P ■został pokazany na ry su n k u 2.4. P ro je k t stan o w i ro z w in ię cie m o d elu ek ran u zam iesz czonego n a rysunku 2.2 zarów no w zakresie sp ecy fik acji k o n tro le k re aliz u jąc y ch ełe- . m enty fu nkcjonalne, ja k i ro z m ie sz c z e n ia e le m en tó w w izu aln y ch , m ają cy c h ułatw ić korzystanie ze strony.
K o m u n ik a c ja w alid a c ji w y ś w ie t la n e o b o k pól te k sto w y c h . W szystkie p o la w y m a g a n e
P rzycisk n ieak tyw n y, d o p ó k i p o le w y b o ru p o w y ż e j n ie z o sta n ie zaznaczone
Rysunek 2.4 . Projekt szkieletowy eb-anu rejestracji aplikacji ISRP
2.1.5. Diagram m aszyny stanow ej W tech n ice scen o p isó w g eneralnie z aleca się sto so w an ie p ro jek tó w szkieletowycHj które m o g ą być w ytw arzane zarów no odręcznie, z w ykorzystaniem narzędzi graficzny® (dość p o p u larn y je s t p a k ie t M S P o w erP o in t), j a k i za p o m o c ą specjaln y ch narzęda d o stę p n y ch w p a k ie tac h do m odelow ania, np. M ic ro so ft V isio T o o lk it fo r Wireframé! M o c k u p S c ree n s czy S creen A rch itect for S p a rx E n te rp rise A rchitect. W środow isB E clip se w arto rozw ażyć w ykorzystanie edytora stron W W W p a k ie tu W T P — utworzof n e w te n sposób p ro jek ty m o g ą być później sto so w an e p o d czas im plem entacji.
W technice scenopisów diagram m aszyny stanow ej służy do opisania zachow ania ekra nu w trak cie realizacji p rz y p ad k u użycia. D ia g ram m o d elu je stan z n ajd u jąceg o się po stronie serw era k o n tro le ra ek ran u oraz je g o zm iany n astęp u jąc e w w y n ik u interakcji u ży tk o w n ik a z ekranem . N a ry su n k u 2.5 z am ieszczo n y z o stał p rz y k ła d d iag ram u m a szyny stanow ej, ilu stru ją cy z m ia n y stanów k o n tro le ra ek ran u rejestracji (p rzed staw io nego n a rysunku 2.4).
-
Ja v a S e rv e r F a ce s i E clip s e G a lile o. T w o rze n ie a p lik a cji W\
f -
Rozdzint 2. ♦ P la n ow a n ie, m odelow anie i pro je k to w a n ie a p lik a cji J S F na platform ie Ja va
77
la g
’rzejścia w e w n ę trz n e nie m ają odrębnego o z n ac ze n ia graficzn eg o , lecz są specyfikow ane w ob szarze stanu, obok definicji n astęp u jąc y c h czynności: ♦ e n t r y — 1 czy n n o ści w ykonyw ane w m o m en cie, gdy o b iek t p rz y jm u je dany stan;
♦ do — c zy n n o ści w ykonyw ane niep rzerw an ie w czasie, gdy o b iek t p rzeb y w a w d an y m stanie; ♦ e x it — czy n n o ści w ykonyw ane w m om encie o p u sz c ze n ia stanu.
Przejścia w e w n ę trz n e lub zw rotne w y stę p u ją w sytu acjach , gdy k o m p o zy c ja ekranu zm ienia się tylko nieznacznie lub wcale. Stan końcow y (ang. fin a ł) w skazuje, że m aszyna stanów je st kom pletna, a obiekt kontrolera oraz w szystkie przechow yw ane w nim zm ien ne m o g ą zostać usunięte.
2=2. # i a r f c i z n e s o w a W rozdziale 1.2.4, „Im plem entacja M V C w JS F ” , p rz ed sta w io n o o g ó ln y sch em at im plem entacji w zorca M V C w aplikacjach opartych n a JSF oraz korzyści płynące z izolo w ania w a rstw y bizn eso w ej i p re ze n ta c ji. W ty m p u n k c ie z o sta n ą om ó w io n e dobre praktyki projektow e, rozw iązania i technologie zw iązane z tw orzeniem sam ej w arstw y biznesow ej.
R ysu n e k 2 .5 . Diagram maszyny stanowej dla ekranu rejestracji
S tan p o c z ą tk o w y re p re z e n tu je sta n k o n tro le ra p o u tw o rz e n iu je g o in stan c ji i o znaczony p rzez strzałk ę w y c h o d z ą c ą o d elem entu sta rt. K ażd e p rzejście (tran zy cjaf n a diagram ie definiuje relację m iędzy dw om a stanam i kontrolera, w sk azu jącą że kom ler zn ajd u jący się w p ierw szy m stanie w y k o n a p ew n e akcje i p rzejd zie do drugii stanu, ilekroć zajdzie o k reślo n e zd arzen ie i b ę d ą sp ełn io n e o kreślone w arunki. C przejścia składa się z trzech opcjonalnych elem entów : w yzw alacza (ang. trigger), doi (ang. g u a rd ) i a k ty w n o śc i (ang. a ctivity), któ re o p isy w a n e s ą w e d łu g następuje składni: wyzwał acz [d o z ó r] / a ktyw ność. W y z w a la c z e m je s t zazw yczaj pojedyn. z darzenie, któ re m o że sp o w o d o w a ć p rz e jśc ie i z m ia n ę stanu. D o z ó r ok re śla warunek: logiczny, ja k i m usi b y ć spełniony, aby p rzejście zo stało w ykonane; w a ru n ek ten o b lic z an y w m o m e n c ie p o ja w ie n ia się w y z w a la c za . A k ty w n o ść d e fin iu je operację] w y k o n y w a n ą w m o m e n c ie p rz e jśc ia ze sta n u do stanu; n a w e t je ż e li a k c ja przej: je s t z ło żo n a z w ie lu akcji elem en tarn y ch , je s t ona w y k o n y w an a niepodzielnie. P rz e jścia s ą oznaczane z a p o m o c ą strz ałek łąc zą c y ch d w a stan y k o n tro lera i m o g ą postrzegane ja k o z m ia n y n a ekranie, któ re n ie p o w o d u ją u a k ty w n ien ia re g u ł nawiga cji skutk u jący ch w y św ie tle n ie m innego ekranu. P o d o b n ie ja k w zw y k ły m diagra m aszy n y stanow ej, ró w n ie ż tutaj m o g ą w y stę p o w a ć szczególne p rzy p ad k i prze k tó iy c h w y k o n a n ie n ie p ro w a d zi do z m ia n y danego stanu, tj. p rzejścia w ew nęhzne lub zw rotne. W p rz y p ad k u p rz e jśc ia zw ro tn eg o s ą w y k o n y w an e czynności w ejściot o raz w yjściow e dan eg o stanu, w p rz y p ad k u p rz ejść w ew n ętrzn y ch są one pom iji
2.2.1. Rola i elem enty w a rstw y biznesowej P ojęcie w a rs tw y b izn e so w ej dość sugestyw nie ok re śla ro lę tej w a rstw y , w której m o delow ane s ą o b iek ty i reguły biznesow e. S tanow i ona zazw yczaj rd z e ń aplik acji i je s t najbardziej ro z le g łą je j w a r s tw ą z je d n e j stro n y św ia d c z ą c u słu g i d la w a rstw y p re zen tacji, z dru g iej stro n y k o rz y stając z z e w n ę trz n y c h ź ró d e ł d a n y ch , ta k ic h j a k b a zy danych, k o rp o rac y jn e system y in form acyjne (ang. E n te rp rise In fo rm a tio n S ystem s — E IS) c zy zew nętrzne system y inform atyczne. S eparow anie w arstw y biznesu od p rezen tacji u łatw ia im plem entację reguł b izn eso w y ch i u m o żliw ia u ż y cie o b iek tó w b iz n e so w y ch w d o w o ln y m środow isku u ru c h o m ien io w y m (stro n a 29 „K o rzy ści w yn ik ające z izo lo w an ia w a rstw w id o k u i logiki b izn e so w ej” ). Z e w z g lęd u n a ro zleg ło ść w a rstw y bizn eso w ej d o b rz e je s t p o d z ie lić j ą n a p o d w a rstw y , k tó re s ą o d sie b ie lo g ic z n ie o d dzielone i p o s ia d a ją ściśle zd efin io w an e z a k re sy o d p o w ie d z ia ln o śc i, tj. m o d el d z ie dzinow y, w arstw ę u słu g i interfejs do w a rstw y trw a ło ści d a n y ch (p atrz ry su n e k 2 .6 ), om ów ione w k o lejn y c h p unktach. N a jp o p u la rn ie jsz e p o d e jścia do tw o rzen ia w a rstw y bizn eso w ej w a p lik acjach W W W oparte są n a w ykorzystaniu: ♦ z arz ąd z an y c h p rz ez kon ten er k o m ponentów , ♦ z w y k ły ch o b iek tó w Javy (ang. P la in O ld J a v a O bjects — P O JO ).
Ja va S e rv e r F a ce s i E clip s e G a lile o. Tw orze nie a plika cji W
78 R ysu n e k 2.6.
Warstwowy model architektury wykorzystany w aplikacji ISRP
I
j
Model dziedzinowy (POJO)
P ro g ram o w an ie k o m p o n en to w e je s t natu raln y m rozszerzeniem p ro g ram o w an ia zoj rien to w an eg o o biektow o — n ie p o sia d a ono zupełnie now ych atrybutów w stosunki® do p ro g ram o w a n ia obiek to w eg o , a je d y n ie k o nsekw entnie i w pełni w ykorzystuje cea chy obiektow ości. K o m p o n e n ty oferuj ą herm ety czn ie opakow ane, w ysokopoziom ow lj funkcje realizu jące logikę bizn eso w ą. Z arząd zan iem k om ponentam i zajm uje się kona tener, k tó ry k o n tro lu je ró ż n e a sp ek ty ich życia, m .in. tw orzenie instancji, w prow adzał nie zależności p o m ię d z y nim i czy też z arz ąd z an ie c y k lem ich życia. K o n te n er poj zw ala n a o g ran iczen ie zad a ń sto ją c y c h p rz e d k o m p o n en ta m i do realizacji jedynkj funkcji b izn eso w y ch , d zięk i czem u s ą one łatw e do zrozum ienia, m a ją czytelne intę|§ fejsy i m ogą być rozproszone w sieci. Program ow anie kom ponentow e boryka się jed n a j z w ielom a problem am i im plem entacyjnym i, przede w szystkim z d u ż ą różnorodności! protokołów kom ponentow ych i języ k ó w interfejsów , problem am i ze w zajem nym porgj zum iew aniem się kom ponentów czy złożonością infrastruktur środow isk uruchormenioj w ych. Popularnym i technologiam i k o m p o n e n tó w s ą E n te rp rise Ja v a B e an s czy Spring*
o rf/ia ł 2. 4 P la n ow a n ie, m odelow anie i p ro je k to w a n ie a p lik a cji JS F na platform ie Jar
P oniew aż w aplikacjach korp o racy jn y ch Ja v a E E (J2E E ) w ym agane s ą dod atk o w e usługi, ta k ie ja k zarządzanie transakcjam i, u trzy m y w a n ie b e zp iec z eń stw a czy trw a ło ści : d a n y c h , (w alternatyw nym p o d e jściu u słu g i te z ap e w n ia ją k o n ten e ry E JB ), po..wstały' specjalne, lekkie szkielety program istyczne (ang. lightweight fram ew orks), u d o stępniające w ybrane usługi obiektom PO JO . Przykładam i lekkich szkieletów są Sprins, H ibernate czy iBatis. Pozytyw ne dośw iadczenia ze stosow ania lekkich szkieletów i k las P O JO sk ło n iły rów nież projek tan tó w tech n o lo g ii E JB do g runtow nej p rz e b u d o w y ich rozw iązania. P ocząw szy o d w ersji E JB 3.0, k o m p o n en ty E JB s ą w zasad zie klasam i PO JO , k tó re z aw ie rają adnotacje sp ecy fik u jące dod atk o w e w łaściw o ści o b iek tó w ty ch klas (p o z a kon ten erem E JB adnotacje nie s ą interp reto w an e, w iec m o ż n a stw ierdzić że E J B -3.0 to PO JO ). K om p o n en ty JavaB ean są to napisane w o dpow iedniej k onw encji k lasy P O JO , będ ące n iez ale żn y m i m o d u łam i w ie lo k ro tn e g o u ż y tk u w p ro g ra m a c h Javy. N a rz ę d z ia do tw orzenia oprogram ow ania są w stanie łączyć i w ykorzystyw ać kom p o n en ty JavaB eans oraz m an ip u lo w ać nim i dzięki p rz y ję ciu o d p o w ie d n ic h k onw encji w n a zy w a n iu m e tod, k o n stru k cji klasy i jej zachow ania, a m ianow icie: ♦ k lasa m usi posiadać publiczn y i b e zp a ram e tro w y konstruktor; ♦ herm etyzow ane w łaściw ości klasy m u sz ą być dostępne do odczytu i m odyfikacji za p o m o c ą sp ecjalnych m etod p u b lic z n y ch (tzw . g e tte rs & setters), k tó re m u sz ą m ieć odpow iednio skonstruow ane nazw y, z aw ierające p rzed ro stk i g e t- , s e t i opcjo n aln ie i s - dla typu boolean, np.: publ ic i n t getT em peratureC ), p u b lic v o id s e tT e m p e ra tu re d n t t ) , p u b lic boolean i s F i n i s h e d O — d la w ła śc iw o ści te m p e ra tu re i fin is h e d ; ♦ k lasa p o w in n a być serializow alna (im p lem en to w ać interfejs S e ria l iz a b le lub E xte rn a l iz a b le ); ♦ k lasa n ie pow in n a zaw ierać m etod o bsługi zdarzeń. Przy k ład o w y m i k o m ponentam i Jav aB ean s ą k o m p o n en ty w spierające.
D o im p lem en tacji w a rstw y biznesow ej w zaw artych w książce p rz y k ła d ac h wykorzy! styw ane je s t p o d e jście o p arte n a k lasac h PO JO . Z a le tą teg o p o d e jścia je s t b ra k zaleli n o ści od tech n o lo g ii E JB czy Java E E oraz m ożliw ość u ży cia i testo w an ia je j kodu b ez p o trze b y k o rz y stan ia ze śro d o w isk a u ru chom ieniow ego serw era.
K la s y P O JO i k o m p o n e n ty Ja v a B e a n T erm in P la in O ld J a v a O bjects ok re śla obiekty z w y k ły ch k las Javy, któ re nie | j ograniczone żad n y m i sp e c ja ln y m i restrykcjam i i nie m u sz ą im plem entow ać ż ad n y ć| sp ecjaln y ch z ac h o w a ń w o d ró ż n ie n iu od np. kom p o n en tó w E JB 2.x. K lasy P O JO n jj pow inny dziedziczyć p o w cześniej predefiniow anych klasach, im plem entow ać predeij niow anych interfejsów czy zaw ierać predefiniow anych adnotacji, jeśli te nie są związaijj z ich p o d sta w o w ą fu n k c jo n a ln o śc ią (choć naw et ty ch w y m a g ań n ie n ależy traktowąjzbyt rygo ry sty czn ie). P o ję cie P O JO zostało w p ro w ad zo n e p rzez M artin a Fowlerj] R eb eccę P arso n s i Jo sh a M c K e n zie g o w 2000 roku, k tó rzy p o p rz ez w prow adzenil atrakcyjnie b rzm iącej n a z w y dla z w y k ły ch obiektów Javy ch cieli w y ró żn ić ideę w j ko rz y stan ia p ro sty c h te c h n ik p ro jek to w y c h w pro g ram o w an iu obiektow ym .
2.2,1.!. M odel dziedzinow y N a p o d sta w ie an alizy p rzypadków u ż y cia m o że m y ziden ty fik o w ać p o d sta w o w e k lasy ko n cep tu aln e (pojęcia, rzeczy bądź o biekty) w y stę p u ją c e w p ro je k to w a n y m system ie. M o d el k o n c e p tu a ln y stan o w i p u n k t w y jśc io w y g e n ero w a n ia o b ie k to w e g o m o d e lu dziedzinow ego oraz m odelu relacyjnego (fizycznego). D iagram konceptualny n a rysunku 2.7 p rz ed sta w ia pod staw o w e p o jęc ia w y stę p u jąc e w system ie ISR P . D ok ład n e odw zorow anie obiektow e k o n c ep c ji b iz n e so w y ch w y stę p u jąc y ch w m o d e low anym śro d o w isk u zapew nia tzw . m o d el d ro b n o z ia rn isty (a n g .fin e - g r a in e d m odel), oparty n a w y k o rz y stan iu w ie lu p ro sty c h o b iek tó w P O JO , re p re z en tu jąc y ch isto tn e koncepcje biznesow e. M odele drobnoziarniste znakom icie spełniają sw oje funkcje, o ile nie w ystępuje potrzeba rozproszenia obiektów n a różnych serwerach. W m odelu drobno ziarnistym w y stęp u je m nóstw o w z ajem n y ch o d w o ła ń p o m ięd zy obiektam i, co stanow i p ro b le m w sy ste m a c h ro z p ro szo n y c h , gdyż z d a ln e w y w o ła n ia s ą do ść k o sz to w n e .
Ja va S e rv e r F a ce s i E c lip s e G a lile o . T w o rze n ie aplikac
80
t h is .c o u n t r y ld - c o u n try ld : ■■ t h is .t it le = t it ie : t h i s . f 1rs-tName - firstN a m e: th is.la stN a m e - lastName: th is ro rg a n iz a t io n - o rg a n iz a tio n : th is.d e p a rtm e n t - departm ent: t h i s .s t r e e t = s t r e e t : th is .z ip C o d e - zipCode: t h is .c it y = c it y : th is .e m a il = email : th is.p a ssw o rd - password; th is .p h o n e = phone: .th is .g e n d e r = gender: t h is .e n try D a te = e n tryD a te : t h i s . ro le - ro le : }
R ysunek 2 .7 . Diagram konceptualny systemu ISRP p u b lic In te g e r g e t ld O
W takich system ach p o d ejście k o m p o n en to w e m oże b y ć p rz y d atn ie jsz e, a kontenei Ja v a EE m o g ą d odatkow o zapew nić b e zp ieczeń stw o , tran sak c y jn o ść czy połączenj w system ach h e terogenicznych.
{re t u r n t h i s . i d ; }
p u b lic vo id s e t ld d n t e g e r Id ) { t h i s . i d = i d ; } / * ...P o zo sta łe g e tte ry i settery ... */
} M o d el d ziedzinow y aplik acji ISR P z aim p le m e n to w a n y je s t w p o sta ci klas POJ( P rzy k ład obiektu b izn eso w eg o dla ko n cep cji u ż y tk o w n ik a z o stał p rz ed sta w io n y na jj Stingu 2.1. Uwaga
L isting 2 .1 . Kod klasy User
_____________________________________
package is rp .h ib e rn a te .m o d e l.b u s in e s s o b je c t; import j a v a . u t i 1 .Date: p u b lic c la s s User Implements Java . io .S e r ia liz a b le p riv a te In te g e r id ; p riv a te in t c o u n try ld ; p riv a te S t rin g t i t l e : p riv a te S trin g firstN a m e; p riv a te S trin g lastName; p riv a te S t rin g o rg a n iz a tio n ; p riv a te S t rin g departm ent: p riv a te S t rin g s t r e e t ; p riv a te S t rin g zipCode; p riv a te S t rin g c i t y ; p riv a te S t rin g emai1: p riv a te S trin g password: p riv a te S t rin g phone: p riv a te boolean gender: p riv a te Date e n tryD a te ; p riv a te Byte r o le ; p u b lic U s e rO { //k o n s tr u k to r na p o tr z e b y seria liza c ji
p u b lic U s e r (in t c o u n try ld . S t rin g t i t l e . S t rin g firstN a m e , S t r in g iastName. S t rin g o rg a n iz a tio n , S t r in g departm ent, S t r in g s t r e e t . S t rin g zip C o d e. S t r in g c i t y . S t rin g em a il. S t r in g password. S t rin g phone, boolean gender. Date e n tryD a te , Byte r o le ) {
P o d e jś c ie p o le g a ją c e na w y p ro w a d ze n iu im p le m e n ta c ji logiki b iz n e s o w e j p o za m o del d z ie d z in o w y i o b ie k ty re p re z e n tu ją c e d a n e o k re ś la n e je s t w lite ra tu rz e m ianem a n e m iczn e g o m o d e lu dzied zinow eg o. W p ro w a d ził je M a rtin F o w le r, k tó ry tra k tu je ta k ie ro zw ią za n ie ja k o a n ty w zo rze c . N a jw a ż n ie js zy m za rzu te m , ja k i sta w ia Fo w ler ta k ie m u m o d e lo w i, j e s t n a ru s z e n ie z a s a d O O P w z a k re s ie e n k a p s u la c ji i h e rm e tyza cji k o du — p rz e tw a rza n ie m s ta n u o b ie k tó w d zie d z in o w y c h c z y t e ż ich w a lid a cją zajm ują się ze w n ętrzn e klasy. Inne isto tn e m ankam e nty to zm n ie jsze n ie czyteln ości kodu o ra z zw ię k sze n ie m o żliw o ści w ystę p o w a n ia duplikacji w ko dzie. M im o tych w ad (w yjaśn ion ych do kładnie w artykule pod adre se m h ttp ://w w w .m a rtin fo w le r.c o m /b lik i/ A nem icD o m ainM ode l.htm l) rozw iąza nie to je s t c zę s to i ch ę tn ie s to s o w a n e , zw ła szcza g d y o b ie k to w y m o d e l d z ie d z in o w y j e s t g e n e ro w a n y a u to m a ty c z n ie , za p o m o cą na rzę d zi O R M , na p o d s ta w ie is tn ie ją c e g o w c z e ś n ie j m o d e lu fiz y c z n e g o .
2.2.1.2. W a rstw a usługow a B ardzo w ażne n a etapie p ro jek to w a n ia je s t ro zró żn ien ie dw óch asp ek tó w funkcjonal ności sy stem u w y stę p u jąc y ch w w a rstw ie biznesow ej: m odelu d zied zin o w eg o i logiki bizn e so w e j. M odel dzied zin o w y re p re z en tu je k o n cep cje b izn e so w e i ich zachow anie, podczas gdy lo g ik a b izn e so w a re p re z en tu je p ro c e sy i p rz ep ły w y ste ro w an ia odp o w ia dające scen ariu szo m p rz y p ad k ó w uży cia. O d d zielen ie logiki bizn eso w ej od m o d e lu ' dziedzinow ego je s t m ożliw e p o p rz ez w p ro w ad z en ie w a rstw y u sługow ej (ang. service layer) odpow iedzialnej za: ♦ z d efin io w an ie up ro szczo n eg o in te rfejsu dla k lie n tó w m o d elu dziedzinow ego, ♦ im p le m e n ta c ję z ło ż o n y c h o b ie k tó w u słu g zd efin io w an y ch p rz ez w yżej w y m ien io n y interfejs. O biekty u słu g m o g ą zapew niać fasad y dla m o d elu d z iedzinow ego (stro n a 83 „W zo rzec fasad y ”) oraz im plem entow ać p ro c e sy b iznesow e.
82
Ja va S e rve r F a c e s 1 E c lip s e G a lile o. Tw orze nie aplikacji
N a p rz y k ła d n a d iag ra m ie p rz y p ad k ó w u ż y c ia sy s te m u ISR P w y stęp u je p r z y p a l Przypisz, re c en ze n ta do p ra c y , który re p re z en tu je zło ż o n y p ro ces .biznesow y. W tji m ach tęgo p ro cesu zachodzi n a stęp u jąca sek w e n cja czynności: red ak to r z uprarvnijf niam i adm inistratora w y b ie ra z listy re ce n ze n ta, do k tórego autom atycznie wysyłani je s t zaw iadom ienie (p o c z tą e le k tro n ic z n ą — S M T P ), i zap isy w an y je s t stan procesji w bazie danych. Z am iast w yw oływ ać w iele m eto d d la obiektów m odelu d z ie d zin o w e j w w arstw ie p rezentacji, m o że m y w yw ołać je d n ą m eto d ę v o id assignR eview er'.P ap^ p a p e r . i n t re v i e w e rld ), z d efin io w an ą w fa sad z ie PaperServi ce, której k o d został z f m ieszczony n a listingu 2.2. Z g o d n ie z d o b rą p ra k ty k ą pro g ram o w an ia obiektowego^ p o leg a jąc ą n a p rzed k ład a n iu interfejsów n a d im p lem en tacje, w szy stk ie m etody m agane dla realizacji procesów b iznesow ych zw iązanych z przetw arzaniem artykułów k o nferencyjnych s ą ok reślo n e w in terfejsie PaperServi ce.
Heihda5 2. ♦ P lanow anie, m odelow anie i pro je kto w an ie a plika cji JS F na platform ie Ja va
83
/* p o b ra n ie o biektów do stęp o w ych do tabel — p a tr z listin g 2.11 '*/
. .PaperOao pDao = D a o F a c to ry .g e tln s ta n c e () .getPaperDaoC}; UserOao uDao = D aoFactory. g e tln s ta n c e () . g e tU se rD a o (): pDao.SaveOrUpdate(paper.); Liser aythoc= (U ser) uDao. f i ndB ylcK paper. g e tA u th o rld C ) ) -.//pobranie obiektu autora User re v i ew er=(User) uDao. fin d B y Id ( re v i ew erld) -.//pobranie o b ie ktu recen zen ta / * w ysłanie p o tw ierd zen ia p o c z tą e lektro n iczn ą * /
Email Sender eSender = new Ems11 Sender(emei 1C o n fig u r a t i on) ; eSender, sendEMai1 (Emai1M essagesUti1 .ass1gnReviewerM essageToReviewer(reviewer, o a p e r ) ) ; } / * ... im p lem entacje.pozostałych m eto d interfejsu P a p erS ervice V
}
L is t in g 2 .2 . Kod źródłowy interfejsu PaperService package is rp .m o d e l.s e rv ic e : Import Java .trip 1 . L i s t ; import o r g . apache .my A c e s . custom. f i 1eupl o ad. IJpl oadedFi 1e : im port Is rp .h ib e rn a te .m o d e l. b u s in e s s o b je c t.P a p e r: import is rp .h ib e rn a te .m o d e l.b u s ln e s s o b je c t.U s e r; Im port is rp .h ib e rn a t e .m o d e l.u t il.e m a il.E m a ilC o n fig u ra t io n : p u b lic In te rfa c e P aperS ervice { boolean addPaperNewVersion(Paper paper,Usen a u th o r,U p lo a d e d F ile '-»-upl oadedFi l e , St rin g uploadPath.Em ail C o n fig u râ t ion ema 11 C o n fig u râ t io n ) ; vo id update(Paper p a p e r): v o id a ssig n R e vie w e r{P a p e r p a p e r ,in t r e v ie w e rld ,E m a ilC o n fig u ra tio n -^ e m a iiC o n fig u ra tio n ) ; boolean addPaper(Paper p a p e r,U se r author,UploadedF11e u p lo a d e d F lle .S tr lr ^ -u p lo a d P a th , Emai1C o n fig u ra tio n emai1C o n f ig u r a t io n ): Paper f in d B y ld iin t i d ) ; v o id d e le te iP a p e r p a p e r): v o id approvePaper(Paper p a p e r.E m a ilC o n fig u ra tio n e m a iIC o n fig u ra tio n ); v o id re je c tP a p e rlP a p e r p a p e r,E m a iIC o n fig u ra tio n e m a iiC o n fig u ra tio n ); List
g e tR e v ie w e rP a p e rs d n t re v ie w e rld . S t r in g sortColum n); List
g e tA u th o rP a p e rs tin t u s e rid . S t r in g sortC o lum n); L1st g e tA llP a p e rs (S trin g so rtC o lum n): List
g e tA llP a p e rs fS trin g sortC olum n, In te g e r u s e rid . In te g e r r o le ) :
Im plem entacja m etod interfejsu PaperService znajduje się w klasie PaperSerncelmpl* Po n iew aż ro z m iar całego k o d u k lasy je s t o b szern y , n a listin g u 2.3 zam ieszczony zo stał w yłącznie jeg o fragm ent, zaw ierający deklarację klasy oraz im plem entację m etodj odpowiedzialnej za p rz y p is a n ie re c e n z e n ta i w y sła n ie pow iadom ienia p ocztą elektro! niczną. L isting 2 .3 . Implementacja interfejsu PaperService p u b lic c la s s P aperServicelm pl implements P ap e rS e rvice { p u b lic P aperServicelm pl ( ) (}/ / b eza rg u m e n to w y k o n stru kto r p u b lic v o id assignReview erCPaper paper, in t re v ie w e rld , E m a ilC o n fig u ra tio n e m a iiC o n fig u ra tio n ) {
W zo rze c fa s a d y W zorzec fasady je s t jed n y m z pod staw o w y ch i je d n o c z e śn ie n ajp ro stszy c h struktural nych w zorców projektowych. Z apew nia on dostęp do złożonych system ów , prezentując uproszczony lub uporządkow any interfejs pro g ram isty czn y . W zo rzec fasady pozw ala: ♦ ukryć złożoność tw orzonego system u poprzez dostarczenie prostego interfejsu A P I, ♦ uprościć interfejs istniejącego system u p o p rzez stw o rz en ie nakładki, która dostarcza now y interfejs A PI. Obiekt fasady jest prostym obiektem pośredniczącym p om iędzy obiektem klasy klienta żądającym określonej funkcjonalności a klasam i do starczający m i e le m en tó w do u z y skania tej funkcjonalności.
___ 2 .2.I.3. Lokalizatory usług U sługi biznesow e p o w inny być łatw o dostępne dla w sze lk ie g o ty p u k lientów , n ieza leżnie od tego, czy s ą one k lie n tam i lo k aln y m i, czy też z d aln y m i. G d y w w arstw ie biznesow ej w ystępuje w iele fasad, k o rzystanie z usług b iz n e so w y c h m o że m y ułatw ić poprzez zastosow anie uproszczonej w ersji w zo rca lo k aliza to ra u słu g (częściow o opi sanego w rozdziale 1., w ram ce „W zorzec d elegata b iz n e so w eg o ”). O b ie k t lok alizato ra tw orzy je d e n p u n k t dostępow y do k o d u w a rstw y b izn e so w ej, je d n o c z e śn ie zm niej szając zależność klien ta od im plem entacji m ec h an iz m ó w w y szu k iw a n ia usług. Zazwyczaj lokalizator je s t im plem entow any ja k o p o jed y n c zy obiekt (singleton), chyba że stosow any je s t w śro d o w isk u rozproszonym . N a przykład w system ie ISR P istnieją zdefiniow ane odrębne fasady dla usług zw iązanych z przetw arzan iem artykułów , użytkow ników , recen zen tó w , fo rm u la rz y z p y tan ia m i oraz danych słow nikow ych. P rzedstaw iony n a listingu 2 .4 interfejs S e rv iceLocator zaw iera deklaracje m etod, któ re u d o stę p n ia ją obiekty im p le m e n tu ją ce interfejsy tych fasad. O perow anie n a interfejsach pozw ala na u n iezależnienie się od jednej konkretnej im plem entacji zestaw u fasad, dzięki czem u łatw o m o że m y d o sta rcz y ć im p le m e n tac je zoptym alizow ane p o d kątem w yd ajn o ści czy bezpieczeństw a.
g4
Ja va S e rve r F a c e s i E c lip s e G a lile o. T w o rze n ie a p lik a cji Vtf\
2 2.1-4 --Integracja
L isting 2 .4 . Kod źródłowy interfejsu lokalizatora usług package is rp .m o d e l.s e r v i c e .f a c t o r y : im port is rp .m o d e l.s e rv ic e .C o u n try S e rv ic e : im port 1srp .m o d e l. s e r v ic e . P a p e rS e rvice ; Im port is rp .m o d e l.s e rv ic e .Q u e s tio n S e rv ic e : im port is rp .m o d e l. s e r v ic e . R e vie w S e rvic e : im port Is rp ,m o d e l. s e rv ic e .U s e r S e rv ice ;
W y g o d n y m -sp o so b em integracji w a rstw y u słu g o w ej z w a rs tw ą prezen tacji aplikacji .. JSF j e s t w y k o rz y stan ie m ech an izm u k o m p o n en tó w z arząd zan y ch . N a p rz y k ła d obiekt lokalizatora usług m oże zostać zarejestrow any w aplikacji jak o k om ponent zarządzany o z asięgu aplikacji. B ędzie o n w ów czas au to m a ty c zn ie tw o rz o n y w m om encie p ie rw szego o d w o ła n ia się do niego, a następnie p rz ec h o w y w a n y w k o n tek ście ap likacji JS F aż do k o ń c a jej działania.
p u b lic in te rfa c e S e r v ic e lo c a to r { P aperServlce g e tP a p e rS e rv ic e l): U se rS e rvice g e tU s e rS e rv ic e O : Review Service g e tR e vie w S e rvice O : C o u n tryS e rvic e g e tC o u n tryS e rv ic e t ) ; Q u e stion S ervice g e tQ u e s tio n S e rv ic e C ),
I ---------------------------------------------------------------------------------N a listingu 2.5 przedstaw iono kod klasy lokalizatora Servi ceL o cato rlm pl , definiująi m e to d y d o stę p o w e z w rac a ją ce o b ie k ty fasad. A b y tak p ro sty lo k a liz a to r w ykony sw oje zadanie, należy w łaściw ie zainicjow ać i p rzechow ać jeg o instancję w kontene co je s t opisane w n a stęp n y m punkcie. L isting 2 .5 . K od źródłowy lokalizatora usług ServiceLocatorlmpl package is rp .m o d e l. s e r v ic e . f a c t o r y : Im port o r g . apache.commons. l o g g i n g ; im port is rp .m o d e l.s e rv ic e .* : im port 1srp .m o d e l. s e rv ic e .im p l p u b lic c la s s S e rvice L o ca to rlm p l implements S e rv lc e L o c a to rf p riv a te p riv a te p riv a te p riv a te p riv a te
P aperS ervice p a p e rS e rvice ; U s e rS e rv ice u s e rS e rv ic e ; R eview Service re v ie w S e rv ic e ; C o u n tryS e rvic e C o u n tryS e rvic e : Q u e stio n S e rvic e q u e s tio n S e rv ic e :
p riv a te Log lo g = L o g F a c t o r y .g e t lo g lt h is .g e t C la s s l) ) :
warstwy usługowej z warstwą prezentacji JSF
9 ]
D ek laraty w n y sposób rejestracji o b iek tu lo k aliza to ra w p lik u fa c e s-c o n fig .x m l został zaprezentow any n a listin g u 2.6. P o k a z an e n a p rzy k ła d zie ro z w iąz an ie u m o żliw ia d o stęp do obiek tu lo k a liz a to ra p o p rz ez w y k o rz y sta n ie je g o id e n ty fik a to ra — s e rv ic e w Locatorlm pl lub w łaściw ości kom ponentu użytkow ego u t i l Bean (opis kom ponentów zarządzanych znajduje się w rozdziale 3.). W o m aw ia n y m p rz y k ła d z ie lo k a liz a to re m je s t obiekt zaprezentow anej n a listin g u 2.5 k lasy S e rv ic e L o c a to rlm p l, ale dzięki sto sow aniu interfejsó w fasad m oże o n z o stać łatw o zam ien io n y n a inny o b iek t będ ący lokalizatorem , do czego w y starczy zm ia n a w a rto ści elem en tu «managed-b e an -c l ass>. M oże się to okazać przydatne, np. g d y b ę d z ie m y ch cieli zap ew n ić b u fo ro w an ie p rz e syłanych dan y ch c zy zdalny dostęp do usług. Listing 2.6. Integracja warstwy usługowej w pliku faces-config.xml «managed-bean> « d e s c r ip t io n » Komponent lo k a liz a t o r a « / d e s c r ip t io n » «managed-bean-nam e»senvic e lo c a t o r Impl«/managed-bean-name» «managed-bean-class>i s r p .model. se rv i c e . fa c t o r y . Servi ceLocatorlmpl«/managed-bean-class» «m anaged-bean-scope»appl ication< /m anaged-bean-scope» «/managed-bean> «managed-bean» «m an aged-bean -class»i s n p . v i ewbeans. U t i 1Bean«/managed-bean-c1a ss» «managed - bean-scope»applicat1on«/m anaged-bean-scope» «m anaged-pnoperty» «p ro p e rty-n a m e »s e rvic e lo c a to n «/ p ro p e rty -n a m e » « v a lu e »# {s e rv ic e lo c a to rIm p l}< / v a lu e » «/m anaged-property» < / — p o zo sta łe w ła ściw o ści —>
«/managed-bean» p u b lic S e rv ic e L o c a to rlm p l( ) { th is .p a p e rS e rv ic e = new P a p e rS e rvice lm p l(5 ; t h is .u s e rS e rv ic e = new U s e rS e rv ic e lm p l( ) : th is .r e v ie w S e rv ic e = new R e vie w S e rvice lm p l( ) ; th is .C o u n try S e rv ic e = new C o u n try S e rv lc e lm p l( ) : t h i s . q u e s tlo n S e rv ic e = new Q u e s tlo n S e rv lc e lm p l( ) : t h i s .1o g . in fo t " S e r v ic e lo c a to r bean is i n i t i a l i z e d " ) :
} p u b lic p u b lic p u b lic p u b lic p u b lic
P aperS ervice g e tP a p e rS e rv ic e O {r e t u r n p a p e rS e rv ic e ;} U se rS e rv ice g e tU s e rS e rv ic e O (re t u r n u s e r S e r v ic e ;} Review Service g e tR e v ie w S e rv ice O (re t u r n re v ie w S e rv ic e ;} C o u n tryS e rvic e g e tC o u n try S e rv ic e () (re t u r n C o u n tr y S e r v ic e ;} Q u e s tio n S e rvic e g e tQ u e s tio n S e rv ic e O (re t u r n q u e s tio n S e rv ic e ;
2,2.2. Interfejs do w a rstw y trw a ło ści danych C hoć w sp ó łc z e sn e ap lik a cje W W W m o g ą k o rz y sta ć z w ie lu m o ż liw o śc i w z ak re sie utrw alania danych, to w ciąż najp o p u larn iejszą z nich je s t stosow anie relacyjnych b az da nych. Interfejs do w arstw y trw ałości p o w in ien całk o w icie od d zielać szczeg ó ły tec h n o logii rela cy jn y c h o d w a rstw y biznesu, jed n o cześn ie zapew niając n a stęp u jące operacje: ♦ funkcje C R U D , tj. ang. Create, R etrieve, U pdate, D e lete (utw órz, odczytaj, m odyfikuj i u su ń o biekty w p a m ię ci trw ałej), ♦ tw o rzen ie i u ru c h am ia n ie z ap y tań do b a zy danych, ♦ zarządzanie połączen iam i, tran sak cjam i, b u fo ro w a n ie m i w ydajnością.
86
Ja va S e rv e r F a c s s i E clip s e G a lile o . T w o rze n ie a plika cji \i
2 . * P lanow anie, m odelow anie i p ro je k to w a n ie a p lik a cji JS F na platform ie Java < / — p a ra m e try stero w n ika i p o łą c ze n ia do b a zy d a nych —>
K orzystając z relacy jn y ch b az danych, n a le ży zap e w n ić o d w zo ro w an ia obiektów J na tabele, k o lu m n y i rekordy, po d o b n ie j a k m ap o w an ie w zaje m n y c h relacji pomię, obiektam i n a p o w ią za n ia tabel i rekordów . W ty m celu m o żn a zastosow ać: ♦ interfejs JD B C API, ♦ kom p o n en ty e ncji dostępne w tech n o lo g ii Ja v a P e rsiste n ce API, ♦ technologie od w zo ro w ań o b iek to w o -re la c y jn y c h (O R M ). W zasadzie dw a ostatnie ro zw iązan ia s ą dość p o d o b n e — JP A było w zorow ane szkieletach O R M H ibernate i T opLink. T echnologie O R M p o zw alają zarów no utrw; o biekty P O JO w b azie danych, ja k i gen ero w ać m o d el d z ie d zin o w y n a podsta schem atu b a zy dan y ch (tzw . reverse engineering). D z ięk i tem u sta n o w ią w ygo rozw iązanie, które m ożem y w y k o rzy stać n iez ale żn ie o d scenariusza, w edług jakiego w y tw arzan a je s t w a rstw a trw ałości, a m ian o w icie gdy: j ♦ istnieje k o d Javy i n ależy zap ew n ić p rz ec h o w y w a n ie o biektów Jav y w bazit danych,
87
2
♦ istnieje zapro jek to w an a (łub o d zied ziczo n a z in n eg o system u) b a za d a n y ch -j i należy napisać k o d aplikacji. M odel d z ie d zin o w y w Jav ie je s t dopasow yw any do schem atu b a zy danych,
. "«property nam e-DI b e rn a te ,c o n n e c tio n .driver_cla ss"> com .m ysq l . w jd b c .D r iv e r« / p r o p e r ty » «p ro p e rty nam e-"hib e rn a te . connect1o n . u ri" > id b c :m y s q l: - ■ - «► //loca-Jhost/isrp «p ro p e rty ' na m e-"h iberna te.con nection .useU nico de"> yes< /pro perty> «p ro p e rty name-"hi b e rn a te . c o n n e c tio n . c h a ra cte rtn co d i n g "»U T F -8 «/ p ro p e rty » «p ro p e rty nam e="h1bernate.connection,usernam e”> ro o t< /p ro p erty> «p ro p e rty name=”h1 b e rn a te .d ia l e c t" > o rg . hi b e r n a t e .d ia le c t . wMySQLDI à I ect< /pro perty> «p ro p e rty n a m e -"c u rre n t_ s e s s io n _ c o n te x t_ c la s s "»th re a d «/ p ro p e rty » < / — p o d g lą d g en ero w a n ych w yra żeń SO L na k o n so li —>
«p ro p e rty name=” h ib e rn a te . sho w _sq l"»tru e < /p ro p e rty> < / — p lik i m apow ań o b iekto w o -rela cyjn ych —>
«mapping re s o u rc e -" i s rp / h ibernate/m odel/busi n e sso b je c t/ Answer. hbm. xml" /» «mappi ng re s o u rc e -" i srp/h iberna te/m odel/ b u sin e sso b je ct/ U s e r. hbm.xm l” /> «mappi ng re s o u rc e -" i srp/hibernate/m odel/busi n e s s o b je c t/ C o u n try. hbm.xml" /» «mapping re s o u rc e -" isrp /h ib e rn a te /m o d e l/busin e sso b je ct/P a p e r.h b m .xml" /» «mapping re s o u rc e -" is rp /h ib e rn a te /m o d e l/b u sin e ss o b je c t/Questi o n .hbm.xml" /> «mappi ng re s o u rc e -" i s rp /h i bernate/m odel/busi n e sso b je c t/ R e v iew. hbm. xm l" /» «mappi ng re s o u rc e -" i srp/h iberna te/m o del/busine ssobject/ w A n sw e rsq u e stio n s. hbm. xml " /> « / s e s s io n -fa c t o ry »
♦ istnieje zarów no b a za danych, ja k i część k o d u Javy, które n ależy pow iązać. W dalszych p u n k tac h p rzy b liżo n e z o sta n ą n a jw aż n ie jsz e inform acje d o tyczące wyko-" rz y stan ia b ib lio tek i H ib e rn ate w celu zap ew n ien ia d o stę p u do danych.
2 .2 .2 .i , in terfejs w a rs tw y danych oparty na H ibernate H ib ern ate je s t d a rm ow ym szk ieletem p ro g ra m isty c z n y m , słu ż ąc y m do realizacjii w ar' stw y d ostępu do dan y ch i zap ew n iający m tran slację d a n y ch p o m ięd zy re la cy jn a bazą d a n y ch a św ia tem o b iek to w y m . U ż y cie H ib e rn a te p o w o d u je , że z p u n k tu widzenia’ pro g ram isty b a za danych zaw iera zw y k łe o b iek ty Javy (P O JO ). Plibem ate zapewnia p o łąc ze n ia z b a z ą d anych i o bsługę p o d sta w o w y c h o p eracji n a n ich z uwzględm em emprzen o śn o ści m iędzy ró żn y m i dialektam i SQ L. Z asad a działania H ibernate o p iera się n a z asto so w an iu p lik ó w k o n fig u rac y jn y c h def? n io w a n y ch w ję z y k u X M L oraz u ży ciu m ech an izm u re fle k sji do p o b iera n ia obiektów i w łaściw ości klas. P lik k o n fig u racy jn y o n a zw ie h ib ern a te .c fg .x m l z aw ie ra globalne u sta w ien ia p aram etró w szk ieletu oraz p o łąc ze n ia do b a z y danych. P rz y k ład p lik u kon: figuracyjnego dla aplikacji IS R P zo stał p rz ed sta w io n y n a listin g u 2.7. Z n aczenie po: szczególnych elem en tó w opisane je s t w k o m en ta rz a ch do kodu. Listing 2 .7 . Plik konfiguracji Hibernate «¡DOCTYPE h ib e rn a te -c o n flg u ra tio n PUBLIC "-/ / H ib e rn a te / H ib e rn a te C o n fig u ra tio n DTD 3.0//EN" "h t t p : //hi b e rn a te .s o u rc e fo rg e .n e t/ h ib e rn a te -c o n fig u r a t io n - 3 . 0 .d td "> « h ib e rn a t e -c o n flg u r a t io n » « s e s s io n -f a c t o r y »
Pliki m apow ań H ibernate o d p o w ia d ają za tran slację dan y ch z n ajd u jąc y ch się w tabeli na obiekty Javy i odwrotnie. O znaczane są przyrostkiem .hbm .xm l, gdzie pierw szy ele m ent przyrostka jest skrótem od w yrażenia „H iB em ate M apping” . Poniżej zam ieszczono fragm ent p lik u m ap o w an ia U ser.hbm .xm l. D iag ram pełnego m ap o w an ia p rzy k ład o wej klasy User do tabeli user, w y g e n ero w an y p rz y u życiu n a rzę d zia H ib em ateT o o ls, zaprezentow ano n a ry su n k u 2 . 8 . < / - - G en era ted 2009-10-11 2 1 :2 8 :5 1 b y H ib ern a te Tools 3.2.5.B e ta —>
«hibernate-m appi ng» «c la s s na m e="isrp.hibernate.m odel.buslnessobject.U ser” ta b le -" u s e r" c a ta lo g = "isrp "> < id name="id" t y p e -" ja v a . la n g .In t e g e r " » «column name="id" / » «g e n e ra to r c la s s -'d d e n t it y " /»
«p ro p e rty n a m e-"co untryId" t y p e = " in t " » «column n a m e-"co untryId" n o t -n u ll= " t r u e " /» «/ p ro p e rty » «/ c la s s » «/h ibe rnate-m apping »
Instalacja H ibernate sprow adza się do pobrania i rozpakow ania pakietów instalacyjnych, dostępnych n a stronie h ttp ://so n rc e fo rg e.n et/p ro jec ts/h ib e rn a te/file s/h ib e rn a te 3 /. Po rozpakow aniu p lik i b ib lio tek p o w in n y zostać u m ieszczo n e w śc ież ce p rz esz u k iw a n ia klas projektu. N ajw ażniejsze klasy H ibernate znajdują się w p lik u hibem ate3.jar, a klasy p o m o cn ic ze w p lik a c h b ib lio te k : c o m m o n s -c o lle c tio n s .ja r , c o m m o n s-lo g g in g .j a r , dom 4j ja r , hsqldb.jar,jta.jar, c3p0.jar, ehcache.jar, cglib.jar i antlr.jcir.
Ja va S e rv e r F a c e s i
88
- n -a te .iT ła p p ln g .R o o tC Ł a ssC L s rp .h ib e -m a ie .in o d e ł.b u sn e sso b je c t.U se r
..o r g .h tb e m a íe .m a p p i» :id {If'lTEGER PK]
ig J n te g e i ł ; ja v a .ia n g J n te g e r
countrylá'PM T E G E R ]
n! r ^PL^-i
J a n ą .S c n n g
i]
i g S S t B * * S I B S St
:Q0)].
trin g la s tN a m e : ja v a , fan g .S trin g
5, i
o r g a n iz a t io n : ja v a .la n a .S tr in g
?3 • r a n c a u - n
t 0
lQ Li_
d e p a r t m e n t : j a v a .la n a .S trin g
■> O3 . d e p a r tm e n t [Vm RCHaRuIKJ; idurSaole]-..
s t r e e t : ja v a .ta n g -S trin g
h
f e street{¥AR CH A R(iO O}]................. V
z ip C o d e : ja v a .ia n g .S f n n g
X ztp C ,
c ity : js v a .ia n g -S ir in g
X ^-it> [Sr-F-B-R ■’uO'fj -j & .e m ail [VARCHAR(IOO)!
p a s s w o r d : ja v a .ia n g .S tn n g
~
L is ti n g 2 -8 -
•.
’ 'v'
p a s s w o rd CVÁR¿HÁR(32)]; '■ " i>*-. i.moniv. 1 ■v.r;ir\i...:,-ii-i!'.isu ¡ 1
g e n d e r : Ja v a , te n g . B o o lea n
” ;f e g e n d e r [BÍT]
e n try O a te : ja v a . u til. D ate
- f t s n try D e ts[D A T E N u lfa b ie j ......... ' / 7 ?
rcle: ja v s .la n g .S y te
■
f e 'r o ie p I N Y I B T N u lla b le ]' ' '
'
" '-A .
R ysunek 2 .8 , Przykładowy diagram mapowania wygenerowany w HibernateTooIs
H ib e rn a te T o o ls W sparcie k o rz y stan ia z bib lio tek i H ib e rn ate w śro d o w isk u E clipse zapew nia wtyczki p rogram istyczna H ibernate T ools, u d o stęp n ian a za darm o przez R ed H at Inc Hibernal T o o ls d o starcza zestaw w id o k ó w i k re ato ró w z aw ie rają cy m .in.: ♦ k re ato r d la realizacji p ro c esu in ży n ie rii w steczn ej (ang. reverse engineering) um ożliw iający w ygenerow anie m odelu obiektow ego n a podstaw ie tabel i kolumn T istniejącej b a z y danych,
Interfejs definiujący podstawowe operacje dla DAO
package is rp .h ib e rn a te .m o d e l.d a o ; import ja v a .u t i l . L i s t : p u b lic In te rfa c e G e n e n cD a o In te rfa ce { p u b lic a b s tra c t O b je ct fin d B y ld O n t I d ) \//w y szu k iw a n ie p o id p u b lic a b s tra c t v o id sa v e (0 b je ct o b je c t) './/za p isyw a n ie n o w eg o o b ie ktu p u b lic a b s tra c t v o id saveO rUpdate(O bject o b je c t) './/za p isyw a n ie lub m o d yfiko w a n ie //o b iektu , j e ś l i istn ieje
p u b lic a b s tra c t vo id d e le te lO b je c t o b je c t )■,//u su w a n ie o b iektu p u b lic a b s tra c t L i s t f m d A lK ) : //w yszu k iw a n ie w szy stkic h obieletów
} Listing 2.9. Implementacje podstawowych operacji dostępnych w DAO package is rp .h ib e rn a te .m o d e l.d a o : import i s r p .h ib e rn a te .m odel. u t i l . H ib e rn a te U ti1 ; Import ja v a . u t i 1. L i s t : Import o rg . h ib e rn a te . S e s s io n fa c to ry : import o rg .h ib e rn a te .S e s s io n : import o rg .h ib e rn a t e .C r i t e r i a :
♦ k re ato r k o n fig u rac ji hibern a te.cfg .xm l, ♦ w p e łn i fu n k cjo n aln y ed y to r d la ję z y k a H ib ern ate H Q L , ♦ okno k o m en d ję z y k a SQ L,
89
. poniew aż pew ne operacje (zapis, odczyt czy w yszukiw anie) po w tarzają się w e w szystkich ■ D A O , celem u m k n ięcia p o w ie la n ia kod.u m o że m y z d efin io w ać w sp ó ln y in terfejs oraz klasę abstrakcyjną z aw ierającą definicję p ow tarzających się d la ró ż n y ch ty p ó w operacji. :G eneryczny jn te rfe js zo stał z ap re ze n to w an y n a listin g u 2.8 , a im p le m e n tu ją c a jeg o m etody M asa a b stra k c y jn a G ensri cDao n a lis tin g u 2.9.
l
e rrta ih ja v a .la n g -S tfin g p h o n e : ja v a .ia n g .S tn n g
» P lanow anie, m odelow anie i-projekto w a n ie aplikacji JS F na platform ie ja v a
2.
p u b lic a b s tra c t c la s s GenerlcOao Implements G e n e rlc D a o In te rfa c e { pro te cte d C lass p e rs ls te d C la s s : pro te cte d Session sessio n : p u b lic G enericD ao(Class p e rs is te d C la s s ) {
♦ p o d p o w ia d an ie składni SQ L,
/ * p o b r a n ie se sji H ib ern a te z o b iektu kla sy użytkow ej, za p re ze n to w a n e j n a listin g u 2 .1 4 * /
S e ssio n Fa cto ry fa c t o ry = H ib e rn a te U ti!.g e tS e s s io n F a c to ry C ): t h i s . sessio n = f a c t o r y .g e tC u rre n tS e s s io n O : t h is .p e r s is t e d C la s s - D e rs is te d C la s s :
♦ w p ełni fu n k cjo n aln y e d y to r p lik ó w o d w z o ro w a ń .hhm .xm l. W tyczkę H ib ern ate T o o ls m ożem y zain stalow ać w edług opisu w ram ce „W tyczki pigj gram istyczne w E c lip se ” . W ó w czas w p o lu W ork w ith m enedżera instalacji wpisuj! m y n astęp u jąc y adres:
} p u b lic O b je ct f in d B y ld iin t id ! { O bje ct o b je c t = (O b je c t) s e s s io n .g e t ip e r s ls t e d C la s s . i d ) : re tu rn o b je c t:
}
h ttp ://d o w n lo a d .jb o ss.o rg /jb o ssto o ls/u p d a te s/sta b le .
p u b lic v o id s a v e (O b je c t o b je c t) { s e s s io n .s a v e (o b je c t ):
} p u b lic v o id saveO rUpdate(O bject o b je c t) { s e s s io n .s a v e O rU o d a te (o b je c t);
2 .2 .2 .2 . O b ie k ty d o stę p y do danych DAO
} O b iek ty im p lem en tu jące interfejs do w a rstw y trw ałości s ą zazw yczaj określane o b iek ty d o stę p u do dan y ch (ang. D a ta A cc e ss O bjects — D A O ). D o b rą p rak ty k ą p jj je k to w ą w y n ik a ją c ą ze sto so w an ia teg o w z o rc a je s t tw orzenie pojed y n czeg o obieg D A O dla każdej utrw alanej klasy. G en eraln ie do n a jw ażn iejszy ch zadań D A O nalej tw orzenie (pobieranie) sesji H ib ern ate oraz z ap isy w an ie (pobieranie) obiektów .
p u b lic v o id d e le te (O b je c t o b je c t) { s e s s io n .d e le t e (o b je c t );
} p u b lic L i s t f in d A l1 () { C r it e r ia c r i t e r i a - s e s s io n . c r e a t e C r it e r ia t p e r s is t e d C la s s ) ; re tu rn c r i t e r i a .1 i s t ( ):
} }
Z astosow anie klasy abstrakcyjnej G e n e ric D a o p o z w ala n a znaczne uproszczenie p lem entacji konkretnych o biektów D A O . N a listingu 2.10 znajduje się k o d iró d lo N k lasy U se rD a o , w k tórym z aim p lem en to w an e zo stały w y łącznie operacje specyf1C2^ d la u trw alania obiektów U se r.r
Listing 2 ,1 0 ..Kodźródłowy klasy UserDao package I s r p . h ib e rn a te .model.dao; import ja v a . u t i l . L is t ; im port o r g .h ib e rn a te .Q u e ry; Im port o r g . h ib e rn a te . c r i t e n o n . O rd e r; im port o r g .h ib e rn a te .c r i t e r i o n .R e s t r ic tio n s ; im port i s rp .h ib e rn a t e .m odel. bus i n e s s o b je c t. U s e r; Im port i s r p . h ib e rn a te .model. u t i 1 .MdSHashCode; p u b lic c la s s UserOao extends GenericDao { p u b lic UserDaoO { superC U ser.c l a s s ) ;// } p u b lic S t rin g getAdm inis t ra to rE m a il( ) { User user - n u l l ; Query query = s e s s io n . createQueryt"FROM User where r o le -? " ) .s e tB y te iO , new B y t e (" 1 " ) ) ; user = (U s e r) q u e ry .u n iq u e R e s u ltf) ; re tu rn u ser.getE m a i1 () ; } p u b lic L is t getR eview e rs( ) { re tu rn s e s s io n .c r e a t e C r it e r la (p e r s is t e d C la s s ) ,a d d (R e s t r ic t io n s .e q (" r o le " . new B y t e ( " 3 " ) ) ) .lis t O ; i p u b lic User a u th e n tic a te (S trin g em ail. S t rin g password) { password - Md5HashCode.getMd5HashCode(password); re tu rn (U se r) s e s s io n .c r e a t e C r it e r ia (p e r s is t e d C la s s ) .a d d (R e s tric tio n s .eqC'emai 1", e m a il) ) . a d a (R e s tric tio n s .e q ("p a s s w o rd ". passw ord)) . u n ia u e R e s u lt() ; } p u b lic User c h e c k IfE m a ilE x is tIn D 8 (S trin g em ail) { Query query = session.crea teQ ueryt"FR O M User where e m a il-? ") .s e tS t r in g (0 , e m a il); re tu rn (U s e r) q u e ry.u n iq u e R e s u ltC ) ; } p u b lic L ist< U ser> g e tU s e rs (S tr1 n g so rtC o lum n){ i f (sortColum n— n u l l ) { sortColum n="fi rstNam e"; } re tu rn (L is t< U s e r> ) s e s s io n .c r e a t e C r it e r ia (p e r s is t e d C la s s ) . a d a 0 rd e r(0 rd e r. a s c (s o rtC o lu m n )) . 1i s t ( ) ; }
f
A u to m a ty c z n e g e n e ro w a n ie D A O w H ib e rn a te T o o ls H ibem ate -um ożliwia autom atyczne g en ero w an ie o b iek tó w D A O z w y k o rzy stan iem - - narzędzia A nt (opis znajduje się w dokum entacji H ibem ate) bądź w ym ienionej ju ż w tym rozdziale w tyczki H ibem ate T ools. K o rz y stają c z w ty c zk i H ib e m a te T ools, w śro d o wisku Eclipse w grupie m enu R un pojaw i się now a opcja — H ib em a te C ode G énération C onfigurations, będ ąca k o n fig u rac ją u ru c h o m ie n io w ą a u to m a ty c zn e g o g e n ero w a n ia kodu p rzy u życiu H ibem ate. W y b ó r tej o pcji p o w o d u je w yśw ietlen ie o k n a k reato ra Create, m anage a n d ran configurations, k tó re w z ak ład ce E xporters p o z w a la u sta w ić opcję autom atycznego generow ania k o d u źró d ło w eg o klas D A O (opcja D A O code). Autom atycznie generow ane w ten sposób klasy b ę d ą jed n a k opierać się n a w ykorzystaniu interfejsu JN D I i obiektów k lasy ja v a x .n a m ln g . I n it ia lC o n t e x t . N ie je s t to p ro b le m em w p rzypadku serw erów aplikacji, ale p rz y k o rz y stan iu z p ro sty c h k o n ten eró w serw letów , takich ja k T om cat, stanow i to utru d n ien ie, gdyż n ależy sam odzielnie z a pewnić kontekst początkow y. T om cat w praw dzie dostarcza w łasny obiekt kontekstow y JNDI, ale n ie m o żn a go m odyfikow ać z p o z io m u k o d u aplik acji (jest ty lk o do o d c z y tu), co pow oduje, że nie m oże o n b y ć w y k o rz y stan y p rzez H ib em ate. R o z w iąz an ie m tego problem u je s t u życie bib lio tek i Sun FS C ontext, dostępnej w p lik u fsc o n te x t.ja r, która u m ożliw ia p rzechow anie k o n tek stu aplik acji w p o sta ci plików .
— 2.2.2.S. Fabrykow anie ob ie k tó w DAO A nalogicznie do p ro b lem u lokalizacji fa sad w w arstw ie u sługow ej w p rz y p ad k u u ż y cia D A O ró w n ież isto tn y m p ro b lem em je s t z ap e w n ie n ie łatw ej lo k a liz a c ji o b iek tó w poprzez centralizację dostępu. W p rz y p a d k u in te rfe jsu do w a rstw y trw ało ści c en trali zacja m a za z ad an ie u łatw ie n ie tw o rz e n ia o b ie k tó w D A O o ra z z am ian y ic h im p le m entacji. D o starczen ie interfejsu do tw o rz en ia ró ż n y ch ob iek tó w im p lem en tu jący ch w spólny interfejs b ez specy fik o w an ia ich k o n k re tn y c h klas zapew nia w zo rze c p ro jektow y fabryki abstrakcyjnej (ang. abstract factory). U m ożliw ia on jed n e m u obiektow i tw orzenie ró ż n y ch , p o w ią z a n y c h ze so b ą re p re z e n ta c ji p o d o b iek tó w , o k re ślając ich typy p odczas działania program u. P rzykładow a fabryka ab strak cy jn a dla o b iek tó w D A O u ż y ta w aplik acji IS R P z ap re zentow ana została n a listin g u 2.11, a jej im p le m e n tac ja n a listin g u 2.12. P rzy k ład y w ykorzystania fabryki obiektów do tw o rz en ia D A O w w arstw ie u sługow ej z ap rezen tow ano n a listingu 2.13. listing 2.UL. Fabryka abstrakcyjna obiektów DAO package is rp .h ib e rn a te .m o d e l.d a o .fa c to ry ; im port i s r p .hi b e rn a te .m odel. dao.* ; p u b lic a b s tra c t c la s s DaoFactory { p r iv a t e s t a t ic D aoFactory in sta n ce - new H ib e rn a te D a o F a cto ry();
} p u b lic s t a t ic DaoFactory g e tln s t a n c e () { re tu rn In sta n ce ; }
JavaS erver F a c e s ! E clipse G alileo. T w orzenie aplikacji
p u b lic p u b lic p u b lic p u b lic p u b lic p u b lic
a b s tra c t a b s tra c t a b s tra c t a b s tra c t a b s tra c t a b s tra c t
ft0ZQ7l3; 2. ♦ 'Planow anie, m odelow anie i projek to w an ie aplikacji JSF na platform ie Java
UserDao ge tU se rD a o O ; Country'Dao ge tC o u n tryD a o O ; PaperDao getP aperD ao() ; QuestionDao getQ uestionD aoO ; ■ R e viewDao getReviewDaoO ; AnswersquestionsDao getA nsw ersquestionsD aoO
'
93
)•' ' p u b lic v o id d e s t r o y !) { } p u b lic v o id i n i t ( F i l t e r C o n f i g f i l t e r C o n f i g ) throw s S e rv le tE x c e p tio n { fa c to ry = H ib e rn a te U til ,g e tS e s s io n F a c to ry () ; i f ( f i l t e r C o n f i g = - n u ll) { lo g . e rro r("H ib e rn a te S e s s lo n F I 1t e r ; Nie za in icjo w a n o f i l t r u " ) ; throw new S e rv le tE x c e p tio n O ;
L isting 2 .1 3 . Implementacja fabryki obiektów DAO
}
package is r p .h ib e rn a te .m o d e l.d a o ,fa c to ry : im port i s r p , h ib e rn a te .m o d e l.d a o .* :
}
p u b lic c la s s H ib e rn a te D a o fa cto ry extends D aoFactory (
2 ,2 .2 .4. Zarządzanie sesją H ibernate w w a rstw ie w idoku
p u b lic UserDao getU serD aoO (re tu r n new U s e rD a o O ;} p u b lic CountryDao getC ountryD aoO { re t u r n new C oun tryO aoO ;} p u b lic PaperDao getP a perD aoi) (re tu r n new P a p erD a o O ;} p u b lic QuestionDao getQ uestionD aoO (re t u r n new Q uestion D ao () ;} p u b lic R e viewDao getReviewDaoO (re t u r n new R e viewDao() ; } p u b lic AnswersquestionsDao getA nsw ersquestionsD aoO (r e t u r n new »A n s w e rs q u e s tio n s D a o ( ) ; }
W celu zapew nienia zarządzania p o łą c z e n ie m z b a z ą dan y ch (tzw . se sją H ib e m a te)
}
L isting 2 .1 3 . K od filtru umożliwiającego automatyczne zarządzanie sesją Hibemate_______________ package i s r p . f i l t e r s : im port I s r p .u t i l .H i b e r n a t e U t i l : Im port ja v a . i o . IQ E x c e p tlon: im port ja v a x .s e r v le t .* ; im port o r g . apache. commons,1o g g ln g .*: Im port o r g .h ib e rn a te .* ; p u b lic c la s s H ib e rn a te S e s s io n F flte r Implements F i l t e r { p r iv a t e S e s s io n F a cto ry fa c to ry = n u ll ; p r iv a t e s t a t i c f in a l Log lo g = L o g F a c to ry .g e tL o g (H ib e rn a te S e s s io n F ilte r._ p u b lic v o id d o F ilte rC S e rv le tR e q u e s t re q u e st. ServletR esponse response. F ilt e r C h a in c h a in ) throw s IO E xc e p tio n . S e rv le tE x c e p tio n { Session se ssio n = fa c to ry .g e tC u rre n tS e s s Io n O ; try { s e s s io n .b e g in lra n s a c t io n () ; l o g .d e b u g O « HIBERNATE START"): c h a in .d o F llte rC re q u e s t, resp o n se ); lo g .d e b u g O » HIBERNATE END"): s e s s io n .g e tT ra n s a c tio n O .commit0 ; } c a tch (Throw able e) { try { i f (s e s s io n .g e t T r a n s a c t io n O .is A c t iv e O ) { s e s s io n .g e tT ra n s a c tio n O . r o llb a c k ( ); } } catch (H ib e rn a te E xc e p tio n e l ) { l o g . e rro rO N ie m o ż liw e wykonanie o p e ra c ji r o llb a c k ” , e l ) ; e l,p r in t S t a c k T r a c e () ; } throw new S e r v le t E x c e p t io n (e );
■■■;
s
m ożem y w ykorzystać w zorzec O pen S e ssio n in V iew (O SIV ), k tó reg o idea o p iera się na założeniu, że zaw sze do w ygenerow ania o dpow iedzi H T T P niezbędne s ą m form acj e przechow yw ane w b azie danych. S e sja H ib e rn ate o tw ieran a je s t po p o ja w ie n iu się ż ą dania H TTP i je st dostępna przez cały proces generow ania strony w idoku. W prow adzone zm iany do b a z y z atw ierd z a n e s ą d o p ie ro p o re a liz a c ji c ałeg o ż ąd a n ia , tj. w y g e n e ro w aniu dokum entu odpowiedzi H TTP. N ie je st to jed y n a m ożliw a do zastosow ania tutaj strategia; w arto w spom nieć o ro z w iąz an ia ch polegaj ących n a w p ro w ad z an iu z m ia n do b a zy danych w trybie a u tom atycznego z atw ierd z a n ia transakcji (a u to co m m it) c z y też in icjow aniu sesji i po b ieran iu d a n y ch n iez b ęd n y c h do g en ero w an ia w a rstw y w id o k u jeszc ze p rzed przekazaniem ste ro w an ia do niej. S trategie z arząd zan ia se sją H ib e m a te opisane są w yczerpująco w k sią żk a ch P O J O s in A ction. D e v e lo p in g E n te rp rise A p p li cations with Lightw eight F ram ew orks 2 oraz Java Persistence with H ib ern a te’. W zorzec O SIV pozw ala na realizację w ielu operacji w trakcie jednej sesji z H ibem ate. N a listingu 2.13 przed staw io n o u ży ty w a p lik acji IS R P filtr im p lem en tu jący w zo rze c OSKV. F iltr p rzechw ytuje w szystkie żądania p ły n ąc e do aplik acji i d la każd eg o z nich ro z p o cz y n a n o w ą transakcję, w której re aliz o w a n e s ą w szy stk ie o p eracje n a b a zie danych, re ali zow ane w trakcie przetw arzania żądania H T T P . T ra n s a k c ja je s t z a tw ie rd z a n a d o p iero po zakończeniu przetw arzania żądania. Filtr zaw iera obsługę w szelkich w yjątków i b łę dów , które m o g ą w ystąpić p o d czas p rz etw a rza n ia żądania. Jeśli istnieje a k ty w n a sesja H ibem ate, to po w y stąp ien iu b łęd ó w lub w y ją tk ó w zm iany w b azie dan y ch s ą w y c o fyw ane {rollback). W k o d zie do p o b ra n ia b ieżącej sesji H ib e m a te u ż y to k la sy p o m ocniczej H ib e r n a te U til, zap rezen to w an ej n a listin g u 2.14. In tera k cje w y stęp u jące pom iędzy elem entam i im plem entacji w zorca O S IV przedstaw ione zostały n a rysunku 2.9. R ejestracja filtru w p lik u w eb .xm l w n a jp ro stsz y m schem acie b ę d zie m ieć n a stęp u jąc ą postać:
:
Chns Richardson, POJOs in Action. Developing Enterprise Applications with Lightweight Frameworks, Manning 2006. Christian Bauer, Gavin King, Java Persistence with Hibernate, Manning 2006.
34
Ja va S e rve r F a ce s i E c lip s e G a lile o. Tw orze nie aplikacji <¡>¡y
i t i f 2 ' ć k n o w a n ie , m odelow anie i pro je k to w a n ie a p lik a cji J S F na p latfo rm ie Ja va
95
■ ^ 5
< f i 1ter> < fi Ite r-n a m e > H 'b e rn a te S e ssio n F i1te r< / fiIte r-n a m e > < fi 1t e r -c l a s s > i s r p , f i I t e r s . Hi bernateSessi o n F i1t e r< / fi it e r -c la s s > < / f ilt s r > < filte r-m a p p in g > < filte r-n a m e > H ib e rn a te S e s s io n F ilte r< / fi iter-nam e> < u ri-p a tte rn > / * < / u rl-p a tte rn > < / fiite r-m a p p in g >
Ja k łatw o zauw ażyć, w p o w y ż sz y m k o d zie w y k o n a n o m apow anie filtru na w szystką zaso b y U R L , co je s t ro zw iązan iem w ysoce n iew y d ajn y m — sesja H ibernate je st two rz o n a zaw sze, ró w n ie ż d la ty ch żądań H T T P , k tó ry ch p rzetw arzanie nie w ym aga pod łączen ia do b a z y danych. U ż y tk o w n ik w ty m m ie jsc u w zależności od potrzeb m o |£ zm ien ić m ap o w a n ie na w y b ra n e ż ąd a n ia lub filtra cję żąd a ń o b słu g iw an y ch tylko' p rzez w y brany se rw let (np. p o p rzez w staw ien ie w m iejsce znaczników Faces S e rv let< /se rvle t-n a m e > do obsługi żądań przez apli: k ację JSF). L isting 2 .1 4 . K od klasy użytkowej Hihernate Util package is r p .h ib e r n a t e .m odel. u t i l ; im port o r g .h ib e r n a t e .c fg .A n n o ta tio n C o n fig u ra tio n : import o rg .h ib e rn a ta .S e s s io n F a c to ry :
;unek 2.9 . Diagram sekwencji wzorca OSIV dla aplikacji JSF p u b lic c la s s H ib e m a te liti 1 { p riv a t e s t a t i c f in a l S e ss io n F a cto ry s e s s io n F a c to ry ; p riv a te s t a t i c f in a l Log log = L o g F a c t o r y ,g e t lo g (H ib e r n a t e U t ii.c la s s );
»3« Organizacja kodu aplikacji w Eclipse
s t a t ic { t ry {// T w o rzy S e s s io n F a c to ty na p o d s ta w ie k o n fig u ra cji w p lik u hibernate, cfg .xm l s e s s io n F a c to ry = new A n n o ta tio n C o n fig u ra tio rK ) .c o n f ig u r e d .b ui ld S e s s io n F a c to ry l); } catch (Throw abie ex) { l o g .e r r o r C N i e można pobrać s e s ji H ib ern a te " + e x ); throw new E x c e p t i o n l n l n i t i a l iz e r E r r o r ( e x ) ; } } p u b lic s t a t i c S e s s io n F a cto ry g e tS e s s io n F a c to ry () { re tu rn s e s s io n F a c to ry ; }
K o d a p lik a cji W W W o p a rty c h n a te c h n o lo g ii Ja v a E E z az w y c za j je s t w y tw a rz a n y w p o sta ci w ielu m odułów , ro z w ija n y ch n ie z a le ż n ie p rz e z ró ż n e z e s p o ły projektow e. R ozproszenie k o d u aplikacji w w ielu p ro jek tac h u ła tw ia m .in.: ♦ zarządzanie k o d e m źró d ło w y m i p lik a m i zasobów , ♦ p odział p ra cy w zespołach, ♦ zautom aty zo w an ie p ro c esu w y tw a rza n ia i testo w an ia aplikacji.
O rgan izując kod aplikacji, na le ży pam ięta ć, że H ib e r n a te S e ss io n F ilt e r je s t elemen- i tem w a rs t w y w id o k u a p lik a c ji W W W , p o d c z a s g d y k la sa Hi ber nateU ti 1 zapew n ia d o s tę p d o w a rs tw y t rw a ło ś c i. 1
f
W dalszej części ro zd ziału znajduje się opis ro zw iązań , ja k ie z ap e w n ia E clip se W T P w zakresie organizacji k o d u ź ró dłow ego oraz in teg racji i w d ra ż a n ia sk o m p ilo w an y ch m odułów aplikacji n a serw erze.
.3.1. Projekty i moduły Java EE w E clip se . Zanim zajm iem y się planow aniem rozm ieszczenia kodu aplikacji ISR P, w arto przybliżyć podstaw ow e koncepcje zw iązane z w ytw arzaniem i w drażaniem aplikacji Java E E w śro d ow isku E clipse W eb T ools Platform , a m ian o w icie p r o je k t i m o d u ł aplikacji.
96
Ja va S e rv e r F a ce s i E c lip s e G a lile o . T w o rze n ie apiika
Uozdzml 2. ♦ Planow anie, m odelow a n ie i pro je ktow an ie a p lik a cji JS F na platform ie Java
W szystkie pliki źródłow e oraz inne zasoby aplikacji bądź biblioteki m uszą by czone w p ro jek cie sk ła d ając y m się z je d n e g o lub w ie lu z ag n ie ż d ż o n y c h kata! P rojekt stanow i p o d sta w o w ą je d n o s tk ę organizacyjną. k o d u aplikacji i je s t zapisywaS w p r z e s tr z e n i p r o je k tó w (ang. w orkspace). P ro je k t opisyw any je s t za p o m o cą danych, które z a w ie ra ją p o m o cn ic ze in fo rm acje o w y m a g an y c h z asobach zewnęjjS nych, sposobie k o m p ila cji czy śro d o w isk u u ru ch o m ien io w y m . L o g iczn a strukj* p re ze n to w an y c h w oknie P ro je c t E xp lo re r k a ta lo g ó w i z asobów p ro jek tu je s t zopW m alizo w an a p o d k ą te m u łatw ie n ia p ra cy dew elo p ero m . . -R •111 M o d u ł a p lik a c ji (ang. m odule) re p re z en tu je g o to w y do w d ro ż en ia n a serw erze apj k acji k o d w y n ik o w y p ro jek tu (p o w stały po je g o skom pilow aniu), który m oże b y ć '' prezen to w an y p rz y u ż y c iu plików ' arch iw aln y ch , np. W A R lub JA R. M o d u ły Java3 p o sia d a ją o k re ślo n ą p rz e z sp e c y fik a c ję J a v a E E fiz y c z n ą stru k tu rę k ata lo g ó w órg p lik ó w . M o d u ły m o g ą być w d ra ż a n e w k o n te n e rz e Ja v a E E zaró w n o w postaci kow an y ch p lik ó w archiw um , j a k też ro z p a k o w a n y c h stru k tu r katalogów . Ec W T P w spiera w ytw arzanie i w drażanie następujących m odułów Java E E (w na’ podano typy archiw um oraz nazw y odpow iadających im projektów E clipse po myś
% Uwag3
W m a te ria ła ch p o m o c n ic zy c h do k sią żk i C z y te ln ik z n a jd zie m .in . kod m o d u łu u żyt ko w ego IS R P M o d e !, za w ie ra ją c y im p le m e n ta cję w a rs tw y b iz n e s o w e j, u d o s tę p n io n y w p o sta c i za rc h iw izo w a n e g o , piiku p ro je k tu E c iip s e o ra z sk o m p ilo w a n e j w e rsji m o dułu w p lik u -J A R . C z y te ln ik , któ ry c h c ia łb y p o m in ą ć za g a d n ie n ia w ytw a rza n ia w a r stw y b izn eso w ej, m oże sk o rzysta ć z go to w eg o do użycia m odułu IS R P M o d e l i skupić się w yłącznie na im plem entacji interfejsu użytkow nika w e d łu g w sk a zó w e k za m ie szc zo nych w n a s tę p n y c h ro zd z ia ła c h .
Na rysunku 2.10 p rz ed sta w io n o strukturę aplikacji IS R P , któ ra składa się z m o d u łó w Web A pplicatio n oraz U tility M odule. M oduł W eb A p p lica tio n z aw ie ra k o d w arstw y prezentacji i je s t tw o rzo n y w śro dow isku E ciipse p rz y u ż y c iu p ro jek tu typu D ynam ie Web P ro ject (p rzy k ła d takiego p ro jek tu został z ap re ze n to w an y w ro zd ziale ł .). M oduł Utility M odule p rzech o w u je w arstw ę b izn e so w ą aplikacji IS R P i je s t tw o rz o n y w śro dow isku E ciipse p rz y u ż y ciu p ro jek tu typu U tility P roject.
D ynamic W eb P ro je c t (W AR)
♦ E n terp rise applica tio n (E A R ) — E n te rp rise applica tio n P roject, ♦ E n terp rise applica tio n c lie n t (JA R ) — A p p lic a tio n C lient P roject,
a
«library»
K o m p o n en ty w s p ie r a ją c e u
: J a v a S e r v e r .Paces-.
♦ E n terp rise J a va B ea n (JA R ) — E JB P ro ject, ♦ Web applica tio n (W A R ) — D y n a m ic W eb P roject,
W idoki J S P u
♦ R eso u rce a d a p ter f o r JC A (R A R ) — C o n n e cto r P roject,
a
a
ffl
K o m p o n en ty zarząd z an e- -
W alid atory i k o n w erte ry
a
♦ U tility m odule (JA R ) — U tility P roject. P ierw szy ch p ięć w y m ien io n y c h typów m o d u łó w je s t ok reślo n y ch w specyfikacji Jąi EE, nato m iast o statn i typ z o stał w p ro w ad z o n y p rzez środow isko E clipse i s t a n || m o d u ł u ż y tk o w y ( U tility m o d u le) o g ólnego p rz ez n ac ze n ia, u m o żliw iając y podaj kodu aplikacji na oddzielne projekty- K ażdy projekt W TP m oże generow ać tylko je|f m oduł aplikacji, ale w k o d z ie źró d ło w y m p ro jek tu m ożna o d w oływ ać się do kej um ieszczonego w innych m odułach. O dw oływ anie się do kodu znajdującego się w tnnyj m odułach w y m a g a je d n a k ja w n e g o zd efin io w an ia zależności p o m ięd zy projektami co je s t z ilu stro w an e p rz y k ła d em w dalszej części rozdziału.
Utility P ro je c t (JA R )
- W arstw a b izn eso w a. «interface» in te rfe js y w a r s t w y u słu g o w e j
'W 1 im p lem en ta cje u s łu g
M odel d zied zin o w y (o biekty b iz n e so w e )
2.3.2, Zastosow anie projektu użytkow ego do przechow yw ania kodu w a rstw y biznesowej
-,W arstwa:dostępu do danych .
i¥-
Z ałóżm y, że c h ce m y u m o ż liw ić ro zw ijan ie aplik acji ISR P w dw óch projektach,31 | b y kod w arstw y p re ze n ta c ji opartej n a szk ielecie JS F znajdow ał się w je d n y m projeg cie, a k o d p o zo stały ch w a rstw (biznesow ej i d o stę p u do danych) w innym . Z a łe tą || kiego podziału b ędzie m ożliw ość w ielokrotnego w ykorzystania m odułu zawierającej! w arstw ę b iz n e so w ą w a p lik a cjac h z aw ierający ch interfejsy oparte n a różnych te<|| n o logiach (np. JS F i Sw ing).
II
97
«library» Hibernate
a
O b iekty DAO
a
a
O d w z o ro w an ia O R :
Rysunek 2 .10, Struktura m odułów aplikacji ISR P oraz zależności w ystępujące p o m ięd zy nim i
Ja va S e rv e r F a ce s i E clip s e G a lile o. T w o rze n ie aplikacji
98
" ROZI
P ro je k t ty p u Java E E U tility P ro ject je s t bard zo podo b n y do zw ykłego projekh w środow isku E clipse, ale p o sia d a d odatkow y p a k ie t rozszerzeń (tzw . fa c e t) — M odule (idea p ak ietó w ro z sze rz eń E clipse zo stała om ów iona w rozdziale L , w „JSF F a c e t”). U tility M o d u le stan o w i część k o n fig u ra c ji u ru ch o m ien io w e j pr i um ożliw ia w ykorzystanie skom pilow anego kodu projektu w innych m odułach aj korporacyjnej (Java E E ). G dy zm iany w p ro jek c ie z o sta n ą zapisane, E clipse at tycznie go skom piluje i spakuje k o d w y n ik o w y do p lik u JA R , któ ry następnie j< b lik o w an y (bądź aktu alizo w an y ) n a serw erze oraz w innych projektach, które z korzystają. Z e w zg lęd u n a opisane w yżej w łaściw o ści U tility P ro ject znakom icie nadaje p rzech o w y w an ia k o d u w a rstw y b iznesow ej oraz interfejsu w arstw y trw ałości, w iście p o d w arunkiem , że m odel dzied zin o w y nie je s t o party na kom ponentac (w tak im p rzypadku w y m a g an y je s t E JB M odule).
2 . N a liście w skazujem y grupę projektów korporacyjnych (Java E E). Po rozwinięciu 2
elem entów grupy w ybieram y opcję Utility P roject i zatw ierdzam y przyciskiem Next, W yśw ietli się okno kreatora N e w J a va Utility M odule, pokazane na rysunku 2.11.,« R y s u n e k 2 .1 1 .
T w orzenie projektu typ u U tility P roject
99
3. W p o lu P ro jec t n am e w pisujem y n a zw ę p rojektu. N a stęp n ie z listy rozw ijanej T arget R untim e w ybieram y śro dow isko u ru c h o m ien io w e serw era, n a k tó ry m m a b y ć publikow any k o d w yn ik o w y p ro jek tu . A b y dodać k o lejn e p ak iety . rozszerzeń E clipse do pro jek tu (np. d la szk ieletu Spring), n ależy w sekcji C onfiguration kliknąć p rz y cisk M o d ijy i w n o w y m oknie k re ato ra zazn aczy ć o d p o w ied n ie p o la w yboru. W sz y stk o z a tw ie rd z a m y p rz y c isk ie m N e x t i p rzechodzim y do kolejnego okna, w k tó ry m m o żem y załączyć do p ro jek tu dodatkow e źródła. Całość zatw ierd zam y p rz y cisk iem F inish.
2 .3 .3 . M oduły zależne :
W celu utw orzenia now ego projektu Java EE U tility Project należy w ykonać nastj puptJ kroki: 1. Z m enu aplikacji w y b ieram y opcję F ile /N ew /P roject. Pojaw i się okno kreato N e w P ro ject, w k tó ry m w y św ietli się lista ty p ó w projektów .
♦ Planow anie, m odelow anie i p ro je k to w a n ie a p lik a cji JS F na p latfo rm ie Ja va
Istnieją dw a sposoby w ykorzystania gotow ego m odułu użytkow ego w aplikacji, a m iano wicie: ♦ b ezpośrednie w drożenie m odułu u ż y tk o w eg o w śro d o w isk u u ru c h o m ien io w y m serw era (opisane w po p rzed n im pu n k cie), ♦ ustaw ienie zależności pom iędzy projektam i i w ykorzystanie m odułu użytkow ego podczas b udow y innego m odułu. W drugim p rzy p ad k u w e w łaściw o ściach p ro je k tu U tility P ro je ct u sta w iam y w artość w p o lu T arget R untim e. A b y d o łączy ć m o d u ł U tility M o d u le do dow olnego innego projektu Java EE, w oknie P roject E xplorer zaznaczam y projekt docelow y i z m enu kontekstow ego w ybieram y opcję P ro p erties. N a stę p n ie w oknie w ła śc iw o ści w y b ie ram y stronę J a v a E E M odule D ep en d en cies, p o czym zazn aczam y p o le w y b o ru przy nazw ie p rojektu, którego skom p ilo w an y k o d c h ce m y d o łąc zy ć , ja k p o k a za n o na ry sunku 2.12. Rysunek 2 .1 2 . Ustawianie zależności pomiędzy projektam i Java EE
,
J t iv n raf; M uriuhï U o p o n d sn c io u '.'.sc L :;r his proaeriv' p a g e Sets y o u a r d a s s p ^ h entries, A rchive depen d e n cie s f.th é w eb m o d u le at.deploy ie W£3-L’dF,C lasses folder.
Beanlnfo Path tjiuificrs Cheocstyle Drools
o h c lsssp a th en
arkfif Con ruonrnate Settir Java Suild Path Java C o d e Style Java Com piler Java.E£ M o d u le D eoendanciesJavadoc Location JavaScript j SP F ra g m en t PMQ Project « rchives Protect Facets Project References R etactonng n tstory i\urv iJebug Se ttings Seam Settings ie r/e r
Prelect I i Tjj m y sql-c onnec tor-j.
ÏÏ^ o d e i isrpM odei
I i
H j C? com m o n s-co llec ti.
isrpM odei
i!Sj (_J antlr-2.7.0 ja r
isrpM odei
isrpM odei i l l <_?)St!-1.2.jar ítS§ (_jco m m o n s-fi!e u p lo . .. isrpM odei i_i h ib e rn a te - co m m o .
isrpM odei
i l i jj1asm .jar
isrpM odei isrpM odei
w ?d om 4j-1.0Jl.jar
Eäj v rh ib e r n a te - a n n o ta tl ., isrpM odei £Ü ‘J 'jta .ja r 77 jt/ty tal, P i r ^ n l 1 .n a i 7 Ur i | i .1A 7/:.
IsrpM odei __cV nMnrt=l
S
i ||
■G; iy,-)--.-Deselect A jí/. .!
•wyj; -” tj-'f...' Ay
ÂrfrfJA R s-.. -
i • i- .. í r
.. ..-.ovi
lliiiilll
Ja va S e rv e r F a c e s i Ee iip se G a lile o . T w o rze n ie aplikacji
N a przykład do budow y aplikacji ISR P w ykorzystam y dw a projekty — projekt DynjgjSi W eb P ro je ct (D W P ) do ro z w ija n ia k o d u w a rstw y prezentacji oraz U tility Project (fjgS do ro zw ijan ia w arstw y b iznesow ej oraz w a rstw y d o stę p u do d a n y c h .•P o n iew aż of|j|* kiw an y m m odułem w y n ik o w y m aplik acji m a b y ć a p lik a c ja W W W , p ro jek t DWpSL dzie z ależn y od U P. Po każdej kom p ilacji w y n ik o w y m oduł U tility M odule b ęfll* auto m aty czn ie d o d aw an y (zam ieniany) do w y n ik o w e g o p lik u W A R oraz sekcji tra p A pp L ibraries w ścieżce p rz e sz u k iw a n ia p ro je k tu D W P . Je d n o c z e śn ie k a żd a z m igjf pliku W A R będzie pow odow ać autom atyczną publikację nowej w ersji aplikacji W tlf il na serw erze, chyba że u ż y tk o w n ik zm ieni do m y śln e u sta w ien ia d o tyczące pubłjj§f® w a n ia (patrz ro z d ział 6., ry su n e k 6.2).
R o zd zia ł 3 .
__________________________________________________ W szystk ie k la sy i d o łą czo n e do projektu użytkow ego biblioteki s ą w id o czn e w projekcję) za le żn y m . K la s y i b ib lio te k i p ro je k tu za le ż n e g o nie s ą je d n a k w id o c z n e w p ro je k c iljP u żytk o w ym . N ie s te ty , n ie m o że m y zd e fin io w a ć o d w ro tn e j z a le ż n o ś c i, g d y ż s p o w o jj d o w a ło b y to p o w s ta n ie c y rk u la rn o ś c i, k tó ra je s t p rz e z ś ro d o w is k o E e iip s e a u to m ą l! ty c z n ie w yk ryw a n a i tra k to w a n a ja k o b łą d . D o ś ć p o w s z e c h n y m ro zw ią za n ie m t e g o j p ro b le m u je s t u m ie s z c z e n ie kodu n ie z b ę d n y c h d la o b u p ro je k tó w k la s w oddzieli nym p ro je k c ie u żytk o w ym (U tility P ro je c t). W ta k im p rzyp a d k u d w a p ro je k ty s ą za! le żn e od trz e c ie g o i nie p o w s ta je p o m ię d zy nim i z a le ż n o ś ć c y rk u la rn a , ■%
iH
3ai , łCotnpomemo/ n arząd zan e W a p lik a cjac h JS F istn ie je d e k la ra ty w n y m e c h a n iz m p o z w a la ją c y n a zarz ąd z an ie
kom ponentam i JavaB ean (strona 78 „K lasy P O JO i kom ponenty Ja v a B ea n ”). K o m p o nen ty z a rz ą d z a n e (ang. m a n a g e d beans) to k o m p o n e n ty , k tó re s ą tw o rz o n e , in ic jo w ane i p rzechow yw ane w odp o w ied n im z asię g u aplik acji p rzez szk ielet JS F. O dw o łując się w k odzie Javy do k o m p o n en tu zarz ąd z an e g o p o raz pierw szy , JS F tw o rzy instancję takiego kom p o n en tu i zw rac a re fe re n cję do niego, która zw rac a n a je s t ró w nież w k olejnych odw ołaniach. K o m p o n e n ty z arz ąd z an e dek laro w an e s ą w p lik u kon figuracyjnym fa c e s-c o n fig .x m l za p o m o c ą e le m en tu w ję z y k u X M L . Dzięki składni X M L łatw o zapew nić narzędzia do edytow ania i w eryfikacji konfiguracji (np.'E c lip se W TP). D eklaratyw ny m echanizm zarz ąd z an ia k o m p o n en ta m i p o z w ala na: ♦ d eklarację i in icjalizację w ła śc iw o ści w szy stk ic h k o m p o n en tó w Jav aB ean w je d n y m m iejscu (plik k o n fig u racy jn y ), ♦ k ontrolę zasięg u k o m p o n en tó w (appl i c a tio n , se ssio n , re q u e st, none), ♦ u łatw ien ie w p ro w ad zan ia z m ia n p o c z ą tk o w y ch w arto ści d la w ła śc iw o ści k om ponentów Jav aB ean b e z p o trze b y w p ro w ad z an ia zm ian w k o d zie i je g o p onow nej kom pilacji, ♦ w iązanie w ła śc iw o ści k o m p o n en tó w Ja v a B ea n z w artościam i lub w y rażen iam i reprezentującym i w artości, co p o z w a la n a o d c zy t i zapis ty ch w łaściw o ści, ♦ dostęp do k o m p o n en tó w z p o z io m u k o d u Ja v y oraz p o z io m u sza b lo n ó w stron za p o m o c ą w y ra że ń ję z y k a U n ifie d E x p re ssio n L anguage.
mmmmmmmmmmmgÊÊm
1 02
Ja va S e rve r F a c e s i E c lip s e G a lile o. Tw orze nie aplikacji « (80®
elem entu
♦ k om ponentów w sp ierający ch (przy k ład tak ieg o typu kom ponentu zarządzar został ju ż p o k a za n y w p o d ro z d ziale 1.3.7, w p o sta c fk la s y hal kul atorBB), ;
3 .1 .1 . Deklaracja kom ponentu
_____________' _
_
10 3
0 3 1 . E le m e n ty k o n fig u r a c ji k o m p o n e n tó w z a r z ą d z a n y c h — c ią g d a ls zy
Z pun k tu w idzenia fu n k cjo n aln o ści k o m p o n en ty z arządzane m o g ą pełnić funkcji
♦ kom ponentów zaw ierających logikę aplikacji, nieodnoszących się do koi stron w idoku (szab lo n ó w JS P czy innych).
,.2ł 3 . ;• U żyw a n ie J S F
■
-
L ic ze b n o ść
O p is e le m e n tu
1
W M nines. k t - m p value iiull-Val ’
'
W łaściwość m oże być zainicjowana odpowiednio mapą, listą lub tablicą, referencją pustą (nul 1- value) lub literałem (value).
Element nadrzędny:
ą ev-class W
° -l
W pełni kwalifikowana nazwa typu, na który konwertowany będzie każdy obiekt klucza m apy (domyślnie
■valué-cías^
0 -1
W pełni kwalifikowana nazwa typu, na któ ry konwertowany będzie każdy obiekt wartości przechowywanej w mapie (domyślnie j a v a . 1ang .S tr ln g ).
map-entsy
0- *
Para klucz-wartość, używana do inicjowania właściwości typu ja va . u t i l .Map.
key
1
Reprezentacja klucza w postaci łańcucha znakowego
'nuil-val ue lub val tie
1
Wartość skojarzona z kluczem, reprezentowana literałem lub referencją pustą (nul 1).
ja va . la n g .S t r in g ).
A b y utw orzyć k o m p o n en t zarządzany, w y sta rcz y zadeklarow ać u życie kom poJavaB ean w p liku konfig u racy jn y m fa c e s-c o n fig .x m l (w łaściw ie w ystarczy klasa PQ z a w ie ra ją c a k o n s tru k to r b e z a rg u m e n to w y ). D e k la ra c ja k o m p o n e n tu w e łe m m usi zaw ierać co najm n iej id en ty fik ato r obiektu, nazw ę klast ; sięg, w jak im obiekt m a b y ć w id o czn y (kontekst). Ponadto m ożliw e je s t zam icjc»’ ■ w szystkich bądź w ybranych w łaściw ości kom ponentu. K rótki opis w szystkich elem m składni deklaracji k o m p o n en tó w z a rz ąd z an y c h zo stał przed staw io n y w tabeli 3.1
Element nadrzędny. (S t rin g ).
T a b e la 3 ,1 , E lem enty konfiguracji kom ponentów zarządzanych N a z w a e lem en tu
L iczebność
O p is ele m e n ty
Element nadrzędny: d e s c rip tio n
0- *
Opis komponentu.
display-nam e
0 —*
Opisowa nazwa komponentu do wyświetlania w narzę.i ■>■ wspomagających wytwarzanie aplikacji z JSF.
icon
o~*
Małe i duże ikony reprezentujące komponenty w narze n.■■ wspomagających wytwarzanie aplikacji z JSF.
managed-bean-name
1
Unikatowa nazwa komponentu, za pomocą której nuO; być on identyfikowany w kodzie aplikacji.
managed-bean-class
1
W pełni kwalifikowana nazwa klasy reprezentujące: komponent.
managed-bean-scope
1
Specyfikacja zasięgu widoczności komponentu, przyjmująca wartości: none, request, session, applica
m anaged-property
0 -*
Definiuje właściwość komponentu.
Element nadrzędny: d e s c rip tio n
Ö —*
Opis właściwości.
display-nam e
0- *
Opisowa nazwa właściwości do wyświetlania w narzęu.;: wspomagających wytwarzanie aplikacji z JSF.
ico n
0 —*
Małe i duże ikony reprezentujące właściwość w narzę.: m wspomagających wytwarzanie aplikacji z JSF.
property-nam e
1
Nazwa właściwości klasy JavaBean reprezentującei komponent zarządzany.
p ro p e rty -c la s s
0- 1
W pełni kwalifikowana nazwa klasy reprezentujące! właściwość, która jest wymagana w przypadku wykorzystania pliku konfiguracyjnego do inicjowania obiektu komponentu zarządzanego.
Element nadrzędny: <1 i s t -e n t r i es> -c l ass
nul 1-val ue lub value
0 -1
W pełni kwalifikowana nazwa typu, na który będą konwertowane wszystkie elementy przed dodaniem do listy. Dostępne dla właściwości typu ja v a . u t i 1 . Li s t.
0 -*
Wartość właściwości, która może być referencją pustą lub literałem.
P rzykładem k o m p o n en tu z arz ąd z an e g o w naszej aplikacji je s t k o m p o n en t v is itB e a n , o d p o w ied zialn y za z ac h o w a n ie sta n u se sji u ż y tk o w n ik a . O b ie k t v is itB e a n grupuje w szystkie w ła śc iw o ści doty czące sesji u ż y tk o w n ik a z aplikacją, tj. załogow anego użytkow nika, artykułu zgłaszanego przez użytkow nika, edytow anego użytkow nika (jeśli załogow anym u ż y tk o w n ik ie m je s t adm in istrato r), recenzji z g łoszonego artykułu oraz kom ponentu w spierającego obsługę ekranu logow ania. D eklaracja kom ponentu v is itB e a n znajdująca się w p lik u fa c e s -c o n fig .x m l z o sta ła p rz e d sta w io n a n a lis tin g u 3.1. P rzy pierw szy m o d w o ła n iu się do k o m p o n e n tu m ec h an iz m d e k la raty w n e g o zarządzania kom ponentam i utw orzy obiekt klasy i s r p . viewbeans. VisitB e a n i przechow a go w obiek cie sesji u ż y tk o w n ik a p o d n a z w ą v is itB e a n . O b ie k t ten dalej b ęd zie w id o c zn y jak o atrybut sesji uży tk o w n ik a, stąd b ę d zie on d o stęp n y zaró w n o p o p rzez w y korzystanie m echanizm u d ek laraty w n eg o zarz ąd z an ia k o m p o n en ta m i JS F, ja k i interfejs p ro g ra m istyczny S ervlet A P I (p rzy k o rz y stan iu z zew n ętrzn eg o kontekstu). listing 3.1.. D eklaracja kom ponentu zarządzanego, służącego do obsługi sesji użytkow nika
vis1tBean is rp .viewbeans. VisitBean sessi on
Ja va S e rv e r F a c e s i E c lip s e G a lile o . T w o rze n ie a p lik a cji W
104
K o d k lasy kom p o n en tu v i s it B e a n zaw ie rają cy w y łą c z n ie w ła śc iw o śc i i m eto ay stęp o w e do nich zo stał p rz ed sta w io n y n a lis tin g u 3.2... L is t in g 3 .2 . K o d klasy kom ponentu zarządzanego, służącego do-obsługi sesji package i srp .view bean s; im port i s r p .h ib e r n a t e .m odel. bus i n e s s o b je c t.*; im port ja v a . i o . S e r ia iiz a b le ; p u b lic c la s s V is itB e a n implements S e r ia liz a b le { p r iv a t e User u se r; p r iv a t e A u th e ntication B ean a u th e n tic a tio n B e a n ; p riv a t e Paper cu rre n tP a p e r; p riv a t e User c u rre n tU s e r; p r iv a t e Review c u rre n tR e vie w : p u b lic Review g e tC u rre n tR e v ie w () { i f (c u rre n tR e vie w == n u l l ) { c u rre n tR e v ie w - new R e v ie w O ;} re tu rn c u rre n tR e v ie w
}
p u b lic v o id setC u rrentR evie w (R eview c u rre n tR e v ie w ) { th is .c u rre n tR e v ie w = c u rre n tR e vie w ;
}
p u b lic User g e tC u rre n tU s e r() { i f (c u rre n tU s e r == n u ll ) { re tu rn c u rre n tU s e r;
c u rre n tU s e r = new U s e r O ; }
}
p u b lic v o id s e tC u rre n tU s e r(U s e r c u rre n tU s e r) { t h is .c u r r e n t U s e r = c u rre n tU s e r;
}
p u b lic v o id s e tU s e r(U s e r u s e r) { t h i s . user = u s e r ;
i
p u b lic A u th entication B ean g e tA u th e n tic a tio n B e a n O re tu rn a u th e n tic a tio n B e a n ;
3,1.2. Z asięg komponentów K ontenery serw letó w dostarczają m echanizm p o z w a la ją c y n a z achow anie stanu apii' ' kacji, sesji u ży tk o w n ik a bądź żądania (w p rz y p a d k u stro n JS P ró w n ież stanu strony) w postaci ko lek cji atry b u tó w skojarzonych z p o je d y n c z y m ob iek tem rep rezen tu jący m ten stan. R ozw iązan ie w ykorzystuje tzw . o b iek ty k o n tek sto w e, zaw ierające m apy o d w zorow ujące p a ry klucz-w artość dow iązane do o d p o w ie d n ic h o biektów im p lem en tujących in terfejsy S ervi etC ontext, H ttp S e ssio n lub S e rvi etRequest. M echanizm deklaratyw nego zarządzania kom ponentów w JSF korzysta z tych obiektów kontekstow ych, u m ie sz cz a ją c w nich k o m p o n e n ty z arz ąd z an e . T o, w k tó ry m z nich zostaną um ieszczone zadeklarow ane kom ponenty', zależy od w artości obow iązkow ego elem entu «managed-bean-scope>. E lem ent ten m o ż e p rz y b ie rać cztery w artości; none, a p p lic a tio n , session i request, które jednocześnie określają zasięgi, w jakich zadeklaro w any k om p o n en t m usi być dostępny z p o zio m u in n y c h k o m p o n en tó w danej aplikacji. K om ponent zarządzany o zasięgu none je st tw orzony za każdym razem , gdy w ystępuje odw ołanie do niego. Instancja kom ponentu n ie je s t z atem p rzec h o w y w a n a w żadnym obiekcie kon tek sto w y m zasięgu. D zięki tej w ła śc iw o śc i k o m p o n en t w yko rzy sty w an y jest do tw orzenia now ych obiektów na żądanie (przy każdym odw ołaniu w kodzie) oraz przede w szystkim do inicjalizacji w łaściw ości innego kom ponentu. Jest to szczególnie użyteczne zastosow anie, jak o że wszystkie kom ponenty m o g ą odw oływ ać się do kom po nentów o z asięgu none.
{
>
p u b lic v o id s e tA u th en tica tlo n B ea n C A u th en tica tion B ea n a u th e n tic a tio n B e a n ) { t h i s . a u th en tica tion B ea n = a u th e n tic a tio n B e a n ;
new P a p e rt) ; ]
}
p u b lic v o id setC u rren tP a p e rtP a p er c u rre n tP a p e r) { t h is .c u rre n tP a p e r - c u rre n tP a p e r;
Uwaga
105
K om ponent zarząd zan y o zasięgu appl i c a t i on je s t tw o rz o n y p o d czas pierw szeg o o d w ołania do niego i przechow yw any p rzez cały czas do z ak o ń czen ia działania aplika cji. Je st on d o stę p n y z p o zio m u w sz y stk ic h o b ie k tó w a p lik a cji. W naszej a p lik a cji p rzykładem je s t u t i l Bean, przechow ujący d o stęp do zaso b ó w , które pow in n y być d o stępne d la w szy stk ich obiektów aplikacji, tj. u sta w ie n ia p o c zty elektronicznej. Innym zastosow aniem m o że być konfiguracja d o stęp u do ź ró d e ł danych.
i p u b lic Use r g e tU s e rO { re tu rn u se r;
p u b lic Paper g e tC u rre n tP a p e rt) { i f (c u rre n tP a p e r = n u ll ) { currentPa] re tu rn cu rre n tP a p e r;
Rozdział 3. ♦ U żyw a n ie JS F
U m ie s z c z e n ie d e k la ra c ji k o m p o n e n tu w pliku fa c e s -c o n fig .x m l n ie p o w o d u je utwo-jj ize n ia je g o instan cji po utw orzeniu p rze z k o n te n e r o d p o w ie d n ie g o obiektu aplil s e s ji u żytk o w n ik a c z y ż ą d a n ia . U tw o rz e n ie in s ta n c ji k o m p o n e n tu I in ic ja liz a c ja w ła ś c iw o ś c i n a s tę p u je d o p ie ro p rzy p ie rw s zy m o d w o ła n iu s ię d o n ie g o .
K om ponent zarząd zan y o zasięgu se ssion je s t tw o rz o n y p o d c za s p ierw sze g o o d w o łania do niego i przechow yw any do c h w ili z a k o ń c z e n ia sesji H T T P użytkow nika. Sesja m oże być zak o ń c zo n a program ow o p o p rz ez w y w o ła n ie m eto d y in v al i d a te O in te r fejsu H ttpS essi on lub p o upływ ie o kreślonego c z a su , d e te rm in u ją c e g o w a żn o ść sesji. W naszej aplik acji p rzy k ład em kom p o n en tu o ty m z a się g u je s t v is itB e a n , który g ru puje w łaściw ości zw iązane z sesją użytkow nika, tj. dane użytkow nika oraz nadesłanego przez niego arty k u łu i je g o ew entualnej recenzji. K o rz y stają c z k o m p o n en tó w o zasię gu sesji, należy pam iętać, że nie są one jednow ątkow e. U żytkow nik ram ach jednej sesji m oże korzystać z k ilk u zakładek lub ok ien p rz e g lą d a rk i in te rn eto w e j, a k ażd a o d p o w iedź je st przetw arzana przez odrębny w ątek. N a leż y zatem p a m ię ta ć o synchronizacji dostępu do k ry ty cz n y ch zasobów . Kom ponent zarządzany o zasięgu request je s t tw o rz o n y p o d c za s pierw szego odw ołania do niego i przechow yw any do czasu w ygenerow ania o d p o w ie d zi n a żąd an ie. W zw iązku z tym dla k ażdego ż ąd an ia generow ane s ą n o w e in stan c je, co p rz y w sp ó łb ieżn y m ch a rakterze p rz e tw a rz a n ia ż ąd a ń przez k o n te n e r se rw le tó w je s t d o ść k o szto w n e. K o m ponenty o tym z asięg u s ą jed n o w ątk o w e, a zatem gw aran tu j ą bezpieczeństw o w ątk ó w (ang. thread-safè).
i_06
Uw aga
Ja va S e rv e r F a ce s i E clip s e G a lile o. T w o rze n ie aplik
W przyp a d k u s ta n d a rd o w e j im p le m e n ta cji J S F nie m a o d p o w ie d n ik a dia n io w a n e g o o b ie k tu z a k re s u pag e, w y s tę p u ją c e g o na s t ro n a c h JS P i za p w o biekcie P a g e C o n te xt, stan ow iącym d o m yśln ą w a rto ś ć -s ta n u stro ny. W wybranych' n ie s ta n d a rd o w y c h im p le m e n ta c ja c h ta k i z a k re s s ię p o ja w ia . 7'
P oniew aż obiekty przech o w u jące dane d la p o sz c ze g ó ln y c h zasięg ó w dostępne s ą j | przez interfejs program istyczny Servlet A PI, to rów nież ten interfejs pozw ala na dostęp^ d eklaratyw nie u tw o rz o n y ch k o m p o n en tó w zarządzanych. M o ż n a je pobierać, u s | w iać i usuw ać za p o m o cą m etod g e t A t t r l b u t e l ), getAttributeNamesC ), setAtznbutef i remove.Attrlbute in te rfe jsó w S e r v i e t C o n t e x t , H t t p S e s s io n lub ServVARequeą O p ró cz tego JS F d o sta rc z a w ła sn y in te rfejs w p o sta c i m e to d g e f R e q u e s t ltao' ), g | H-SessionMap() i getApp licationHapO , zdefiniow anych w klasie abstrakcyjnej t ternÿ «♦-Context, reprezentującej z ew n ętrzn y k o n tek st aplikacji.
3 .1 .3 liiiejalizacja w ła ściw o ści kom ponentów M ech an izm d ek laraty w n eg o zarząd zan ia ko m p o n en tam i u m o żliw ia deklaratyw ne u£. cjow anie w łaściw o ści k o m p o n en tó w w p lik u fa c e s -c o n fig .x m l. D o inicjow ania w% ściw ości służy elem ent «m a n a g e d -p ro p e rty > oraz elem enty podrzędne w zględem niëp w ym ienione w tabeli 3.1. A b y zainicjow ać w łaściw o ść, w y m a g an e je s t co najmnj| podanie jej nazwy' (< p ro p e rty -n a m e > ) i w artości, któ rą m oże być referencja pusta. Utaj łań cu ch a znakow ego lub w y ra że n ie re p re z en tu jąc e w artość. Z azw yczaj typ właściwi ści nie je s t w ym ag an y , p o n iew aż JSF m o że go ustalić, je d n a k g d y k o m p o n en t ma | a u tom atycznie w y g en ero w an y , n ależy go podać. D e k laro w a n a w łaściw ość może Być zarów no typu obiek to w eg o , ja k i p ry m ity w n eg o , ale w d ru g im p rzy p ad k u m e możf ko rzy stać z referen cji pustej (< n u l 1 - v a l ue> ). P rzy p ierw szy m o d w o ła n iu do k o m p o n en tu k o n ten e r tw o rz y instancję komponentf w ykorzystując bezparam etrow y konstruktor, a następnie za p o m o cą m etod s w ła śc iw o ści k o m p o n e n tu (w a rto ścia m i z a d e k la ro w a n y m i w p lik u fa c e s -c o n fig rmj N ie za in ic jo w an e w ła śc iw o ści p rz y jm u ją w a rto ści dom yślne. «managed-bean> «managed-bean-name>exemp1aryBean«/managed-b e a n -name> «managed-bean-class>beans.Exem p1aryBean«/m anaged-bean-cl ass> «managed-bean-scope>sess1on«/managed-bean-scope> «managed - p ro p erty> « p r o p e r t y -name>userName « v a l u e> A nd rzej«/val ue> «p ro p erty-n a m e > cu rren t«/p ro p erty-n a m e> «n u l 1-va lu e / > «/m anaged-property> «/managed-beam
3 . ♦ U żyw a n ie JS F
1» Inicjaiizacja ta b lic, list i map Inicjowanie w łaściw ości typu tablic, list i m ap w yróżnia się użyciem specjalnej składni, zaw ierającej elem enty « m ap -e n trie s> , <1 i s t - e n t r i e s > oraz ich e le m en ty p o d rz ę d ne, opisane w tabeli 3.1. D o z a in ic jo w a n ia w ła śc iw o śc i ty p u ta b lico w eg o lub listy ( j a v a .u t i l .L is t) służy elem ent <1 i s t - e n t r i e s > zilustrow any poniżej w p rzy k ła d o w y m kodzie. M oże on m ieścić listę w artości p o c z ą tk o w y c h z a w ie ra ją c ą je d e n lub w ięcej elem entów d eklarow anych za p o m o c ą «val ue> lub elem en t «nul 1 -val ue>, g d y m a być to lista pusta. Podczas in icjalizow ania tabel i list n a le ż y pam iętać o n astęp u jąc y c h re gułach: ♦ Przed ustaw ien iem w łaściw ości k o m p o n en tu k a żd y elem ent zad ek laro w an y przez «val ue> zostanie dodany do listy lub tablicy. ♦ Gdy lista lub tablica jest inicjow ana w artościam i początkow ym i w konstruktorze dom yślnym kom ponentu, to elem enty zadeklarow ane w ew nątrz <11 s t - e n t r i es> są dołączane na k o ń cu listy u tw orzonej i zain icjo w an ej w cześniej w k onstruktorze. ♦ Jeśli deklarow ana lista je s t pusta, to JS F, in ic jalizu jąc w łaściw ość, utw o rzy obiekt k lasy A rra y L ist (naw et gdy ja w n ie z ad e k la ro w a n y zostanie inny typ w elem encie < p ro p erty -cla ss> ). R eg u ła n ie obow iązuje, gdy lista je st inicjow ana w konstruktorze lub deklaratyw nie — w ów czas JS F nie zm ienia typu właściw ości. ♦ W odniesieniu do tablic konfiguracja i zachow anie s ą takie sam e ja k w przypadku list, p o za tym że tw orzony je s t o b iek t tab licy zdefin io w an ej w k om ponencie zam iast o b iek tu ArrayLi s t . U ż y cie ta b lic y j e s t je d n a k m niej w y g o d n e ze w zg lęd u n a u stalo n y z g óry rozm iar. Inicjaiizacja m ap odbyw a się p o d o b n ie ja k w p rz y p a d k u list, lecz różni się n iez n ac z nie składnią, gdyż każd y elem ent m ap y w y m a g a z d efin io w an ia p a ry klucz-w artość. Do zainicjow ania m ap y służy d ek la rac ja < m a p -en tries> , a jej p o jed y n czeg o elem entu — deklaracja , zaw ierająca z kolei parę elem entów i (opcjo nalnie «nul 1 -val ue>). In icjalizując m apy, n a le ży p a m ię ta ć o n astęp u jąc y c h regułach: ♦ Przed u sta w ien iem w ła śc iw o ści k o m p o n en tu k a żd y elem en t z adeklarow any przez zostanie d o d an y do m apy. ♦ G dy m a p a je s t in ic jo w a n a w a rto śc ia m i p o c z ą tk o w y m i w k o n stru k to rze dom yślnym k om ponentu, to elem en ty z a d e k la ro w a n e w ew n ą trz < m ap-entries> s ą dołączane n a końcu utw orzonej i zain icjo w a n ej w cześniej w ko n stru k to rze m apy. ♦ Jeśli deklarow ana m apa je st pusta, to JSF, inicjalizując w łaściw ość, utw orzy obiekt klasy HashMap (naw et gdy jaw nie zadeklarow any zostanie inny typ w elem encie « p ro p e rty -c l ass> ). R e g u ła n ie o b o w ią z u je , g d y m ap a je s t in ic jo w a n a w konstruktorze lub deklaratyw nie — w ów czas JS F nie zm ienia typu w łaściw ości. «m anaged-property> «p ro p e rty-nam e>1mportantNumbers«/property-name> « lis t -e n t r ie s > « v a lu e -c la s s > ja v a . la n g .In te g e r« / v a lu e -c la s s >
1 08
Ja va S e rv e r F a c e s i E c lip s e G a lile o . T w o rze n ie a p îlk a c
713 < / lis t -e n t r ie s > im portantSitesM apHelionhttp : / /hel 1o n . p W v a l ue> autorh t t p :/ /www. i s s l . u z . z g o ra . p l< /va !u e > inne
¡dział 3. ♦ U żyw a n ie JS F -
1.3.3. I n ic ja liz a c ja przy użyciu w yrażeń re p re ze n tu ją cych w a rto ść W p o p rz ed n ich p u n k tach om ów iona zo stała in ic jaliza cja w ła śc iw o ści ró żn y ch typów przy u ż y ciu literałów , a w ięc z w ykorzystaniem stały ch w a rto ści. W łaściw o ść k om p o n en tu zarządzanego m oże być zainicjow ana ró w n ież z a p o m o c ą w y ra że n ia rep re zentującego wartość. T akie rozw iązanie jest atrakcyjną alternatyw ą dla w iązania obiektów w kodzie, p oniew aż ew entualne zm iany w iązan ia d o k o n y w a n e w p lik u k o n fig u racy j nym są czytelniejsze i nie w ym agają rekom pilacji kodu. W yrażenia reprezentujące w arto ści s ą definiow ane w ję z y k u U nified E xp ressio n L a n g u a g e i u m o ż liw ia ją pow iązanie w ła śc iw o ści k o m p o n en tó w z in stan c jam i in n y c h k o m p o n e n tó w z a rz ąd z an y c h , ich w łaściw ościam i bądź innym i predefiniow anym i obiektam i reprezentującym i param etry inicjalizacyjne, n agłów ki żądań itp.
Uwaga
Z arów no w p rzy p ad k u elem en tó w listy, j a k i k lu cz y oraz w a rto ści przechow yw any! w m apie m ożna zdefiniow ać ich typ za p o m o c ą elem en tu < va l u e - c l ass> . E lem enty 1 i w artości m apy m o g ą p rz y jm o w a ć w a rto ść p u s tą ( ) w przeciwieństw do k luczy m apy, któ re m u sz ą m ieć u n ik a to w ą w arto ść.
3 .1 .3 .2 . D eklaracja lis t i map ja k o kom ponentów zarząd za nych L isty i m apy będ ące ty p am i o b iek to w y m i m o g ą b y ć d ek laro w an e n ie ty lk o j: ściwości kom ponentów zarządzanych, ja k zostało to przedstaw ione w p oprzednim pu cie, ale ró w n ie ż ja k o sam e k o m p o n e n ty z a rz ą d z a n e (nie d o ty c z y to je d n a k tablijj W szystko, co n a le ży zro b ić, to p o d ać typ k lasy im p lem en tu jącej in te rfe jsy L i s t Map — m usi to być n iea b strak c y jn a k lasa, np. A r r a y L i s t lub HashMap. W k odzie naszej a p lik a cji w y k o rz y stam y k o m p o n e n t z arz ąd z an y m a p y do zainicjj w a n ia i p rzec h o w a n ia u sta w ien ia ścieżki do k a ta lo g u n a dysku, w k tó ry m zapisywigg b ę d ą n a d sy łan e p lik i. L is tin g 3.3 z a w ie ra d e k la ra c ję k o m p o n e n tu c o n f i g u r a t l o n M f j z ad e k la ro w a n eg o ja k o o b ie k t k la sy j a v a . u t i 1 . HashMap i u m ie sz c z o n e g o w zakreśl none (inicjow any przy każdym odw ołaniu). A trybuty przechow yw ane w m apie u m ie j czane s ą w e le m en tac h < m a p -e n try > , a d e klarując zaw a rto ść m ap i list, n ie używ a j elem entów < m a n a g e d -p ro p e rty > .
109
M e c h a n izm d e k la ra tyw n e g o za rzą d z a n ia k o m p o n e n ta m i n ie w s p ie ra o d w o ła ń cy k lic z n y c h , tzn . k o m p o n e n t A n ie m o że p o s ia d a ć re fe re n c ji d o k o m p o n e n tu B, po d c z a s g d y je d n o c z e ś n ie k o m p o n e n t B p o s ia d a re fe re n c ję d o k o m p o n e n tu A. Co w ię c e j, k o m p o n e n t z a rzą d z a n y nie m o że o d w o ływ a ć s ię d o o b ie k tó w o kró tszym za sięgu w id o czn o ści niż on sa m . Na przykład k o m p o n en t s e s y jn y nie m o że odw oływ ać s ię do k o m p o n e n tu u m ie s z c z o n e g o na p o zio m ie ż ą d a n ia , a k o m p o n e n t aplikacyjny do se syjn e g o . G radacja za sięgu w id o c zn o śc i je s t n a stę p u ją c a : none > a p l i c a t i o n > s e s s io n > r e q u e s t.
S zczegółow y opis w y rażeń ję z y k a U E L znajduje się dalszej części rozd ziału , w tym m iejscu przeanalizujm y w iązania pom iędzy kom ponentam i n a przykładzie kom ponentów w ystępujących w naszej aplikacji. P ro b le m . Z ałó żm y , że c h ce m y u m ieścić u sta w ie n ia k o n fig u ra c y jn e naszej aplik acji w d w ó ch lokalizacjach, a m ianow icie: 1. w tekstow ym pliku w łaściw ości .properties — ustaw ienia poczty elektronicznej, 2 . w p lik u fa c e s-c o n fig .x m l — ustaw ienie ścieżki do z ap isu i o d c zy tu plików .
D od atk o w o załóżm y, że w sz y stk ie te u sta w ie n ia k o n fig u ra c y jn e m a ją być dostępne z p oziom u kodu aplikacji w je d n y m kom ponencie u t i 1 Bean o zasięg u aplikacji — przez cały czas działania p rogram u.
L is tin g 3 .3 . D eklaracja m apy atrybutów ja k o komp o n en tu zarządzanego____________________ configurationMapjava.util.HashM apnoneuploadPath < value> c:/ uploaded
M a py w ła ś c iw o ś c i i p lik i .p ro p e rtie s Isto tą w y k o rzy stan ia p lik ó w tek sto w y ch p r o p e r tie s je s t w ła śc iw y fo rm at ich zaw ar tości. Z o stał on o kreślony w d okum entacji A P I d la klasy ja v a . u ti 1 . P ro p e rti e s, u d o stępniającej m etody pozw alające na zapis (i odczyt) w łaściw ości do strum ieni bajtow ych, w tym strum ieni plik o w y ch . K a żd a linia p lik u z aw ie ra p o je d y n c z ą p a rę łańcuchów znakow ych k lu cza i w artości, np.:'
mmmmmm®**"
Ja va S e rv e r F a c e s i E c lip s e G a lile o . Tw orzenie aplikacji
110
Rozdz ia ł
3. « U żyw anie JS F
/k o m e n ta r z
< / — ... a n a lo giczn ie p o zo sta łe w ła ściw o ści z p lik u C o n fig u ra tio n .p ro p ertie s —>
emai 1Host-pop.gm ai 1. com eraal HJsername=Andrzejl25 # ... e tc .
■ conf1ourationMap
■
~
R ozw iązanie. U staw ienia poczty e le k tro n ic z n e j u m ie sz c z a m y w p lik u Configurations p roperties, w pakiecie i s r p .b u n d l e .c o n f i g u r a t io n projektu (po skom pilow aniu k o f ! aplikacji będzie to o d p o w iad ający p a k ie to w i p o d k a ta lo g isrp/bundle/configurationjM U ży cie p liku kom u n ik ató w dek laru jem y w w ę źle < a p p lic a tio n > p rz y użyciu e lj | m entu < re s o u r c e -b u n d ie > . W arto ść elem en tu definiuje n a zw ę p lik u (bej rozszerzenia .p ro p e rtie s), z k o lei z a w a rto ść p lik u (m ap a) je s t re p re z e n to w a n a pizfg zad e k la ro w a n ą w elem encie < v a r> z m ie n n ą e m a iiC o n f ig u r a t io n . O d w o ła n ia do fej zm iennej p ozw olą nam n a pobranie w artości skojarzonych z kluczam i podanym i w argS m encie w yrażenia, co zostało w y ró ż n io n e c z c io n k ą n a listingu 3.4. cS L is tin g 3 .4 . P rzykłady wiazań z użyciem w yrażeń reprezentujących wartości «re so u rce -b u n d ie > i s r p . b u n d le . c o n f ig u r a t io n .Configurationemai1C o n fi g u ra ti on «/ a p p lic a tio n ^ emai18ean i s rp .m o d e l. u t i 1 .emai i . Emai1C o n fig u râ t1onappl icat.ion « p r o p e r t y -name>ema1i H o s t « / p ro p e rt y -name> « v a l ue>#{emai 1C o n fi g u r a t i o n . emai1H o st}< /va i ue> « p r o p e r t y -name>ema i i Usernam e«/property - name> «va 1ue>#{emai1C o n fig u ra tio n .e m a i 1Usernam e}«/vaiue>
...
-
za w a iżo ść ko m p o n en ta m a p y p o k a z a n a na listin g u 3.3
«/managed-bean» «managed-bean> ut11Beanisrp.view beans.UtilBean «m anaged-bean-scope>application «managed - prope rty> emai 1Conf1guration #{em ailBean} «/m anaged-property> «managed- p ro p erty>
uploadPath < va lu e > # {c o n fig u ra tio n H a p [' u p lo a d P a th ']}< /va lu e > «/m anaged-property>
U staw ienia p o c zty elektronicznej p o b ra n e z p lik u słu ż ą do zain icjo w a n ia w łaściw ości kom ponentu e m a ilB e a n , któ ry je rep rezen tu je w k o d z ie w a rstw y biznesow ej. Z asięg tego kom ponentu został zadeklarow any jak o appl 1c a t io n i nie m oże być szerszy (n o n e ), gdyż spow odow ałoby to w y jątek M a n a g e d B e a n C re a tio n E x c e p tio n , z w iązan y z p ró b ą odwołania do zm iennej o m niejszym zasięgu. Z m ienna emai I C o n f i g u r a t i o n , podobnie ja k inne zasoby zad ek laro w an e w w ęźle , s ą w id o c zn e w z asięg u aplikacji. Do zain icjo w an ia i p rz ech o w an ia u sta w ien ia ścieżk i do k a ta lo g u n a dysku, w którym zapisywane b ę d ą nadsyłane pliki, służy kom ponent zarządzany m apy c o n f i g u r a t i onMap, p rzedstaw iony w p o p rz ed n im p u n k cie, na listin g u 3.3. P o n ie w a ż w y k o rzy stan y je s t 011 tylko do z ain icjalizo w an ia k o m p o n en tu u t i 1B ean, je g o z asięg u sta w iam y n a none. O statnia d ek la rac ja n a listin g u 3.4 d o ty cz y k o m p o n en tu u t i l Bean, k tórego w łaściw o ści s ą inicjow ane za p o m o c ą w y ra że ń o d w o łu jący ch się do w cześniej utw o rzo n y ch kom ponentów emai I C o n f i g u r a t i o n i c o n f i g u r a t i onMap. Z asięg u t i 1Bean je s t krótszy niż c o n fig u ra t io n M a p i ró w n y z a się g o w i emai I C o n f i g u r a t i o n (p a trz ry su n e k 3.1), w ięc nie m a p ro b lem u n ied o z w o lo n y ch odw o łań do o b iek tó w o m n ie jsz y m zasięgu. W arto zw rócić uw agę n a sposób p rz ek a za n ia w y ró ż n io n eg o c z c io n k ą k lu cza p rz y po b ieran iu w artości z m apy. D zięk i p rz ec h o w a n iu w u t i l Bean re fe re n cji do instancji obu w c z e śniej u tw o rzo n y ch k o m p o n en tó w p o sia d am y dostęp do w szy stk ic h ustaw ień k o n fig u racyjnych w o brębie całej aplikacji. N aw et niedośw iadczonem u program iście zaprezentow ane ro zw iązanie m oże się w ydać n a d m ie rn ie 'zło ż o n e, a sfo rm u ło w an y p ro b lem n iec o sztuczny. T akie w rażenie b ęd zie uzasadnione — rozproszenie ustaw ień konfiguracyjnych w w ielu lokalizacjach, a także m nożenie sam ych k o m p o n en tó w raczej n ie s ą p o ż ą d a n e w p ro jek tac h in fo rm a ty cz nych. N iem niej p ro b le m do b rze ilu stru je m o żliw o śc i i o g ra n ic ze n ia doty czące inicjo w ania k o m p o n en tó w z u ży ciem ję z y k a U E L . C z y te ln ik m oże p rz ed e w szy stk im zap o znać się ze sk ła d n ią p o z w ala ją c ą n a w y k o rz y stan ie z aso b ó w aplik acji do in icjow ania
Ja va S e rv e r F a c e s i E c lip s e G a lile o. T w o rze n ie api
± 12
gozdział 3. ♦ Używ a n ie JS F
3.1.4, Odwołania, do kom ponentów zarządzanych
R y s u n e k 3 .1 .
G r a f zależności kom ponentów zarządzanych zadeklarow anych n a listingu 3.4
Składnia odw ołań do k o m p o n en tó w z arz ąd z an y c h w ykon y w an y ch z pozio m u dekla ra cji w p lik u fa c e s -c o n fig .x m l z o sta ła p rz e d sta w io n a w p u n k c ie 3 .1 .3 .3 . W k o d zie aplikacji sk ład n ia o d w o ła ń do instancji dek laraty w n ie utw o rzo n y ch kom ponentów m oże się różnić w zależności od tego, czy odw ołanie w ystępuje w ko d zie Javy, czy na stronie JSP.
3 .1 .4 .!. Odw ołania z poziom u szab lon ów O dw ołując się do kom p o n en tó w zarząd zan y ch n a stronach JSP, k o rz y stam y z w y ra ż eń ję z y k a U E L p o d o b n ie j a k w p u n k c ie 3.1.3.3. W y raż en ia reprezen tu jące w artości m o żem y m ieszać ze staty czn y m tekstem , ja k w p o n iższy m przykładzie:
w ła śc iw o ści k o m p o n en tó w , tw o rz e n ie m w ią za ń p o m ię d z y k o m p o n en ta m i, składmjj odw ołań do e le m en tó w m apy o ra z ograniczeniam i, jak ie na w iązania n a k ła d ają zasifgj w idoczności. ggg
W p rz y p ad k u u ż y tk o w n ik a Jana K o w alsk ie g o p o p rz esła n iu strony do przeglądarki na ekranie w y św ietli się napis: Im ię: Jan Nazwisko: kowalski
3 .1 .3 .4 . Inicjalizacja przy u życiu m etod c yk lu życ ia kom ponentów Jeśli k o n ten er serw letów , n a k tó ry m w d ra ża m y n a sz ą a plikację, obsługuje adnotacji! (standard JS R 250), to m o żem y sk o rzy stać z m eto d cyklu ży cia k o m p o n en tu z a rz || d z an e g o do in ic jaliza cji w ła śc iw o śc i k o m p o n en tó w . M e to d a o z n a c z o n a adnotacją! iJPostConstruct w ykona się bezpośrednio p o utw orzeniu kom ponentu, a m etoda oznacztg? n a adnotacją @PreDestroy bezpośrednio przed usunięciem obiektu. C hcąc uprościć złożfjj n y p rzykład zaprezen to w an y n a listin g u 3.4, m o g lib y śm y p rzep isać in icjo w an ie włąj ściw ości e m a ilC o n fig u ra tio n k o m p o n en tu u tilB e a n do k o d u m e to d y i n i t O i w téll sposób p o z b y ć się k o m p o n en tu emal 1Bean. ; p u b lic c la s s U tilB e a n iraplements S e r ia liz a b le { P P ostC on struct p u b lic v o ld i n i t O { ResourceBundle rb = R esourceB u nd le.g et8 undle(" i s r p . b u n d !e . c o n fig u r a t io n .C o n fig u r a t io n ” ! ; em a ilC o n fig u ra tio n » new E m a lIC o n flg u ra tio n t ) ; emai1C o n fig u râ ti on.se tEm a il H o s t f r b .g e t S t r In g ( "emallUsername ” ) ) ;
< h :o u tp u tfe x t va lue= "Im ie: # {u s e r. firstN a m e} “> Nazw1sko: $ {u s e r. f i rstName) < /h:o utputText>
;
i Hi
//... p o z o sta łe w łaściw ości } //...p o zo sta ły k o d kla sy
} A dnotacje cyklu życia generalnie z n a jd u ją zasto so w an ie do z arz ąd z an ia k o m u n ik a « z system am i zew nętrznym i, np. u sta n aw ia n ia p o łąc ze ń do b a z danych.
K orzystam y ta z kom ponentu G U I — outputT ext, służącego do w yśw ietlania napisów. Jeśli chcem y w yśw ietlić w arto ść w ła śc iw o ści k om ponentu, m ożem y przypisać j ą do atrybutu value. R ów nież inne atrybuty (np. s ty le C la s s , t i t l e , escape) k om ponentów G U I m o żn a w ią za ć z w ła śc iw o ścia m i k o m p o n en tó w , ale m usim y p am iętać, aby za chow ać zgodność typów . G dy pom iędzy znacznikiem otw ierającym i zam ykającym elem entu um ieścim y dodatko w y tekst (w p rzy k ła d zie w y św ietlając y nazw isko), w yśw ietli się on p o tym , ja k w ar tość atrybutu va l ue zostanie ju ż o b liczo n a i w yrenderow ana. Jeśli chcem y, aby b y ł to tek st g e nerow any dynam icznie, m o żem y skorzystać z w y ra że ń standardow ego języ k a E L (p o siad ający ch separator $ z am iast #), p o n iew aż ten fragm ent k o d u je s t przetw a rzany p rzez k o n ten e r JSP ju ż p o za śro d o w isk iem JSF. P ró b a u ży cia se p arato ra # ję z y ka U E L w ty m m iejscu spow oduje p o jaw ien ie się w y jątk u w ko n ten erze stron JSP. W yrażenia reprezen tu jące w artości m o g ą służyć ró w n ież do u sta w ian ia w artości w ła ściw ości k o m p o n en tó w zarząd zan y ch , np.:
p o z w ala n a w p ro w a d z e n ie d a n y ch z p o la tek sto w eg o fo rm u la rza i p rz y p isa n ie ich w a rto ści-b e zp o śred n io do w ła śc iw o śc i a u th o rs k o m p o n en tu z a re je stro w a n eg o ja k o cu rre n tP a p e r.
T ak sam o, korzystając ze składni języ k a UEL, m ożem y rów nież w iązać elem enty stron JSP z m eto d a m i o b słu g i z d a rz e ń i akcjam i, czeg o opis znajd u je się w dalszej części rozdziału.
±±ą
Ja va S e rv e r F a ce s j E clip s e G a lileo. Tw orzenie a plika cji VI
3 .I .4 .2 . Odw ołania do kom ponentów z poziom u kodu Javy Z ałóżm y, że w k o d zie a p lik a cji chcem y skorzystać z utw orzonej instancji k o r n en tu z arz ąd z an e g o v 1 s i tBean. D la u p ro sz cz e n ia zadeklarujm y następujący kod: FacesContext c t x - F a c e s C o n te x t.g e tC u rre n tln s ta n c e O ; V is itB e a n vB:
O dw ołanie do kom ponentu v is itB e a n m ożem y zrealizow ać na kilka sposobów, a mianf w icie: ♦ w y k o rz y stu jąc z ew n ę trzn y k o n tek st serw letu (patrz rozdział 4.) i m etody zw racające m ap ę o b iek tó w z ak resu (getRequestM ap( ), getS essionM apl ), g e t A p p lic a t io n M a p O ), np.: vB = (V is itB e a n ) c tx .g e tE x te rn a lC o n te x t O . g e tS ession ü a p () . g e t ( " v i s itB e a n ") ■
U w ag a: K o rz y stają c z zew nętrznego kon tek stu (Servlet API), nie odw ołujem y się do k o m p o n e n tu p o p rz e z m ec h an iz m d e k la raty w n e g o z arząd zan ia k o m p o n e n tó w JS F , a ty lk o ten m ec h an iz m gw arantuje a utom atyczną in ic jaliza cję k o m p o n e n tu przy p ierw szy m odw ołaniu. Stąd w p ow yższym prz y k ła d zie o b iek t v i sitB e a n o z asię g u se ssio n m u si być ju ż w cześniej z ain icjo w a n y , w p rz e c iw n y m ra zie o trzy m am y p u stą referencj ę i próba o d w o ła n ia się do w ła śc iw o śc i k o m p o n e n tu z a k o ń c zy się w y ją tk ie m Nul 1Poi n te rE x c e p ti on.
♦ k o rz y stając z m ec h a n iz m u p rz etw a rza n ia w y rażeń ję z y k a U E L , w w ersji JSF ł . ł , oparteg o n a k la s ie V a ri abl eResol v e r (niezalecanej w w ersji JSF 1.2), np. vB - (V is itB e a n ) c t x .g e t A p p iic a t io n t ) . g e t V a r i ableResol ve r O «»■.r e s o lv e V a r ia b le ( c t x . " v is it B e a n " ) :
lub w w e rsji JS F 1.2, k o rz y stając z k lasy ELResolver, tj.: vB = (V is it B e a n ) c tx .g e t E L C o n te x t t ) .ge tE L Re so lv er O ,- » .g e t V a iu e ( c t x .g e t E L C o n t e x t ( ) . n u li . " v is it B e a n " ) ;
♦ korzystając z w yrażeń reprezentujących w artość, tj. w w ersji JSF ł . l , za pom ocą k la sy Val ueBi ndi ng (n iezalecan e o d w e rsji JS F 1.2), np.: vB = (V is it B e a n ) c t x . g e t A p p i i c a t i o n O ^ . c r e a t e V a l u e B i n d i n g ( " # { v i s i t B e a n } ” ) .g e t V a lu e ( c t x ) :
lub w w e rsji JS F 1.2, k o rz y sta ją c z k lasy ValueE xpression, tj.: vB = (V is itB e a n ) c t x . g e t A p p i i c a t i o n ( ) .g e t E x p r e s s i o n F a c t o r y í ) '-»-.c re a te V a lu e E x p re s s io n C c tx .g e tE L C a n te x tO . " # { v i s i t B e a n } ” , V i si tBean. c l a: w -.g e t V a lu e (c t x .g e t E L C o n t e x t O ):
♦ k o rz y stając ze spe c ja ln e j m eto d y e v a i u a t e E x p r e s s i o nGet( ) zdefiniow anej dla ob iek tu ap lik a cji (d o stę p n e o d w e rsji JS F 1.2), któ ra p o z w ala n a obliczanie w y ra ż e ń U E L p o d a n y c h w d ru g im p aram etrze, np.: vB = (V is it B e a n ) c tx .g e tA p p i i c a tio n O .e v a 1 u a t e E x p r e s s i o n G e t ( c t x .
"# {visitB e a n }” . V isitB e an .class):
3. ♦ U żyw anie JS F
1 1S
O dw ołania do kom ponentów z p o zio m u k o d u m o że m y sobie u łatw ić p o p rzez zasto sow anie specjalnej m etody statycznej, k tó ra zw rac a refe re n cję do b ieżącej instancji kom ponentu. Jeśli kom ponent nie zo stał zainicjow any, m eto d a m o że to zrobić, co za b e z p ie c z a rów nież takie ro zw iązanie p rz e d n ieb e zp ie cz eń stw em w y g e n ero w an ia w y jątku. P rzykład takiego b ezpiecznego rozw iązan ia, w z b o g acająceg o klasę V is itB e a n przedstaw iono n a p o n iższy m listingu. p u b lic c la s s V isitB e a n { p riv a te s t a t ic fin a l S trin g MANAGED_BEAN_NAME - " v is itB e a n " : p u b lic s t a t ic V isitB e a n g e tC u rre n tln s ta n c e O { FacesContext c tx = Fa cesC o n te xt.g e tC u rre n tIn s ta n c e ( ) : . re tu rn (V is itB e a n ) c t x .g e t A p p iic a t io n () . e v a lu a te E x p re s s io n G e t(c tx , " # {"+MANAGED_BEAN_NAME+") " , V is it B e a n .c la s s ) ;
} / / ...pozostały k o d w ła ściw o ści i akcji...
i O dw ołanie się do bieżącej instancji k o m p o n en tu v is itB e a n w d o w o ln y m m iejscu k o du b ędzie w ów czas w yglądać następująco: V isitB e a n vB - V is itB e a n ,g e tC u rre n tln s ta n c e t):
.5. Komponenty referowane Zazwyczaj kom ponenty tworzone dynam icznie w k o d z ie n ie s ą w id o c zn e d la śro d o w isk deweloperskich w rów nym stopniu ja k kom ponenty deklarow ane w p liku faces-config.xm l. W zw iązku z ty m nie m o g ą one b y ć w y k o rzy sty w an e do g en ero w an ia podpow iedzi, sprawdzania popraw ności składni w yrażeń E L oraz zapew nienia innych ułatw ień dla p ro gramisty, jako że środow iska dew eloperskie korzystają w yłącznie z p liku faces-config.xm l do pobrania listy kom ponentów . Specyfikacja JSF dostarcza rozw iązanie tego problem u, polegające na deklaracji w pliku fa c e s -c o n fig .x m l e le m e n tó w , np.: < descript1on>Źródlo danych JDBC z inform acjam i o w ydaw nictw ach, «re fe re n c e d -bean-name>pubi i shingH ousesD ataSource«/referenced-bean-name> < re fe re n c e d -b e a n -c la s s > ja v a x .s q l. D a ta S o u rce «/ re fe re n ce d -b e a n -cla ss>
R eferow ane w te n sposób k o m p o n en ty (ang. re fe re n c e d beans) n ie s ą w y k o rz y sty w a ne w czasie działania aplikacji, ale u ła tw ia ją p ro g ram o w a n ie w w y b ra n y ch śro d o w i skach ID E p o siad ający ch w sparcie d la JS F (np. JB oss T o o ls dla E clip se). N a przy k ład kom ponenty referow ane m o g ą zn ajd o w ać się n a liście zaw ierającej p o d p o w iad an e w yrazy p oczątkow e i w yśw ietlanej w trakcie d e fin io w a n ia p rzez u ż y tk o w n ik a w y ra żenia w jęz y k u EL. N ie stety , p latfo rm a W T P d la E clip se nie w sp ie ra kom p o n en tó w referow anych. K ró tk i opis w szy stk ich elem entów składni dek laracji k o m p o n en tó w re ferow anych z o stał p rz ed sta w io n y w tabeli 3.2.
Ja va S e rve r F a c e s i E c lip s e G a lile o . T w o rze n ie a p lik a cji '
'
Ta b ela 3 .2 . E lem enty konfiguracji referow anych kom ponentów N a zw a e le m e n tu
L ic z e b n o ś ć
O p is e le m e n tu
ał 3 . ♦ U żyw a n ie J S F
. . . K om ponenty w spierające m o g ą d efin io w ać m etody: •
Element nadrzędny: '
■
‘
'
;:
♦ obsługi zdarzeń g e n ero w a n y c h p rz e z kom ponenty U l, zam ieszczo n e n a stronie (patrz p u n k t 3.2),
d e s c rip tio n
0—*
Opis referowanego komponentu.
♦ w alidacji w arto ści k o m p o n en tó w (p a trz pun k t 3.6),
display-nam e
0 -*
Opisowa nazwa wyświetlana w narzędziach wspomagających wytwarzanie aplikacji z JSF.
♦ akcji — w p ływ ające n a n a w ig ację stro n (patrz p u n k t 3.2.1.1).
1con
0 -*
Małe i duże ikony reprezentujące referowany komponenf w narzędziach wspomagających wytwarzanie aplikacji z JSŚ’
referenced-bean-nam e
1
Unikatowa nazwa referowanego komponentu, za pomocą której może być on identyfikowany w kodzie aplikacji. |
re fe re n c e d -b e a n -c la s s
1
W pełni kwalifikowana nazwa klasy reprezentującej referowany komponent.
j
3 .1 .6 . Kom ponenty w spierające K o m p o n e n ty w s p ie ra ją c e s ą szcze g ó ln y m ty p em k o m p o n en tó w zarząd zan y ch , sipf żąc y m do w sp arc ia w y b ra n y ch stron JSP. Jeśli chodzi o sposób ich d efiniow ania, z j j j sięg, inicjalizację, odw oływ anie się p rzy uży ciu ję z y k a w yrażeń U E L czy w łaściw ośęp to m o g ą b yć one p o strz e g a n e j a k n a jz w y k le jsz e k o m p o n e n ty z arz ąd z an e . W y ró żn ij je je d n a k rola, ja k ą p e łn ią w aplikacji, p o leg a jąc a n a g ru p o w a n iu d a n y ch i m eto d nigi z b ę d n y c h do z ap ew n ien ia określonej fu n k c jo n a ln o ści, której zasięg m o że sp ro w ad z|8 się do obsługi form ularza, k ilku fo rm u la rzy n a stro n ie lub n a w et w ie lu stron. P ojęcfl ko m p o n en tu w sp ierająceg o je s t dość um o w n e, a je g o u ży cie je s t k o n se k w e n c ją pośf ję ty c h d ecyzji p rojektow ych. jjl P o p u la rn ą do n ied a w n a stra te g ią b y ło w iązan ie każdej strony JS P z d o k ład n ie jednyM kom ponentem w spierającym . Takie rozw iązanie było i je st eksploatow ane szczegóMiJ| c zęsto p rzez n a rzę d zia do graficznej e d y cji stro n w y k o rz y stu jąc y ch k o m p o n en ty J S jj W n a rzę d zia ch ty ch pro jek tan t, tw o rząc n o w y sz a b lo n stro n y , z a w ie ra ją c y form ę 8W u m ie sz cz a n ia k o m p o n en tó w graficznych, otrzym uje dod atk o w o w y g e n ero w an y i z1* re je stro w a n y kom p o n en t w spierający. N a p rz y k ła d po u tw o rz en iu w śro dow isku \etbeans nowej strony JSP za p o m o cą opcji N ew /V isualW ebJSF P age u ży tk o w n ik korzysta z o k n a ro b o czeg o , któ re p o siad a z ak ład k i zaw ie rają ce e d y to r g ra fic zn y , e d y to r te||{ stó w y w y g e n ero w an e g o k o d u stro n y JS P o ra z e d y to r te k sto w y k o d u kom ponenjg w sp ie rają ce g o stronę. K lasa k o m p o n en tu tw o rz o n a je s t auto m aty czn ie i m a ta k ą s a n jj n a zw ę ja k p o w ią za n a strona JSP. N ie je s t to je d n a k z w y k ła k la sa JavaB ean, lecz klagi d zie d zic zą ca p o klasie AbstractPageBean, z apew niającej m eto d y o bsługi c y k lu życijj stro n y oraz w iele u ż y teczn y ch funkcji. W a d ą tej k onkretnej tech n o lo g ii — S un Rayjjj ja k i w ie lu p o d o b n y ch ro zw iązań — s ą z n ac zn e z m ia n y w sto su n k u do standardow g| im p le m e n tac ji JS F lub n a w et całk o w ite z astą p ie n ie jej w ła sn ą . S p e c y fic zn e rozw ijj z a n ia po w o d u ją, że tego typu technologie b a rd zo słabo in te g ru ją się z in n y m i im p l|| m e n ta c ja m i JS F , b ib lio tek a m i k o m p o n e n tó w , te c h n o lo g ia m i sz a b lo n ó w czy narz|jj dziam i dew eloperskim i. P rzy korzystaniu z JSF Facet w E clipse nie istnieje ten próbie® gdyż środow isko to nie ingeruje w strategię projektow ania aplikacji, jednocześnie zape|jj niąjąc narzędzia do w izualnego tw orzenia stron JSP z kom ponentam i JSF. Je st to mnig| w y g o d n e, lecz bardziej elastyczne ro z w iąz an ie n iż N etB ean s i Sun R ave.
W łaściw ości k om ponentu w sp ie rają ce g o m o g ą być p o w ią za n e z: ♦ instancjam i k o m p o n en tó w U L ♦ w artościam i w ła śc iw o ści k o m p o n en tó w U l, ♦ instancjam i k o n w erteró w , k las n a słu c h u ją c y c h i w a lid a to ró w (sz c z e g ó ły w dalszej części rozdziału). D efiniow anie m etod oraz w iązanie przez w łaściw ości zostało ju ż zaprezentow ane p rzy tw orzeniu pierw szej aplikacji, w ro z d ziale 1.3.7, „D efiniow anie kom p o n en tu w sp ie rająceg o ” . W tym p u n k cie w ięcej m ie jsc a pośw ięcono różnicy p om iędzy w yżej w y m ienionym i w iązaniam i. W iązanie przez w artość odbyw a się poprzez w ykorzystanie atrybutu value kom ponentu U l, np. < h :1 n p u tle x t re q u ire d = "tru e n va lu e = M# {a u th e n tic a tio n B e a n .password}" />. Jest to w ygodne rozw iązanie, jak o że u ż y tk o w n ik w kodzie k o m p o n en tu w spierającego m usi w y łącznie zad ek laro w ać z m ie n n ą i m etody zapew niające dostęp do niej, a m ia now icie: p riv a t e S trin g password; p u b lic S trin g getPasswordC) {re t u r n passw ord;} p u b lic v o id s e tP a ssw o rd (S trin g password) {th is.p a ssw o rd = passw ord;}
Definiując w łaściw ości w iązane przez w artość, m ożem y korzystać z typów prym ityw nych, klas opak o w u jący ch ty p y p ry m ity w n e, klasy S tr in g czy innych typów o b iek to w ych, o ile aplikacja p o sia d a k o n w e rtery do klasy S t r i ng d la ty ch typów . N a p rzy k ład w łaściw o ścią m oże być typ ja v a . u t i 1 . Date, jeśli aplikacja m a dostęp do k o n w ertera klasy, któ ry będzie p o z w ala ł n a k onw ersję m iędzy typam i Date i S trin g . W ięcej in form acji o konw erterach m ożna znaleźć w punkcie 3.5, „K onw ersja” . Inform acje o tym , które typy są akceptow alne dla których kom ponentów U l, m ożna znaleźć w dokum entacji Java E E , na stronie h ttp ://ja va .sim .eo m /ja va ee/5 /d o cs/tu to ria l/d o c/b n a ty.h tm l. W p rzy p ad k u w ią za n ia w ła śc iw o ści k om ponentów w sp ierający ch z in stancjam i k o m p onentów U l ich typy m u sz ą b y ć zgodne. W iązanie o dbyw a się przy' u ży ciu atrybutu bi ndi ng, ja k w po n iższy m p rz y k ła d zie kom p o n en tu w yśw ietlającego tekst: < h :o u tp u tT e xt re n d e re d * "fa lse " binding= "# {m yB ea n.info}"/>
K om ponent w sp ierający myBean m usi z aw ierać w łaściw ość w sk az y w a n ą p rzez w iąza nie i m etody d o stęp o w e do n ie j: p riv a t e U lO utput in fo = n u ll ; p u b lic UlO utput g e t ln f o O { re tu rn t h i s . i n f o : } p u b lic v o id s e tln fo tU IO u tp u t In fo ) { t h i s . i n f o = i n f o ; }
a i,U :a i 3. ♦ U żyw anie JS F
Z ałóżm y, że zadaniem k o m p o n en tu U l je s t w y św ietlan ie inform acji n a w yra; c z e n ie u ż y tk o w n ik a p o k lik n ię c iu p rz y c isk u ... (w ie lo k ro p e k ). P o n ie w a ż w k o dzijjf stro n y w a rto ść a try b u tu rendered k o m p o n e n tu je s t u sta w io n a n a f a l s e , p rz y pienyłj! szym w y św ietlen iu strony k o m p o n en t nie p o jaw i się n a ekranie przeg ląd ark i. A by gfljjl w y św ietlić, np. p o p rzez klik n ięcie d ow olnego p rz y cisk u , w k o d z ie akcji o b słu g u jąciil| p rz y c isk n ależy zm ienić w artość atrybutu 1n f o , np.: p u b lic S t rin g m o re ln fo O j in fo .setV a lu e C . . .tu zawartość in fo , k tó rą można dynam icznie z m ie n ia ć ...“ ) : in fo .s e tR e n d e re d (tru e ): re tu rn nul 1:
}
,
Z alety w ią za ń z uży ciem w artości: ♦ ♦
♦
au to r strony m a w ię k sz ą kon tro lę nad k o m p o n en ta m i U l, k o m p o n en t w sp ierający je s t n iezależn y o d klas k o m p o n en tó w U l zd efin io w an y ch w JS F A P I, co u m o żliw ia w ię k sz ą separację w a rstw y prezen tacji od m odelu, auto m aty czn a k o n w ersja danych o p arta n a typie w ła śc iw o ści k o m ponentu.
Z alety w iązań z uży ciem instancji:
- -
znaczników akcji w yrażeniam i o postaci i{w y r a że n ie ), um ożliw iającym i odczyń w ła ściw ości obiektów dostępnych' na stronach JSP. P o niew aż przy opracow yw aniu E L dokonano wielu zapożyczeń z języków JavaScript (standardu ECMAScript) oraz X Path, program iści znający te technologie nie pow inni m ieć trudności z jego opanow aniem . P oczątkow o na potrzeby JSF opracow ano w ersję jęz y k a E L posiadającą o dm ienny prefiks # oraz um ożliw iającą dodatkow o zapis dan y ch i w yw oływ anie m etod n a rzecz obiektów dostępnych ze strony. W specyfikacji Java EE 5 oba języki p o łączo n e z o stały w jeden zunifikowany język U nified E xpression L anguage (Umfied EL), w którym zachow ano odm ienne prefiksy. N otacja i f y r a ż e n i e } oznacza wyrażenia w artościow ane natychm iastow o i jest w y k o rzy sty w an a' w JS P do o dczytu w łaściw ości o biektów . N o tacja #{w yrażenie} oznacza w yrażenia w artościow ane z odroczeniem i je s t w y k o rzystyw ana w JSF do odczytu i ustaw iania w łaściw ości obiektów oraz w y w o ły w an ia m etod n a rzecz obiektów.
jj§
'l i '-W jjj Jjf IM ijjj
W a r t o ś c io w a n ie n a t y c h m ia s t o w e (ang. im m édiate évaluation) oznacza, że w arto ść
w yrażenia ${} je st ustalana przez k o n ten e r JS P w czasie przetw arzania strony, po czym je s t konw ertow ana i dołączana w zależności od lokalizacji w yrażenia do stru m ien ia w yjściow ego (gdy w yrażenie znajduje się w tekście dokum entu) lub k lasy o b sługującej znacznik (gdy w yrażenie definiuje w artość atrybutu znacznika).
lig |j j
W a rto śc io w a n ie z o d ro c ze n ie m (ang. d e fe rre d évaluation) oznacza, że w yrażenie je s t zachow ane w niezm ienionej p ostaci p rz ez k ontener serw letów p rz ez cały czas p rzetw arzania strony, a jeg o w artość m oże być obliczana kilkakrotnie w ró żn y ch fa zach cyklu przetw arzania strony, zarów no do odczytu, ja k i zapisu. Jeśli u ż y je m y na p rzykład następującego pola do w p row adzania danych:
♦ k o m p o n en t w sp ierający m o że p ro g ram o w o m o d y fik o w ać a try b u tu k o m ponentu;» dynam iczn ie ro zw ijać i zw ijać drzew o kom p o n en tó w , ♦
1 19
k o m p o n en t w sp ierający m o że p ro g ram o w o tw orzyć instancje k o m p o n en tó w U l'fj zależnie od potrzeb. =3|
W iększość kom ponentów w spierających je st deklarow ana w zasięgu żądania (request® ale w p ew n y ch p rzypadkach zasadne m oże być zadeklarow anie k om ponentu w zasięgaj sesji lub aplikacji. N ależy w ów czas pam iętać, że z kom ponentu m oże jednocześnie korzfjj stać w iele w ą tk ó w i m oże zajść kon ieczn o ść sy n ch ro n izacji d o stęp u do w ła śc iw o śc i.;^
to p rzy pierw szym żądaniu do strony zaw ierającej ten znacznik wartość zo stanie o b li czona w fazie renderow ania (patrz ro zd ział 4.). Podczas tej fazy w artość b ęd zie o d czytana z w łaściw ości kom ponentu i u ży ta do w y g en ero w an ia strony H T M L zaw ie rającej fo rm u larz (tak sam o ja k w p rz y p a d k u w a rto śc io w a n ia naty ch m iasto w eg o ). G dy jed n a k użytkow nik w ypełni form ularz i prześle go p onow nie do tej sam ej strony (tzw. p o stb a c k), w yrażenie m oże być w arto ścio w an e w fazach: odczytyw ania w a rto ści z form ularza, w eryfikacji p opraw ności k o d u i aktualizacji w artości k o m p o n en tu (zapisu w kom ponencie), a naw et p ono w n eg o re n d ero w a n ia strony.
W p o d ro zd ziale 1.2.4, w ro z w aż a n ia ch n a tem a t arch itek tu ry a p lik a cji JS F, przedstagj w ionę zostały p opularne strategie u życia k om ponentów w spierających w architekUirajj ap likacji JSF. O becnie je d n a k pow o li o dchodzi się o d strategii ic h w y k o rz y sty w a n i! w ogóle, zastępując j e ro z p ro szo n y m i w k o d z ie a p lik a cji a d n o ta c ja m i i zastosowali n iem k o m p o n en tó w E JB , czego dow odam i m o g ą b y ć k sz tałt p o w stającej implemeńjjj tacji JS F 2.0 czy zysk u jący d u ż ą p o p u larn o ść szkielet Seam .
3 .1 .7 . Język wyrażeń UEL Ję z y k w y ra że ń U nified E xp ressio n L a n g u a g e stanow i ro zw in ięcie k o n c ep c ji ję z y ijj E xp ressio n L a n g u a g e, u d o stę p n io n e g o d la tech n o lo g ii szab lo n ó w JS P o d w ersji 2.01 Ję z y k E L p o w sta ł w trak cie p ra c n a d ro z sze rz en iem fu n k c jo n a ln o ści podstawowegójj z b io ru z n ac zn ik ó w JS P w p o sta c i b ib lio te k i z n a c z n ik ó w Ja v a S ta n d ard T ag Libra¡Jj (JS T L ). M o ty w a c ją d la tw ó rc ó w ję z y k a E L b y ła chęć u p ro sz cz e n ia k o d u w arstw f| p re ze n ta c ji aplikacji W W W p o p rz ez z astąp ien ie k o d u elem en tó w skry p to w y ch o ra j
W yrażenia w artościowane z odroczeniem m o g ą być stosow ane wyłącznie do param etryzow ania kom ponentów JSF; próba um ieszczenia ich poza znacznikiem reprezentującym k om ponent JS F zakończy się w ygenerow aniem w yjątku.
ñ Wskazówka
G e n e ra ln ie w sp e c yfik a cji J S F 1 .2 z a le c a s ię k o rzy s ta n ie na stro n a c h s z a b lo n ó w JS P w yłą c zn ie z w a rto śc io w a n ia z o d ro c z e n ie m . W n ie k tó rych sytu a cja c h m o gą być je d n a k p rzyd a tn e k la sy c zn e zn a c zn ik i JS P i J S T L . P rzykładem m oże b yć w yk o rzy s ta n ie zn a c zn ik a fo re a c h z J S T L , k tó ry nie m a o d p o w ie d n ik a w sta n d a rd o w e j im p le m e n ta cji J S F (c h o ć n ie k tó re im p le m e n ta cje p o s ia d a ją zb liżo n e ro zw ią za n ia , np, A p a c h e M y F a ce s m a k o m p o n e n t d a t a L i s t ) .
Ja va S e rv e r F a c e s i E c lip s e G a lile o. T w o rze n ie a plika cji
12 0
zia ł 3. ♦ U żyw a n ie JS F
żenie w naw iasie nie je s t objęte cudzy sło w am i ani apostrofam i, zostanie w yznaczone w pierw szej kolejności (potraktow ane jak o podw yrażenie), po czym jego w artość będzie u ż y ta ja k o n a zw a w ła śc iw o ści b ą d ź klu cz m ap y (to tak, ja k b y użyć niepopraw nego składniow o.zagnieżdżenia # {p re f[# {m s g . preferences . n a m e }]}). Co więcej, sep a ra to ry m o że m y z ag n ież d ż ać , np. # { u t i 1B e a n [1ema i 1C o n fig u râ t i on ' ] . email Host}.
3 .1 .7 .1 . S kładnia w yrażeń Język U E L m a bardzo elastyczną składnię, która um ożliw ia dostęp do w łaściw ości i m f | tod kom ponentów , obliczanie w yrażeń m atem atycznych, przetw arzanie łańcuchów ¿ J g kow ych, sp raw d zan ie w a ru n k ó w czy o b lic z an ie w y ra ż e ń logicznych. O p erato ry j ę z p k a i przykłady w yrażeń złożonych, zbudow anych z a ich p o m o cą , p rz ed sta w io n e zostajj w ta b e li 3.3.
Podobnie ja k w języku JavaScript, zarów no apostrofy, ja k i cudzysłow y m ogą być w yko rzystyw ane zam iennie. W dokum entach opartych n a X M L oraz n a skonach JS P atrybuty z n ac zn ik ó w i w y ra ż e n ia ję z y k a U E L m u s z ą w y k o rz y sty w a ć ró ż n e separatory, np.:
T a b e la 3 .3 . O peratory ję z y k a UEL i przykłady ich w y korzy stania O p e ra to ry
P rz y k ła d y
O p is
# {v i s itB e a n . c u rre n tP a p e r}
Dostęp do właściwości i metod.
< = > < h :in p u tle x t v a lu e = '# {u s e r["n a m e "]} '/ > .
j
N a k oniec kró tk o o literałach, ja k o że ję z y k U E L o p iera się w ty m punkcie n a ro z w iązan iach zn an y ch z Javy, tj. literały rep rezentujące łiczby całkow ite, liczby zm ien n o przecinkow e, referencję p u s tą ( n u li ) oraz w a rto ści typu logicznego (tru e i f a l se) s ą in terp reto w an e id en ty czn ie j a k w Javie. Ł ań c u ch y znakow e m o g ą być definiow ane w cudzysłow ie i apostrofach. Ję z y k U E L w sp ie ra tzw . antoboxing, czyli au tom atycz n ą k onw ersję p o m ię d z y ty p em p ry m ity w n y m i je g o odpo w ied n ik iem obiektow ym np. bool ean = Bool ean, je d n a k n a le ż y b y ć o stro ż n y m p rz y k o rz y sta n iu z tej w ła śc iw o ści w różnych im p lem en tacjach JSF.
# {d e t a i1sL i s t . c l e a r} # {co n fM a p [ ' u p l oadPath ’ ] }
[]
Dostęp do właściwości oraz elementów tablic, map i
#{m yArray[51)
o
# {(u se r.a ge ~ 1 8 )> 0 }
Tworzenie podwyrażeń i kontrola kolejności wykonania operacji.
+, - , *, /, *
#{1235}
Operatory arytmetyczne w kolejności: dodawania, pyl odejmowania, mnożenia, dzielenia, reszty z dzielenia i i i całkowitego. Dwa ostatnie m ają słowne odpowiednikiS .{¡¡f dl v i mod.
#{63 d iv 5} #{-12+7} — , ! - , >, <,
> ’
<
# {u s e r . age>18} # {u s e r.a g e g t 18} # {p a p e r.re je c te d ! - t ru e } # {n o t p a p e r. re je c te d ) # {p a p e r.re je c te d ! 1 ( p a p e r .f i lenam e==''1 }
empty
# { ! empty param .1astName} #{empty confMapE’ p a th ' ] } } #{empty confMap}
?;
#{(u ser.a ge> 1 8 )?'w e lco m e' ' s o rry '}
Operatory relacyjne w kolejności (w nawiasach odpowiedniki słowne): równości (eq), nierówności (ne), większości (g t ), mniejszości ( I t ) , większy lub równy (ge ), mniejszy lub równy (le ).
j
1 iii #
Operatory logiczne w kolejności: negacji (nor), koniunkcji (and) i alternatywy (or).
j
Sprawdza, czy operand jest pusty. Zwraca wartość
\
3.1.7.2. Zm ienne predefiniow ane Z m ie n n e p re d e fin io w a n e (ang. im plicit variables) s ą specjalnym i identyfikatoram i ję z y k a U E L , które w sk a z u ją specyficzne obiekty zainicjow ane w aplikacji W W W . N a p rzy k ład do tej po ry , o dw ołując się za p o m o cą w yrażenia E L do zarejestrow anego kom ponentu v Is itB e a n , używ aliśm y w yrażenia # {v 1 s itB e a n.cu rre n tP a p e r}. W iedząc, że ten k o m p o n en t je s t p rz ec h o w y w a n y w m apie atry b u tó w o zasięgu sesji, m ożem y użyć alternatyw nego w y ra ż e n ia # {s e s s 1 o n S c o p e ,v is itB e a n .c u rre n tP a p e r}, które posłu g u je się z m ie n n ą p re d efin io w an ą sessIonScope, w sk a z u ją c ą n a tę m apę. D zięki tem u JSF przeszukuje w yłącznie m apę zasięgu sesji w celu odnalezienia kom ponenta vis itB e a n .
i
t ru e , gdy referencja wskazuje na nul 1, pusty łańcuch :i
(""), tablicę zerowej długości oraz pustą kolekcję lub ( i mapę. Instrukcja warunkowa. Jeśli warunek w nawiasach jesta spełniony, to wartością całego wyrażenia jest wyrażenie', po znaku ?, w przeciwnym wypadku wyrażenie po znaku '
Uwaga
P rio ry tet i łąc zn o ść o p e ra to ró w s ą tak ie sam e j a k w p rzy p ad k u o peratorów Javj w arto pam iętać o k ilku regułach pozw alających n a efektyw ne użycie operatorów w \ żeniach. S tosując o p e ra to r p o ró w n a n ia d la o b iek tó w , trze b a m ieć św iadom ość, że dla opetąnfcj z lew ej stro n y w y w o ły w a n a je s t m e to d a e q u a ł s ( ) . P o ró w n an ie obiektów typów zded ftn io w an y ch p rz e z u ż y tk o w n ik a m o że w sp o só b zgodny z in te n c ją dewelopera m ag ać p rz ed e fm io w a n ia tej m etody.
Vz Wskazówka
U ż y cie n a w iasó w k la m ro w y c h w p rz y p a d k u d o stę p u do w łaściw ości obiektów jap rów now ażne u życiu operatora kropki (# {a .b } < = > # ( a [ ' b ’ ] } < = > # { a [ " b " ] } j , alej^b ro z w iąz an ie m b a rd ziej e la sty cz n y m . M o ż e m y j e sto so w ać , g d y c h ce m y dynamiczffll w y zn aczy ć n a z w ę w ła śc iw o śc i np. # { p r e f [ m s g . p r e f e r e n c e s . n a m e ]}. Poniew aż w y j
W przypadku o blicza nia w yrażeń ję zy k a U E L za w iera ją cych zm ien n e, np. #{vis1tB ean. w -c u rre n tP a p e r} , p rz e tw a rza n ie ro zp o c zy n a s ię od u s ta le n ia o b ie k tu w s k a zy w a n e g o p rz e z zm ie n n ą , c zyli v is 1 tB e a n . J e ś li zm ie n n a n ie je s t zm ie n n ą p re d e fin io w a n ą , to n a s tę p u je p rz e s z u k iw a n ie m ap a try b u tó w z n a jd u ją c y c h s ię w z a s ię g a c h k o le jn o : ż ą d a n ia , s e s ji i a p lik a c ji. J e ś li w ża d n y m z n ic h n ie z n a jd u je s ię a try b u t 0 te j n a z w ie , n a s tę p u je s p ra w d z e n ie , c z y is tn ie je k o m p o n e n t z a d e k la ro w a n y pod ta k ą n a zw ą w pliku fa ce s-co rrfig .xm l. J e ś li z o s ta n ie ta m z n a le z io n a je g o d e k la ra c ja , to j e s t on w tym m o m e n c ie t w o rz o n y za p o m o c ą d o m y ś ln e g o k o n s tru k to ra 1 u m ie s z c z a n y w m apie o o d p o w ie d n im za s ię g u (c h yb a że za d e k la ro w a n o go w za się gu none).
O d w o ływ a n ie s ię d o z m ie n n y c h z w yk o rzy s ta n ie m za s ię g u n p . sessionScope po zw a la o g ra n ic z y ć z a s ię g p rz e s z u k iw a n ia o b ie k tu w s k a zy w a n e g o p rz e z z m ie n n ą , ale s to s u ją c to ro zw ią za n ie , n a le ż y p a m ię ta ć , ż e re fe ro w a n y k o m p o n e n t p o w in ie n być ju ż za in ic jo w a n y .
J g ji ¡S R ' 122
Ja va S e rv e r F a ce s i E c lip s e G a lile o , iw o rze n ie apHkaoii
gp/oział 3. ♦ U żyw a n ie JS F
w'f l
O prócz zm iennych p re d efin io w an y c h d la m ap a try b u tó w w p o szczeg ó ln y ch z a s ię g a j m o żem y rów nież skorzystać z w ygo d n eg o d o stę p u do typ o w y ch elem entów potrzeR n y ch d ew eloperom aplik acji W W W , czyli n a g łó w k ó w żądań H T T P, parametrów przesy łan y ch w żądaniach, ciasteczek, etc. W p rz y p a d k u standardow ych aplikacji Jsp je d n a k n ie trzeba b e zpośrednio k o rz y stać z ty c h z m ie n n y ch w celach in n y ch niż de. bugow anie b łęd ó w — p rz etw a rza n ie m ż ąd a ń n a p o z io m ie pro to k o łu H T T P zajmuje się JS F, autom atycznie aktualizując stan a p lik a c ji i do starczając u ż y tk o w n ik o w i inter fejs n a wyższymi p o z io m ie abstrakcji. W tab e li 3.4 p rzed staw io n e zo stały zmienne pred efin io w an e w y stęp u jące w w y ra że n iac h ję z y k a JS P 2.0 E L (S) i JS F L E E (#y C z arn y k w a d rac ik w drugiej k o lu m n ie o z n a c z a d o stę p n o ść danej zm iennej w odpo w iedniej w ersji języ k a. T a b e la 3 ,4 . Z m ienne predefiniow ane dostępne w językach w yrażeń EL($) i UEL (#) Z m ie n n a p re d e fin io w a n a
$/#
P rz y k ła d o w e u ż y c ie
O p is
a p p lica tlo n S co p e
■/■
# {a p p l1c a ti onScope.myBean}
M apa obiektów zakresu appl icam on.
coo kie
a/a
# {cook ie.m yC ookie}
M apa wartości ciasteczek dla bieżącego żądania HTTP.
faces Context
□/a
header
headerValues
■/a
# {fa ce s C o n te xt . .messages}
";
Bieżąca instancja FacesContext..
. Za p o m oćąjęzyka U EL m ożna również odwoływać się do m etod zdefiniowanych w kom tponenfach zarządzanych. W y ra ż e n ia o d w o łu jące się do m e to d (ang. m e thod-binding expression) p o z w a la ją n a przypisanie m etod obsługujących zdarzenia lub w eryfikują cych dane do kom ponentu osadzonego na stronie. Przykładem m oże b y ć obsługa a k cji zw iązanej z zatw ierdzeniem form ularza przyciskiem :
K liknięcie przy cisk u spow oduje przesłanie żądania i uruchom ienie w odpow iedniej fazie przetw arzania m etody r e g i s t e r ! ). Reguły składniowe w yrażeń odwołujących się do m etod ró ż n ią się od odw ołań do w artości tylko ostatnim elem entem w y rażen ia — nie je s t to nazw a w łaściw ości, lecz nazw a m etody bez argum entów w yw ołania, niezależ nie od tego, czy w ystępują one w deklaracji metody, czy nie. Z a dostarczenie argum entów w yw ołania i przetw arzan ie w artości zw racanych odpow iada k om ponent, w którego znaczniku przy p isan o m etodę do atrybutu. Przykładem niech będzie obsługa zd arze nia opisanego w yżej, ale przy użyciu m etody nasłuchującej zdarzenie, k tó rą p rz y p i sujem y do atry b u tu a c t i o n l i s t e n e r (zam iast a c tio n , jak pow yżej), tj.:
Mapa wartości nagłówków bieżącej żądania HTTP, zwracająca pojedyn wartości.
M etody nasłu ch u jące zdarzenia akcji m u sz ą być zadeklarow ane z argum entem w y w ołania w p o sta ci referencji do obiektu ActionEvent, która w m om encie w yw ołania funkcji regi s t e r (Acti o n tv e n t) jest przekazyw ana z kodu kom ponentu wyw ołującego.
#{h eaderValues [ 'A c c e p t-E n c o d in g ' ] [ 2 ] }
M apa wartości nagłówków bieżącego żądania PITTP, zwracająca tablice wartości.
W dalszej części rozdziału opisane są zastosowania wyrażeń do obsługi zdarzeń w m eto dach akcji i m eto d a ch nasłuchujących zdarzenia oraz w eryfikujących dane.
# { in itP a ra m .c o u n te r}
M apa parametrów początkowych aplikacji WWW definiowanych w deskryptorze web.xml.
Mapa parametrów bieżącego ządama HTTP zwracająca tablice wartości
“
reauestScope
m/m
# { req uestS cope . p r e f s }
Mapa obiektów zakresu request.
sesslonScope
m/m
#{sessionScope .v is itB e a n }
M apa obiektów zakresu se ssio n.
v i ew
□/a
# {v 1 e w .re n d e rK itld }
Bieżący widok.
$ {p a g e C o n te xt. re q u e st}
Obiekt kontekstowy strony, pozwalający' na dostęp do predefiniowanych na t stronach JSP obiektów re q u e st. response, sessio n i s e r v le t
m/a
3„i.7.3. Wyrażenia odwołujące się do metod
# {h e a d e r['A c c e p t1] }
a /a
pageScope
i2 3
initP aram
pageContext
'
$ {pageScope.myBean}
Mapa obiektów zakresu page.
3.1.8. Konfiguracja komponentów i innych zasobów K om ponenty zarządzane, zasoby i ustaw ienia konfiguracyjne aplikacji zdefiniow ane są w p lik ach kon fig u racy jn y ch fa ce s-c o n fig .x m l oraz web.xm l. Z a p o m o c ą elem entów ję z y k a X M L m o że m y w nim definiow ać reguły naw igacji, inicjalizow ać kom ponenty zarząd zan e, re je stro w a ć w ła sn e k o m p o n en ty U l, klasy w a lid a to ró w i k o n fig u ro w ać w iele innych asp ek tó w aplikacji JSF. W praw dzie w szystkie te ustaw ienia m ożna ró w nież konfig u ro w ać w kodzie aplikacji, ale ich lokalizacja i centralizacja w p liku X M L po zw ala n a le p s z ą k o n tro lę aplikacji. B io rąc p o d u w agę narzędzia w sp arcia dla ję z y ka X M L , w ty m sp e c ja liz o w a n e e d ytory d la k onfiguracji JS F w E clipse, k orzystanie z p lik u fa c e s-c o n fig .x m l je s t w ygodnym rozw iązaniem . W tabeli 3.5 przedstaw iono elem enty bezpośrednio podrzędne w zględem elem entu głów nego < fa c e s -c o n fig > w drzew ie danych zapisanym w dokum encie fa ce s-c o n fig .xm l. N ie w szy stk ie u sta w ie n ia k o n fig u rac ji JS F m u sz ą znajdow ać się w je d n y m pliku, m ożliw e je s t u m ieszczenie ich w kilku plikach, co należy jaw nie zadeklarow ać w pliku deskryptora w d ro ż eń aplikacji w eb.xm l.
3 . ♦ U żyw a n ie J SF
Ja v a S e rv e r F a c e s i E c lip s e G a lile o . T w o rze n ie aplikac
124
JS F p rz esz u k u je p lik i k o n fig u ra c y jn e w n a stę p u ją c y m p o rz ąd k u :
label3
;,5 . E lem enty konfiguracji aplikacji JSF'
Nazwa e le m e n tu
1. P lik i nazw ane M E T A -IN F /fa c e s-ć o n fig .x m ł z n a jd u ją c e się w śc ież ce zasobćr (w łączając p lik i b ib lio tek J A R i W A R d o łą c z o n y c h do w d ra ża n e g o p ro je k t
125
L ic z e b n o ś ć
' O p is e le m e n tu
Element nadrzędny: < fa c e s -c o n fig > Cion
2. P liki w y szc ze g ó ln io n e w p a ra m e trz e ja v a x . races . CONFIG_FILES p lik u
0
Definiuje różne pojedyncze obiekty (singletony) wykorzystywane przez aplikację. M ogą to być deklaracje klas dostarczających implementacje mechanizmów JSF (zarządzania widokiem, stanem komponentów itp.), pakiety komunikatów czy deklaracje zasobów. Szerszy opis znajduje się w rozdziale 4. Definiuje komponenty zarządzane.
- *
d e sk ry p to ra w d ro ż eń w eb .xm l. 3 . P lik w lo k aliza cji W E B -IN F /fa c e s-c o n fig .x m l (d o m y śln y ). P o rz ą d ek je s t istotny, gdyż je ś li m a m y k ilk a p lik ó w , w k tó ry ch z d efin io w an o róża£ w a rto ści d la te g o sam ego e le m e n tu (n p . < v ie w -h a n d le r> ), to w u p rzyw ilejow anej ¡ ¿ r z ycji s ą p lik i w czy ty w a n e ja k o o sta tn ie , ja k o że n a d p is u ją o n e p o p rz ed n ie w ai fo sci. '
referenced-bean io n -r u le
P oniżej z am ieszczo n o p rz y k ła d u s ta w ie ń p lik u d e sk ry p to ra w d ro ż eń w e b .x m l aplJal cji ISRP:
Definiuje reguły decyzyjne mechanizmu zarządzania nawigacją.
nt
Rejestruje klasy komponentów Ul. Typy komponentów m uszą być unikatowe w całej aplikacji (patrz rozdział 5.).
k it
Definiuje zestaw rendererów. Domyślna wartość R e n d e rK ItF a c to ry. DEFAULT_RENDER_KIT to HTML Basic (patrz rozdział 4.).
javax. faces .CONFIG_FlLES /W EB-INF/beans. xml , /W EB -IN F/navigation.xm l
-bean
*
0_-
or
Podział n a pliki zaw ierające w y łącznie kom ponenty zarządzane, reguły naw igacji i m * j e s t k o rz y stn y ze w z g lę d u n a p rz e jrz y s to ś ć . W k a ż d y m z p lik ó w k o n fig u rac y w s z y s tk ie elem enty m u sz ą z n a jd o w a ć się w e w n ą trz e le m en tu głów nego, tj.:
-
0..*
’
Dostarcza m echanizm modyfikowania standardowego cyklu przetwarzania żądań (patrz rozdział 4.). Dostarcza mechanizm definiowania różnych fabryk obiektów dla implementacji JSF (patrz rozdział 4.). Element pozwalający na wprowadzanie rozszerzeń specyficznych dla implementacji JSF.
5?
Specyfikacja JSF określa cztery param etry inicjalizacyjne, które definiuje się przy użyciu elem entu . O bok opisanego w cześniej param etru ja v a x .fa c e s .C0NFIG_ ’-»-FILES s ą to ja v a x . fa ce s . DEFAULT_SUFFIX, ja v a x . fa c e s . LIFECYCLE_ID o ra z ja v a x .
"
A b y u p ro ś c ić przykłady, w e w s zy s tk ic h o d n ie sie n ia c h d o pliku k o n fig u ra c ji w książce j używ ana je s t nazw a faces-config.xm i, ja k k o lw ie k m oże o n a o d n o sić się do w szystkich p lik ó w k o n fig u ra c yjn y c h z a w ie ra ją c y c h e le m e n t < fa c e s -c o n fig > . j
3 .1 .8 .1 . Elem enty ko nfigu ra cji J S F w d e sk ryp to rze w drożeń A p lik acje W W W p o z w a la ją n a d e fin io w a n ie p a ram etró w m ic jaliza cy jn y c h w p d e sk ry p to ra w d ro ż e ń w e b .x m l p rz y u ż y c iu n a stęp u jąc y c h elem entów :
«»faces .STATE_SAVING_METHOD. j
P a ra m e tr ja v a x . fa c e s . DEFAULT_SUFFIX d e fin iu je p rz y ro s te k , który w y k o rz y sty w a n y je st w trakcie ład o w an ia stron w id o k u p rz ez o b ie k t Vi ewHandl er. D o m y śln ą w a rto śc ią p a ram etru je s t js p , w ię c je ś li w a p lik a c ji w y k o rz y sty w a n e s ą stro n y JS P to n ie m a potrzeb y go przed efin io w y w ać. Jeśli stro n y w id o k u b ę d ą uży w ały n a p rz y k ła d a lte r natyw nej dla JSP technologii szablonów Facelets, w ów czas należy um ieścić deklarację innego fo rm atu d la p lik ó w z aw ierający ch stro n y w id o k u , np.: «context-param> javax.fa c e s.DEFAULT_SUFFIX«/param-name> «pa ram-v al ue> . xhtml«/param-val ue> «/context-param>
♦ — d e fin iu je p a ram etr in ic jaliza cy jn y d o stęp n y d la całej
aplikacji, ♦ < in it-p a r a m > - - definiuje p a ra m e tr in ic jaliza cy jn y d ostępny ty lk o d la serw
b ą d ź filtra.
0
o n fig on
Wskazówka
Rejestruje klasy konwerterów, których identyfikatory muszą być unikatowe w całej aplikacji (patrz rozdział 5.).
factory
< / - - p o w y ż e j d ek la ra cja typu o ra z p r z e s tr z e n ie n a zw i sc h e m a t dartych, któ re u ła tw ią p r a c e na ized zio rt
w sp o m a g a ja cym —> < / — tu um ieszczam y elem en ty
Rejestruje klasy walidatorów, których identyfikatory m uszą być unikatowe w całej aplikacji (patrz rozdział 5.).
er le
< fa c e s -c o n fig v e rs io n = "1 .2 " xm lns="h t t p :/ / ja v a sun.com /xm l/ns/javaee" xml n s : x i= " h t t p :/ /www.w3. o rg/2 0 0 1 /X ïn clude" xmlns : x s i= " h t t p : //www.w3. org/2001/XMtSchema-in sta n c e " xsi:sch em alo cat1 on = "h t t p :/ / ja v a . sun.com /xm l/ns/javaee h ttp :/ / ja v a .s u n .c o m / x m l/ n s / ja v a e e / w e b -fa c e s c o n fig _ l_ 2 .x s d "
Definiuje komponenty referowane.
ŻT
P aram etr ja v a x .fa c e s . LIFECYCLE_ID ok reśla id en ty fik ato r obiektu L ife c y c le , o d p o w iedzialnego za realizację cyklu p rz etw a rza n ia żądania. D o m y śln ą w a rto ścią id e n ty fikatora je s t D e fa u lt, k tó ry w sk azu je n a sta n d a rd o w y o b iek t cyklu p rz etw a rza n ia w y generow any p rz y u ż y c iu k lasy fabrycznej L i fe c y c l e F a cto ry (patrz ro z d ział 4.).
Ja va S e rv e r F a ca s i E c lip s e G a lile o . T w o rze n ie aplíkacj
P aram etr ja v a x . faces . STATE_SAVING_METHOD p o z w a la n a ustaw ienie m iejsca prze' w yw ania stanu w idoku. M ożliw ym i w artościam i s ą s e rve r (dom yślna) i c lie n t, j chow yw anie stanu po stro n ie serw era c h ara k te ry zu je się w ięk szy m -zu ży ciem pan serw era. Co w ięcej, je s t ono m niej skalo w aln e d la a p likacji'uruchom ionej n a kia; (dane sesji m u sz ą być rep lik o w an e). P rz e ch o w y w an ie stanu po stronie k lienta py duje m niejsze obciążenie p am ięci serw era, w ię k sz ą skalow alność w przypadku ko stania z klastra serw eró w i le p s z ą obsługę sy tu acji aw aryjnych. W a d ą je s t cUu czas obsługi ż ąd an ia w y n ik a ją cy z k o n iec zn o ści serializacji obiektów oraz kon ność przesyłania w iększych ilości inform acji w sieci. Stan po stronie klienta kodov je s t za p o m o c ą p o la u k ry teg o o nazw ie ja v a x . faces . VIewState, przedstaw ionej listingu 3.5, ilu stru jący m p ro b lem y w y d a jn o śc io w e tego rozw iązania. L is tin g 3 .5 . K o d w ynikow y strony K alkulator .jsp z zakodow anym stanem widoku
«In p u t typ e = ”hidden" name“ ”tempForm" value="tempForm'' /> «Input id="tempForm:temp" t y p e - " t e x t " name="tempForm:temp" v a l u e = " 0 .0" /> «Input t y p e = ” submit" name="tempForm:j_id_jsp_869176814_4" v a l u e = " P r z e l i c z " i> «input t y p e - “hidden" n am e = " j a v a x . fa c e s .V i e w S t a t e " i d - " j a v a x . f a c e s . V i e w S t a t e " value="H4sIAAAAAAAAAJVWS2wbRRgeb+zGSShDHg0FEUhpR7Iq2rysPEhQWufR0NhxiNNAW6nuxJ 7Gm6x3h93ZeJMA1SKVS1 RFRcABKYgKkLI0F3opPUCBAlKlIhEJDhxQhZAQgnJAlcpOAmZmveuNs27 EHkaz63++//V9//jyHRAwNFB3PLoAl6AoQ2VejM8toBQZuPjV8+7u01tlAQATAwACuga6U2pWlAlF PAVTSBchxrKUgkRSFTFBIEExqMB5pEWyWN4/oyE0qabR3VPXP7nScfjTBxh0bhCwp415M/MoFB0rC lKIeCQyK6HctKoSUL+QlNLJBR0n+3r603t7+jpDyQ5TfwGcBkKum4Ps8wbJkKwsjtNlTNWyI£hQFr 0dfTZET/pAyzZnIwo2yAwyCfAzAPtwmB9+cpvDMaTrtAye0XTbU0Mcqm0bqGElm4VK0mwQoiqegCH TYIDsEZxdON! V0K7V8N4aRKKYUM/EIA6Uf/fZFwönvy4Dwhio1FWYHoMpomoRUEEyGtIzqpw28dBB DrEjF2SQzAEB+90B59AcpYA4fGR6enRyjjkbGXOuOR2PzzDn08nmltu28dhUfJJZROYSNLa6QmyHN A0uRyWdmGc2Gt/+Er5TBnwR4Ne1FcQJ6Mv5WTTElVMT4xJUcdLmlA6rqoygcqtJW/tm/a/fB0A7Bg JLUDYoso83pA5gz0fVLE/LE0+0LQ9SH1S0z8SiyfChRGSYg0r2Z6C8aMiQlkyknqm3XYVEomoKyuj 0HzUnlzv+/FUA/ggIZmihUlQNUVCeUg2FaMsElHLRtbMI2xNEk5T5gSgIsle00oc5foSaL0FNggrh ryb+1z4ECFNRumCZALA50YhCEBVg7Q+XPrh351yfwCqYT9QOkdtNGtk5pLly+a3Gqjdvn7c17sMY0 8zxefCqweNbBS9blRay+Hj]nJr67e5xQX13rZuAAPvc4flziPabwdU4SzlbdhMrM5tpjBlbeklAOV JSZBkjq6HY83GSKvNItLGQsoddBXYdKZqo+eZe2Zj96efGlcN0uUm+N4Wa026WmC58vo5TXSItAZe QdvTmlaffWL8VE4AQ8RUpGer6JMzarKnUqU2anyGgweK7pLYnEOWSLK3AORkNOBpQd82qNk8HOUxl kLgAdYw0EcnihI5nWWSjJqbjQKcDHh69831H/bVBNsYlsMcKkloWmeUql47fvvHP6wI3q3PMChbvn 3018fuxjUFehVw/6C3SUktnfltPT2tT877VReeHcFjkood00ikZJJGXnmnsel2xbw2F3UJ70ycuvi e9LLCoWWmGcl3gsfsDu2V1XYUYm3QA7LSnzlNsw8BaSlKQ3RwFCvoK46TfGv8DpPj2UmhLiTiiGrQ zw9Yb0jB3s5sxk7sqhvTZYAfcYJRSUppX04KbppmgWftjgaWFqcVztYzXrn4+0br4t59OjhF7crAT TTdevH7t2V/OP15C0UX6AR76qXZ201yqoa0g0ainsl0xgpgfcla5zJ5u/a3FxQwrL5gjZp7hHcI86u 8D/CC7ETNvcwdW6g70ubZy/WQZYwVtKyS2GSEZNF9g7VLUKv31Iu2Dp7WFHSMV2H7XfPP/jvdBrQp 7hB+m/o85iSXWF2nq7tkoKayuI/oFb4WJ6YrOY1v0wNZ27NPTx1Q/vxm01ncilgT21MLfqlBe21 IW WKYrWNjiVN74PpXjD/gPqg5nspwoAAA=-" />
Rozszerzone im plem entacje JSF m ogą korzystać z niestandardow ych parametrów! inicjalizacyjnych deklarowanych w web.xml.
RcZ,jział 3. ♦ U żyw anie JS F
3,2« O bsługa zdarzeń -W -każdej aplikacji zaw ierającej interfejs u ż y tk o w n ik a obsługa z darzeń je s t p o d sta w ow ym m echanizm em u m o żliw iając y m in te rak c ję u ż y tk o w n ik a z k o m p o n en tam i U l. Z darzeniem (ang. even ts) definiuje się z ajśc ie określonej sytuacji, ja k w y b ó r elem entu z listy czy kliknięcie p rz y cisk u z atw ierd z a ją ce g o form ularz. W p rzy p ad k u aplikacji W W W zdarzenia m a ją fundam entalne z n ac ze n ie ze w z g lęd u n a to, że w fazie p ro jektow ania aplikacji trze b a p am iętać o o g ra n ic ze n iac h d o ty czący ch p rz esy ła n ia żądań i odpow iedzi p rzy u ż y ciu p ro to k o łu H T T P. D z ięk i zasto so w an iu kom p letn eg o m od elu kom ponentów oraz m echanizm u obsługi zdarzeń, JS F pozw ala zapom nieć o tych o g ran i czeniach. W niniejszym punkcie opisane z o sta n ą p o d sta w o w e typy zdarzeń oraz m eto d y ich o b sługi w JS F po stronie serw era. In fo rm ac je z w iązan e z w y k o rzy stan iem m ech an izm u obsługi zdarzeń, k o lejk o w a n iem i p rz e tw a rz a n ie m w k o le jn y c h fazach c y k lu ży cia obiektu żądania zam ieszczone s ą w ro z d ziale 4.
3.2.1. Typy zdarzeń i metody ich obsługi Szkielet JSF w sposób analogiczny do rozw iązań Javy dla aplikacji okienkow ych (A W T, Sw ing) w ykorzystuje k o m p o n en ty Ja v a B ea n do obsługi zdarzeń. D o w o ln y ko m p o nent U l m oże generow ać zero lub w ięcej zdarzeń, a d ew elo p er m oże zarejestrow ać zero lub w ięcej m eto d lub o b iek tó w n a słu ch u jąc y c h z ajścia ty ch zdarzeń. In teg racja logiki aplikacji w aplikacji JS F je s t k w e stią p rz y p isan ia o d p o w ied n ich o biektów n a słuchujących do k om ponentów g e n eru jąc y c h zdarzenia. M o żn a stw ierdzić, że tw orząc z JSF interfejs aplikacji W W W , opieram y się n a p arad y g m acie p ro g ram o w a n a stero w anego zd arzeniam i (ang. even t-d riven p ro g ra m m in g ). Standardow e zdarzenia zachodzące w aplikacji JS F m ożna podzielić n a dw ie kategorie: ♦ zd arzen ia g enerow ane p rz ez k o m p o n en ty U l, ♦ zdarzenia z m ian y w a rto ści (ang. v a lu e -ch a n g e events), ♦ zdarzenia akcji (ang. a ction events), ♦ zd arzen ia g enerow ane p rz ez logikę aplikacji, ♦ zd arzen ia w m od elu dan y ch (ang. d a ta m o d e l events), ♦ zd arzen ia zm iany fazy c y k lu p rz etw a rza n ia (ang. p h a se events). Nie są to w szystkie typy zdarzeń, które m o g ą w ystąpić w aplikacji JSF, jak o że dew eloper m oże u tw o rz y ć w łasn e k o m p o n en ty i z d arzen ia, które b ę d ą g enerow ane w aplikacji. R ów nież b ib lio tek i ro z sze rz ając e b ib lio tek ę k o m p o n en tó w m o g ą w p ro w ad zać w łasne typy zdarzeń. O bsługa zdarzeń nie zaw sze w ym aga kom unikacji m iędzy klientem i serw e rem — część z d arz eń m o że b y ć o b słu g iw a n a c ałk o w icie p o stro n ie k lie n ta , dzięki użyciu jęz y k a JavaScript. W dalszej części tego punktu przedstaw ione z o stan ą m etody obsługi stan d ard o w y ch zdarzeń w aplik acji JSF.
W
' jä v a S e rv e r F a c e s i E c lip s e G a lile o. T w o rze n ie a p lik a cji Wtyvp
128
3 .2 .1 .1 . Zdarzenia akcji Z d arzen ia akcji s ą w yzw alan e p rz ez u ż y tk o w n ik a w w y n ik u z asto so w an ia koitipff n e n tu kom endy. K o m ponentam i, k tó re g e n e ru ją z d arz en ia akcji, s ą np. przyciski i gp . perłącza (HTMLCommandButton i HTMLCom mandLink). K o m p o n e n ty te po w y k o n an iu akcjp generują natychm iastow e przesłanie żądania, które je s t odbierane, a następnie obsługiwał ne p o stronie serw era. JS F p o o d e b ran iu ż ąd a n ia u sta la ź ródło akcji, gen eru je obié® zdarzenia a kcji i w o dpow iedniej fazie cy k lu p rz e tw a rz a n ia obsłu g u je to zdarzenie. :H
Rozdział 3. ♦ Używanie JS F
129
. O b ie k t y n a słu c h u ją c e zdarzenia a k c ji są w y g o d n ą alte rn a ty w ą d la m etod n a słu
chujących definiow anych w kom ponentach w sp ierający ch . O biekty deklarow ane sa za pom ocą sp ec ja ln e g o ’znacznika < f : actionLi stener>, którego u ży cie realizow ane je st w ramach następującej konstrukcji: < f: a c ti onLi stene r type="i s r p .1 i s te n e rs . A c ti o n E ve n tlo g g e r"/> < f: a c tio n Li stene r type="i s r p .1 i s te n e rs .A n yO th erA cti onLi s te n e r"/>
Z d arzenia akcji m o g ą być obsłu g iw an e p rz e z d w a ty p y m etod: ♦ m eto d y i o b iek ty n a słu ch u jąc e z d a rz e ń akcji; ♦ m eto d y akcji. M e t o d y n a s łu c h u ją c e z d a r z e n i a a k c j i p o z w a la ją n a w ykonanie zdefiniow anego przjl
program istę kodu, zazw yczaj m odyfikującego w artości w łaściw ości kom ponentu w spU rającego czy zm iany w m o d elu d a n y ch aplikacji, ale n iem a ją ce g o w p ły w u n a nawigff cję stron. W kodzie strony JSP kom p o n en t je s t w ią za n y z m e to d ą o b słu g u jącą zdarzeni! p o p rz ez a try b u t a c t i o n l i s t e n e r . Z ałó żm y , że m am y tabelę, w której c h cem y z ap e fj nić u ży tk o w n ik o w i m o żliw o ść so rto w a n ia elem en tó w . W p o n iższy m przykładzie f i p e rłą cz e w y ś w ie tla n e w n a g łó w k u k o lu m n y ta b e li m a w y z w a la ć m e to d ę sortując! elem enty tab eli w p o rz ąd k u w y z n ac z o n y m p rz e z alfa b ety c zn y p o rząd ek elementó j kolum ny: < f:fa c e t name_ "header"> < h: commandlink i d = " t i t l e " a c tio n łis t e n e m " # {p a p e rlis t B e a n . s o r t } "> < h :o u tp u tT e xt v a lu e -"# {msg[ t i t le .la b e l]}" > < / h :o u t p u t T e x t > < / f:fa c e t> « h : o u tp u tle x t v a lu e -"# {p a p e r.t i t l e ) " > «/h:colum n>
M etoda o b słu g u jąca zd arzen ie k lik n ię c ia h ip erłąc z a m a n a stę p u ją c ą p ostać: p u b lic v o id s o rt(A c tio n E v e n t a c tio n E v e n t) { S t rin g id - a c tio n E v e n t. getCom ponentt) . g e t l d f ): i f (Id .e q u a ls C t it le ” )) { sortColumn = " t i t l e " ; } e ls e i f (id .e q u a ls !" a u t h o r s " ) ) { //...p o z o sta ły k o d m e to d y u sta w ia ją cej p o r zą d e k
M eto d y obsługujące z d arz en ia a kcji n ie z w ra c a ją w a rto ści i p o sia d a ją p aram etr w gij staci referencji do o biektu A ctionE vent. Z a p rz ek a za n ie teg o p a ram etru odpowiajj JSF, który d e koduje żądanie, gen eru je zd arzen ie a kcji i p rz ek a zu je je g o re fe re n c ji* m etody zdefiniow anej p rzez pro g ram istę. D zięk i re fe re n cji do z d a rz e n ia a kcji m o la ustalić źródło akcji (gdy m eto d a obsłu g u je w ięcej n iż je d e n k o m p o n en t). W p o w ||| szym przykładzie w iedza ta w ykorzystyw ana je s t do ustalenia, któ ra k o lu m n a ta b e li* być sortow ana. U sta w io n a z m ie n n a sortColum n je s t n a stęp n ie sto so w an a w in n e jiS l todzie do p o b ra n ia i w y św ietlen ia e le m en tó w tabeli.
W ażną zaletą tego rozw iązania je s t m ożliw ość je d n o c ze sn e g o z astosow ania w ielu obiektów nasłuchujących (w przypadku m etod nasłuchujących m ożem y skorzystać tylko z jednej). Pow yższy przykład ilustruje sytuację, w której zo stał uży ty zarów no atry b u t a c tio n lis te n e r , ja k i dw a znaczniki < f : a c ti onLi stener>. K olejność w yw o łan ia o d pow iednich m etod obsługi jest następująca: n ajpierw w y w ołana je st m etoda dow iązana atrybutem a c tio n lis te n e r , a następnie m eto d y o b ie k tó w n a słu c h u ją c y c h w k o le jn o ści ich zadeklarow ania. K lasa d e fin iu jąca typ o b ie k tu m usi im p le m e n to w ać in te rfejs A c ti onLi stener, zaw ierający p o jed y n c zą m etodę, j a k w p o n iższy m przykładzie: p u b lic cla ss A ction Even tlogger implements A c tio n L is te n e r { p u b lic void p ro ce ssA ctio ntA ctio nE vent e ven t) throw s A b o rtP ro ce ssin g E xc e p tio n f FacesContext. g e tc u rre n tln s ta n c e O .g e tE x te rn a lC o n te x t () . logievent.getCom ponentO + "has generated" + e v e n t . t o S t r in g O i ;
} 1 W przykładzie obiekt nasłuchujący realizu je o p e rac ję zap isy w an ia do dziem iika in form acji o obsługiw anych zdarzeniach i m oże być przypisyw any do obsługi dow olnych kom ponentów U l generujących akcje. M e to d y a k c ji p o z w a la ją na w ykonanie z d efin io w an e g o p rz e z p ro g ram istę kodu, ale jednocześnie z w racają w ynik w p o sta ci łań cu ch a zn ak o w eg o , któ ry m oże p o w odow ać zm ianę wyświetlanej strony. M etody akcji w ykorzystyw ane są w naw igacji dynam icznej, tj. w kodzie m etody dynam icznie generow any je s t rezu ltat, d e cy d u jąc y o tym , k tó ra reguła decyzyjna naw igacji zostanie uaktyw niona (więcej o naw igacji statycznej i dyna micznej w punkcie 3.3.2). Obsługę zdarzenia p o łączo n ą z naw igacją m ożem y zilustrować na przykładzie ekranu logowania. W kodzie m etody param etry przekazane z form ularza (e-mail i hasło) są użyte do uwierzytelnienia użytkow nika, a następnie w zależności od j e go w yniku zw racana je s t w artość d ecydująca o tym , ja k i ekran zostanie w yśw ietlo n y użytkow nikow i. K o d deklarujący w yk o n an ie akcji:
i kod m etody akcji: p u b lic S trin g lo g ln O { U se rS e rvice userS er = ut1 1 B e an.getS erv1 ceLo ca tor() . g e tU s e rS e rv ic e C u til Bean.getEmal1C o n fig u ra tio n ( ) ) ; User user = u s e rS e r. authenticate(em a11. passw ord): i f (u se r ! - n u l l ) { v is it B e a n . s e tA u th e n tic a tlo n B e a n (th is ): v is it B e a n .s e t U s e r (u s e r ); re tu rn " 1ogi n_success " ; //p rze jśc ie do n a stęp n e g o ekra n u
i3 0
Ja va S e rv e r F a ce s i Eclíp se G a lile o. T w o rze n ie a plika cji Wtyyg |
} e ls e { FacesMessage message = new FacesMessaget"Login ; a ile d " ) : F a c e s C o n te xt.g e tC u rre n tln s ta n c e O .a d d M e ssa g e (n u ll . m e ssa ge);' re tu rn n u ll ; //ponowne wyświetlenie strony logowania
)
.
'<
l| jj '30.
U życie m etod akcji nie po zw ala na identyfikację źródła w jej kodzie. Stąd m ożliwe jeg je d n o c z e s n e w y k o rz y sta n ie o b u m e to d o b słu g i a k c ji d la je d n e g o k o m p o n en tu , np < h: commandButton . . . action= "#{m yB ean. n a v i g a t e ) " a c tio n L is t e n é r - " #{nvBean’ '- » lis te n } "
p ra k ty c z n e w o dniesieniu do takich k o m p o n en tó w , ja k p o la w yboru, p rz y cisk i opcji listy, listy rozw ijane czy m enu. P o n a d to z d arz en ia z m ia n y w artości m aja duże zasto sow anie w ,synchronizacji kom ponentów zależnych, np. w przypadku hierarchicznych . .. słow ników czy) pól w y b o ru u a k ty w n ia jąc y ch różne opcje użytkow nika. P rzy k ład o w y fragm ent strony JSP, z ap re ze n to w an y n a listingu 3.6, ilustruje sytuację, w której u ż ytko w nik, aby skorzystać z p rz y c isk u D o w n lo a d (w celu pob ran ia zasobu! np. program u, grafiki, etc.), m usi ustaw ić p o le w y b o ru n a zazn aczo n e (np. p o tw ierd z ić ak ceptację w yśw ietlan y ch w a ru n k ó w k o rz y sta n ia z zasobu).
.../> Listing 3 .8 . P rzykład obsługi zdarzenia zm iany w artości
N ie za le ż n ie od k o lejn o śc i z a d e k la ro w a n y c h atry b u tó w najp ierw w y konana zostanie m eto d a o bsługująca z d arz en ia akcji (przypisana do a c tio n L is te n e r ), a następnie m.e-_ to d a a k cji (p rzy p isan a do a c tio n ). W ten sposób p ie rw sz a m e to d a m o że wykonań id en ty fik ację ź ródła akcji i w ykonać niezb ęd n e p rzetw arzan ie zdarzenia, a później p o p rz ez w łaściw ości k o m p o n en tu myBean przek azać p o trzeb n e m etodzie akcji infor m ac je do u sta le n ia w a rto ści zw racanej.
3 .2 .1 .2 . Zdarzenia zm iany w a rto śc i Z darzenia zm iany w artości generow ane s ą przez kom ponenty U l, gdy użytkow nik wprtif w adzi n o w ą w artość do k o n tro lk i tego kom p o n en tu w p rzeg ląd arce i zatw ierdzi for-" m ularz, w k tó ry m k o n tro lk a się znajduje. D o ich obsługi u ż y w an e s ą obiekty i metody n a słu ch u jąc e zdarzeń ty p u Val ueChangeEvent. Z ałó żm y , że c h ce m y o b słu ż y ć zm ian ę w a rto ści w k o m p o n en c ie w e jścio w y m «► InputText: < h: in p u tT e x t v a lueC hangeLIstener-"#{m yBean. v a lueChangeLIst e n e r } " />
Z m ia n a zaw artości p o la tek sto w eg o w p rzeg ląd arce nie sp o w o d u je autom atyi przesłania form ularza. Przesłanie form ularza jest w arunkiem w ygenerow ania zdarz g d y ż d opiero p o p rz e sła n iu n a serw er d a n y c h m o ż n a sp ra w d z ić , czy b ież ąc a w a w p o lu tek sto w y m ró żn i się o d pop rzed n iej. A by auto m aty czn ie p rzesłać formula: zm ian ie w artości, m o żn a skorzystać z ję z y k a JavaS cript i o b słu g i z darzeń w prz; d arce. W p o w y ż sz y m p rz y p a d k u w y sta rc z y do z n a c z n ik a p o w y ż ej d o d a ć ati onchange i przy p isać do n ie g o funkcję ję z y k a JavaS cript, k tó ra w y sy ła fo rm u la rz ,« < h : 1n p u tT e x t . . . o n ch a n g e = "su b m it() " /> . P rz e sy łan ie n a stę p u je , g d y zm ieni j j | w arto ść p o la i stero w an ie zo stan ie o ddane przez k o m p o n en t (np. p rzez naciśn klaw isza Enter, Tab lub kliknięcie m y szą w dow olnym obszarze n a zew nątrz kontri M e to d a o b słu g i z d a rz e n ia p o sia d a d o stę p do o b iek tu zd arz en ia , d zięk i c zem u mi k o rz y stać zarów no ze starej, j a k i now ej w arto ści kom ponentu: p u b lic v o id valueChangeListenerlValueChangeEvent valueChangeEvent){ S t rin g o ld V a lu e = va lu e C h a n g e E ve n t.g e tO ld V a lu e (); S t rin g c u rre n tV a lu e = valueChangeEvent.getNew ValueO ; //... p o z o sta ły k o d m eto d y
} P o w y ższy p rzy k ład ilu stru je n ajp ro stszy schem at obsługi z d arz en ia z m ian y wad ale n ie m a w ielk ieg o z n ac ze n ia prak ty czn eg o , ja k o że tak i sc h e m a t przesyłania ( n y c h w ystępuje sp o rad y czn ie. Z d arz en ia zm iany w arto ści m a ją szczególne znaczeiM
< h :selectBooleanCheckbox o n c llc k = "su b m ltO " v a lueChangeLIstener="#{myBean, va 1ueC han geLIstener}" blnding-"# {m yB ea n. a c ce p te d )"/> < h :o u tp u tT e xt v a lu e -" ! accept the terms as sta te d above">
P oczątkow o p rz y cisk je s t nied o stęp n y (a try b u t d i s a b l e d ) , ale po z az n ac ze n iu pola w y boru i p rz esła n iu form ularza m eto d a o b słu g u jąc a zd arzen ie zm iany w artości (patrz listing 3.7) m oże ustaw ić opcję d o stę p n o śc i p rz y cisk u , co zostało zo b razo w an e n a ry sun k u 3.2. Listing 3 .7 . P rzykład m etody obsługi zd a rzen ia zm ia n y w artości p u b lic c la s s MyBean { p riv a te HtmlCommandButton d o w n loa d B u tto n -n u l1 ; p rív a t e HtmlS e lectBooleanCheckbox a c c e p te d -n u ll; p u b lic v o id valueChangeListeneríValueChangeEvent valueChangeEvent) i f (v a lu e C h a n g e E v e n t.g e tN e w V a lu e O .e q u a ls(tru e ) ) downloadButton. setD i s a b le d (f a ls e ): e lse d o w n lo a d B u tto n .s e tD ls a b le d (tru e );
i} p u b lic HtmlS e lectBooleanCheckbox g e tA c c e p te d () (r e t u r n acce p te d :} //...p o zo sta łe m eto d y d o stęp o w e g e t - s e t -
1
1 download j / T accept the terms as stated above
Rysunek 3 .2 . P rzy kła d synchronizacji kom ponentów za leżn ych z użyciem m etody obsługi zdarzenia rmiatty wartości
W p rzyk ła d zie p rz e s y ła n ia fo rm u la rz a u ż y to z d a rz e n ia o n c lic k , p o n ie w a ż p rz e g lą d ark a In te rn e t E x p lo re r nie o b s łu g u je z d a rz e n ia onchange dla p o la w yb o ru .
3. ♦ U żyw a n ie JS F
. O biekt nasłu ch u jący n ależy je s z c z e zarejestrow ać w obiekcie o d p o w ie d zialn y m za za rząd zan ie cyklem przetw arzan ia — ja v a x .faces . 11f e c y c le . L I f e c y c l e. D o d o d aw a nia, u su w an ia i pobierania, o biektów nasłuchujących zd arzen ia z m ia n y fazy s łu ż ą n a stępujące m etody:
A nalogicznie do obsługi z d arz eń akcji ró w n ie ż w p rz y p ad k u obsługi zdarzeń w artości m ożem y skorzystać z o b iek tó w nasłu ch ujących z d a r z e n ia z m ia n y w artości deklarow anych za p o m o c ą z n ac zn ik a < f ; va l ueChangeLI ste n er> , np.: ' < f : v a lueChangeLIstener ty p e = "i s rp . 1i s te n e rs .V a lueChangeEventLogger "/>
♦ p u b lic vo id a d d P h a s e lis te n e r( PhaseLIstener lis t e n e r ) ; ♦ p u b lic vo id rem ovePhaseListenerCPhaseListener lis t e n e r ) ;
W przy p ad k u zad e k la ro w a n ia w iększej lic z b y o b iek tó w n a słu ch u jąc y c h o kolejn , : w yw o łan ia ich m eto d d ecy d u je k o lejn o ść d eklaracji. K la sa d e fin iu jąca typ obiektu •: słucłiującego m u si im p le m e n to w a ć in terfejs Val ueChangeLI s te n e r, ja k w poi kodzie: p u b lic c la ss V a lueChangeEventLogger Implements V a lu eC h a n gelisten e r ( p u b lic vo id processValueChangetValueChangeEvent even t) throws A b o rtP ro ce s s In g E xc e p tlo n { F a c e s C o n te x t.g e tC u rre n tIn s ta n c e !) . g e tE x te rn a lC o n te x t( ) .1o g (e v e n t. getCom ponent!) + "has generated" + e v e n t .t o S t r in g O );
)
} J
H
3 .2 .1 .3 . Zdarzenia zm iany fazy cyk lu przetw arzania K ażde żądanie w y słan e do aplik acji JS F p rz ec h o d zi p rz ez p ro ces przetw arzan ia dający się z sześciu faz. W czasie tego p ro c e su k o lejn o w y k o n y w an e s ą czynności odtw arzania w id o k u strony, o d c zy ty w a n ia p a ram etró w żądania, w eryfikow ał tości param etrów, aktualizow ania m odelu n a podstaw ie param etrów , w yw oływ ania metod logiki aplikacji i re n d ero w a n ia odpow iedzi. Z d arz en ia zm ia n y fazy cy k lu przetwa rzan ia s ą g enerow ane p rz e d k a ż d ą z ty c h faz i p o każdej z n ic h p rz ez m echanizm za rząd zan ia cyklem p rz etw a rza n ia JS F (d o k ład n y opis cy k lu p rz etw a rza n ia żądania-; znajduje się w rozdziale 4.). D ew eloper nie m a m ożliw ości przypisania tych zdarzeń do kom ponentów U l czy zm iany kolejności faz, ale m oże zapew nić obsługę tych zdarzeń.:. Zdarzenia zm iany fazy re p re z e n to w a n e s ą p rz e z k la sę ja va x. faces .e v e n t. PhaseEvenjj, która posiada dwie m etody publiczne pozw alające pobrać bieżący kontekst (FacesContext); oraz aktualnie w y k onyw aną fazę p rz e tw a rz a n ia ż ą d a n ia ( ja v a x . fa c e s . e v e n t. Phaseld)? O bsługę tych z d arz eń m o ż n a zapew nić p o p rz ez u tw o rz en ie o b iek tu k lasy impłemen-". tającej interfejs ja va x. faces .e v e n t. P h a se liste n e r (rozszerzający interfejsy java u tiU ; ^ E v e n tL i s te n e r i ja v a . i o. S e r ia liz a b le ) , z aw ie rają cy m etody: ♦ p u b lic void beforePhase!PhaseEvent e v e n t) — tu definiujemy kod do wykonania.*,
przed o k re ślo n ą f a z ą
♦ Phaseld g e tP h a s e ld ! ) — w arto ść zw rac a n a tej m eto d y w sk azu je, d la której fazy m a ją b y ć w y k o n y w a n e p o w y ż sz e m eto d y . K la sa Phaseld d o sta rcz a statyczne zm ienne fin aln e, re p re z en tu jąc e k o lejn e fazy p rz etw a rza n ia ,
m etody b ę d ą w y k o n y w an e p rz ed k a ż d ą fa z ą i p o każdej z nich).
W p o n iższy m p rzy k ład zie obiekt klasy nasłuchującej je s t tw o rz o n y z w y k o rzy stan iem k lasy anonim ow ej w k odzie k o n stru k to ra k o m p o n en tu w sp ie rają ce g o . Z ałóżm y, że myBean je s t k o m p o n en tem zarejestrow anym w z asięgu aplikacji. P o d c z as in icjow ania obiektu (co w czasie ży cia ap likacji nastapi tylko raz) p o b iera n y je s t obiekt z arząd za ją c y c y k lem ży cia i w tym obiekcie rejestrow any je s t an o n im o w y o b iek t n a słu ch u ją cy. P o n iew aż m etoda g e tP h a s e ld !) zw raca w artość re p re z e n tu ją c ą w szy stk ie fazy, p rz ed k a ż d ą fa z ą i po każdej z n ich do logu k o n ten era serw letó w z ap isy w an a będzie inform acja o w ykonaniu m etody (więcej o ustaw ieniach pliku d z ie n n ik a w rozdziale 6.). G dyby zm ienić zasięg myBean n a request, to po każdym żądaniu b y łb y tw orzony now y obiekt k lasy anonim ow ej i d o d aw an y do listy o biektów nasłu ch u jący ch . W ten sposób po w ykonaniu np. 100 żądań, m ielibyśm y 100 obiektów nasłuchujących zdarzenia fazy, co pow odow ałoby, że każda z 6 faz generow ałaby po 200 w pisów do pliku dziennika. p u b lic c la s s MyBean Implements S eri allzab1e{ p u b lic MyBean!) { L ife c y c le F a c to ry 1ife c y c le F a c t o ry = (L ife c y c le F a c t o ry i F a c to ry F In d e r .g e tF a c to ry (F a c to ry F in d e r. LIFECYCLE_FACTORY): L if e c y c le l i f e c y c l e = 11fe c y c le F a c to ry . g e t l i fe c y c l e( Li fe c y c l e F a c to ry . DEFAULT.!.IFECYCLE): 11 f e c y c le . adaPhaseLIstenertnew P h a s e lis te n e r!) { p u b lic v o id afterPhase!PhaseEvent even t) { F a c e s C o n te xt.g e tC u rre n tIn s ta n c e !) .g e tE x te rn a l C o n t e x t !) . lo g ! "AFTER - " + e v e n t.g e tP h a s e ld !) ) ;
} p u b lic v o id beforePhase!PhaseEvent eve n t) { F a c e s C o n te x t.g e tC u rre n tIn s ta n c e !) . g e tE x te rn a lC o n te x t( ) .lo g ! "BEFORE - " + e v e n t.g e tP h a s e ld !) ) :
} p u b lic Phaseld g e tP h a se ld !) { re tu rn Phaseld.ANY_PHASE:
} }):
}//...p o z o sta ły kod klasy
♦ p u b lic void afterPhase!PhaseEvent e v e n t) — tu definiujem y k o d do wykonania p o określonej fazie,
tj.: RESTORER/1EW, APPLYJREQUEST_VALUES, PROCESSR/ALIDATIONSf UPDATE_MODEL_VALUES, INVOKE_APPLICATION, RENDER_RESPONSE o raz ANY_PHASE, k tó ra re p re z en tu je w szy stk ie fazy (obie w yżej w ym ien i'
<1 p u b lic P h a s e L is te n e r[] g e tP h a s e lis te n e rs !).
-
W y g o d n iejszy m ro zw iązan iem m oże być utw orzenie klasy re p rezen tu jącej o b iek t n a słuchujący, np. -S
p u b lic c la s s PhaseDetector implements P h a se liste n e r { //tu kod metodjw.
//...} i zarejestrow anie jej o biektu w p lik u fa c e s-c o n fig .x m l: <1 ife c y c le > < p h a s e -li stener> i s r p . debugglng. PhaseDetector «/ p h a s e -1i sten e m < / 1 ife cy cle >
Ja va S e rv e r F a c e s i E c lip s e G a lile o . T w o rze n ie aplika*;» w
E lem en ty k onfiguracji klas n a słu ch u jąc y c h zo stały p rz ed sta w io n e w tabeli 3.6 T a b e la 3 .6 . E lem enty konfiguracji obielctów nasłuchujących zdarzenia zm iany fa z y N a z w a e le m e n tu
L ic z e b n o ś ć
p h a s e -lis t e n e r
0 -*
O p is e le m e n tu
Element nadrzędny: <1 i fe c y c l e> W pełni kwalifikowana nazwa klasy reprezentującej obiekt nasłuchujący zdarzenia zmiany fazy.
Z azw yczaj w d z ia łając y ch a p lik a c ja c h n ie m a p o trz e b y o bsługi z d arz eń zm iany fazy Is tn ie ją je d n a k dość sz c z e g ó ln e sy tu a cje, w k tó ry c h n a le ż y np. od św ie ż y ć bądź pó. n o w n ie przetw o rzy ć w ła śc iw o ści k o m p o n e n tu w sp ierająceg o p rz ed fa z ą renderowanij"' odpow iedzi. Innym z a sto so w a n ie m j e s t m o żliw o ść p o m in ię cia fa z.cy k lu przetwarza, n ia p o p rzez um ieszczen ie w m eto d zie obsługującej zd arzen ie w y w o ła ń funkcji ^ - C o n t e x t . re n d e rR e s p o n s e l ) i F a c e s C o n t e x t . r e n d e r C o m p le t e ( ). P ie rw sz a z m ch służy. do b ezp o śred n ieg o p rz ejśc ia do fa zy ten d e ro w a n ia z p o m in ięciem innych, druga pot zw ala p o m in ąć także i tę fazę (sz cz e g ó ły i p rz y k ła d y w rozdziale 4.). N ie k tó re implel m e n ta c je d o sta rc z a ją w ła sn y in te rfe js do o b słu g i o m a w ia n y c h z d a rz e ń . N a przykład w im p lem en tacji Sun R ave k lasa k o m p o n en tu w sp ierająceg o strony JS P — Abstract* * M a g e B e a n — d o sta rcz a m eto d y p r e p r o c e s s O i p r e r e n d e r O , któ re s ą w y g o d n ą altern n a ty w ą dla w y w o łan ia m eto d b e f o r e P h a s e (P h a s e !d . APPLY_REQUEST_VALUESi i before. * M h a s e ( P h a s e Id . APPLY_REQ UEST_VALUES) b e z k o n iec zn o ści tw o rzen ia obiektu klasyt nasłuchującej. W trak cie ro zw o ju aplik acji o b słu g a z d arz eń z m ia n y fazy m oże w sp o m ag ać diagno-. zo w an ie p rz y cz y n b łęd n eg o d z ia łan ia a p lik a cji p o p rz ez śledzenie w ykonyw ania po sz c ze g ó ln y c h faz, ja k w p o d a n y m p rz y k ła d zie .
3 ,2 .1 .4 . Zdarzenia w m odelu danych W celu u łatw ien ia p rz etw a rza n ia d a n y ch tab e lary c zn y c h , w y św ietlan y c h w kotnpń n e n ta ch U l rep re z en tu jąc y ch tab ele c zy listy, w p a k ie cie j a v a x , fa c e s .m ode’ zostały* u d o stęp n io n e k lasy re p re z en tu jąc e m o d ele danych. Z a p o m o c ą ty ch k las (będących' p o d k lasam i D a ta M o d e l) m o ż n a o p ak o w ać tak ie struktury, ja k listy, tab lice , zbiory' w y j nikow e będ ące rezu ltatem z ap y ta ń do b a z y dan y ch (R e su ltS e t) czy inne źródła d j nych, które u żytkow nik m oże zdefiniow ać w e w łasnych podklasach DataM odel (więcej o stan d ard o w y ch m o d elach d a n y ch w ro z d ziale 4.). Z d a r z e n ia w m o d e lu d a n y c h s ą g en ero w a n e , gdy k o m p o n en ty re p re z en tu jąc e zbiory d an y ch p rz e tw a rz a ją ite rac y jn ie w ie rsz e danych. Ic h istota je s t n a ty le odm ienna od p o z o stały ch z darzeń w y stę p u jąc y ch w JS F , że re p re z en tu jąc a je k la sa D ataM odel Event z o stała u m ie sz cz o n a w p a k ie c ie j a v a x . fa c e s .m o d e l , a n ie w j a v a x . f a c e s . e v e n t, jak* p o z o stałe k lasy re p re z en tu jąc e zdarzen ia. Z d arz en ia zm ian w m o d e lu dan y ch me s\ g en ero w an e p rz ez sam e k o m p o n en ty U l, lecz p rz ez obiek ty m o d eli (in stan cje podklas D a ta M o d e l) o pak o w u jący ch dane. Z d arz en ia w m odelu dan y ch n ie s ą g e n ero w a n e w kom p o n en tach , w ięc o b iek ty je na słuchujące n ie m o g ą b y ć z a re je stro w a n e w p lik u fa c e s-c o n fig .x m l, j a k w przypadku obsługi zdarzeń zm iany faz cyklu przetw arzania. R ejestracja m usi odbyw ać się w kodzie
uziE 3. ♦ U żyw anie JS F _______________^ ____________________
135
Javy, a klasy nasłuchujące ądarzenia m uszą im plem entow ać interfejs DataModel L is t e n e r zaw ierający tylko je d n ą m e to d ę :— void rowSel ected(D ataM odel Event e t. W poniższy m -p rzy k ład zie k o m p o n e n t Html D ataTabl e (rep re z en to w a n y z n aczn ik iem < h :d a ta la b le > ) w yśw ietla w artości tab licy n apisów . K o m p o n e n t reprezentuje zbiór posegregow anych n a k o lum ny danych, k tó re s ą re n d ero w a n e w k odzie w ynikow ym H T M L w ew nątrz elem entu < table> . * h :column id =,,column"> < f: fa c e t name-"’n eader"> ■ < h :o u tp u tT e xt value="Elem enty ta b lic y "> < / h :o u tp u tT e x t> < / f:fa c e t*
D ane dla k o m ponentu w yśw ietlającego są p o b iera n e z tab licy obiektów klasy String. W konstruktorze klasy kom p o n en tu w sp ierająceg o o b iek t tablicy o pakow yw any je s t za p o m o cą k lasy m o d elu A rr a y D a t a M o d e l , d la k tó reg o n astęp n ie re je stro w a n y je s t obiekt klasy anonim ow ej, im plem entującej in terfejs DataModel Li s te n e r, ja k pokazano na listingu 3.8. Listing 3 .8 . P rzykład obsługi zdarzenia iterow ania w m odelu danych p u b lic c la s s TestingOataM odels Implements S e r ia liz a b le ( DataModel model; p u b lic TestingD ataM odelsO { S t rin g nu m berS tring s[] - new S t r i n g ! ] { "one” , " tw o ". "th ree" } ; model = new A rra yD a taM o del(num berS tring s); m odel.addDataM odelListener(new D a ta M o d e llls te n e ri) { p u b lic vo id rowSelectedtDataM odelEvent e) { F a c e s C o n te x t.g e tC u rre n tln s ta n c e O .g e tE x te rn a lC o n te x t!) ,lo g ( “ v a lu e : " + e.getRow DataO + row s e le c te d :" + e .g e tR o w In d e x O ):
iJ
}); } p u b lic DataModel getM odelO { re tu rn m odel:} p u b lic v o id setModel(DataModel model) (th is.m o d e l - model:
}
} M etoda v o id ro w S el e c te d (D a ta M o d e l E v e n t e ) w y w o ły w an a je s t za k ażd y m razem , gdy m odel danych je s t ite ro w a n y (tutaj: gdy Html D a ta T a b l e p o b iera w iersze z m od elu danych). R eferen cja do o biektu D ataM odel E v e n t p o z w ala w k odzie m etody po b rać in deks w iersza i p rz e c h o w y w a n ą w nim w artość, a następ n ie w yśw ietlić ją. W ykonanie kodu z pow yższego przykładu pow inno spow odow ać zapisanie do dziennika (lub w k o n soli) n a stęp u jący ch kom unikatów : INFO: INFO: INFO: INFO: INFO: INFO:
v a lu e : v a lu e : v a lu e : v a lu e : v a lu e : v a lu e :
n u ll ; row s e le c t e d :-1 one: row s e le c te d :!) two: row s e le c t e d :! th re e : row se le c te d :2 n u ll ; row selected :3 . n u ll ; row s e le c t e d :-1
Ja va S e rv e r F a c e s i E clip s e S a iiie o . T w o rze n ie a p lik a cji W 1
O biekty DataModel s ą zaw sze u ż y w an e p rz ez k o m p o n en t Html Data I ab ie, ale w w szóści przypadków w sposób niejaw ny. M e to d y ob słu g u jące z d arz en ia majaŁ ci m ałe znaczenie praktyczne dla działania aplikacji, ale w trakcie rozw oju aplikacji ni w spom óc diagnozow anie p rz y cz y n jej b łędnego fu nkcjonow ania.
3 .2 .2 . N atychm iastow e w ykonyw anie metod obsługi zdarzeń
3. ♦ U żyw a n ie JS F
1 37
P ro b lem n iepożądanej w alidacji m o że m y ro z w iąz ać poprzez u sta w ien ie d la p o la w y bo ru atrybutu immedl ¿we n a w arto ść tr u e . S p o w o d u je to, że m eto d a obsłiw i zd arze nia zm iany .w artości d la ¿ego k o m p o n en tu z o stan ie u ruchom ioną p rz e d faza w alidacji. .. A b y po jej w ykonaniu, w a lid a cja n ie b y ła w y k o n y w an a , należy w m eto d z ie o bsługu jącej zdarzenie w yw ołać m etodę re n d erR e sp o n se O , która spow oduje skrócenie n o r m alnego cyklu p rz etw a rza n ia żądania, p rzec h o d zą c bezpośrednio do fazy renderow an ia strony. Poniżej po k azan o p o p ra w n y kod stro n y JS P, zaw ierający:
W standardow ym cy k lu p rz etw a rza n ia obiek ty z d arzeń g e n ero w a n y c h p rz ez kor no. nenty U l (A ctio n E ve n t i Val ueC iiangetvent). s ą tw o rzo n e i u m ie sz cz a n e w kolejce rzeń w drugiej fazie cy k lu p rz etw a rza n ia , tj. fazie a k tu alizacji stanu kom poneium (dok ład n y opis tego m ec h an iz m u znajduje się w ro zd ziale 4.). M e to d y przypisań obsługi zdarzeń oczekujących w kolejce s ą w yw oływ ane dopiero w następnych fa przetw arzania, ju ż po w a lid a cji danych. D z ię k i te m u ro z w ią z a n iu m e to d y obsłijp zdarzeń są w y w oływ ane ty lk o w ó w czas, g d y w p ro w ad zo n e d ane s ą p o p ra w n e i kqjjjj pletne. W ykrycie błędów pow oduje pom inięcie w yw ołania m etod obsługi zdarzeń i przjjj ście do fazy re n d ero w a n ia odpow iedzi, w której gen ero w an e s ą k o m u n ik a ty o błęds n y ch d anych. C zasam i je d n a k tak ie z ac h o w a n ie je s t n ie p o ż ą d a n e i o czekujem y,?» niezależnie od popraw ności danych m etody obsługi zdarzeń zostan ą zaw sze wykonane. A by zilustrow ać, kied y tak a sy tu acja m o że m ieć m iejsce, w ró ć m y do przykładu za-~ prezentow anego n a listin g a ch 3.6 i 3.7. A b y u ż y tk o w n ik m ó g ł p o b ra ć o kreślony J | j sób za p o m o c ą p rz y cisk u D o w n lo a d , m u si w c ześn iej z a a k c e p to w a ć w a ru n k i urn licencyjnej i zaznaczyć pole w y b o ru (ry su n e k 3.2). R o z sz e rz m y te n p rz y k ła d , t a k a j j użytkow nik m usiał jeszcze dodatkow o w ypełnić połe tekstow e zaw ierające adres e -n ||( (dla uproszczenia nie będziem y w tym m iejscu w eryfikow ać samej popraw ności a d re ||j N a rysunku 3.3 przedstaw iono ekran w prow adzania danych zaw ierający trzy komponenty w zajem nie zależne, k tó ry ch zd arzen ia m u sz ą być zsy n ch ro n izo w an e.
- A Ü,
< h :o u tp u tla b e l v a lu e -" E -m a il: ">< /h:outputLabe]> < hmessage IcK'm sg" for="ema1T' /> < f : a c tio n L is te n e r t y p e = " t e s t y .A c t l o nE ventLo gge r"/> < h :selectBooleanCheckbox im m ediate-”t r u e ” o n cl1 ck= "subm it()" valueCh an geListener-"# {m yB ean .va1u e C h a n g e L iste n e r}" b in d in g -”#{m yB ean.accepted!"> < h :o u tp u tT e xt v a lu e -" I accept th e terms as s ta te d above”>
oraz m odyfikacje w m etodzie obsługującej zdarzenie zm iany w artości d la poła w yboru: p u b lic v o id va!ueChangeL1stener(ValueChangeEvent valueChangeEvent){ / / . . id en tyczn y k o d ja k na listin g u 3.6
F a c e s C o n te x t.g e tC u rre n tIn s ta n c e d . renderResponseO ;
} Pow yższe rozw iązanie je st konieczne w sytuacji, gdy chcem y w ykonać w trybie na tychm iastow ym m etodę obsługi zdarzenia i pom inąć fazę w eryfikacji danych. W przy padku kom ponentów poleceń, których zdarzenia akcji s ą obsługiwane za p o m o cą m etod akcji (defin io w an y ch p rz y u ż y ciu atry b u tu a c tio n ), n ie m a p o trze b y w yw o ły w an ia m etody ren d erR esp o n seO . N ie z a le ż n ie o d teg o , w której fazie p rz e tw a rz a n ia w y k o n y w an a je s t m eto d a akcji, b e zp o śre d n io p o niej n astęp u je zaw sze fa za renderow ania odpow iedzi.
; 3 1 accept the terms
3. Param etryzacja kom ponentów Ul 3 ? U i ; h ttp : //lo c a l h o s f c 8 0 3 Q /K a ik u l a to f /f a c e s ,, a o w n l o a d .j s p
j_;d_jsp_229094'273_l:emañ; Validation Error: Value is required.
;HjI a c c e p t
d ie te rm s a s s ta te d a b o v e
R y su n e k 3 .3 . P rzykład zbędnej w eryfikacji
A b y u a k ty w n ić p rz y c isk D o w n lo a d , m u sim y z az n ac zy ć p o le w y b o ru i ty m samyŁzatwierdzić form ularz. P oniew aż pole tekstow e E -m ail posiada atrybut requi red ustawioą ny n a tr u e (jest w y m a g an e ), to gdy b ęd zie ono p u ste , zo stan ie w y generow any b ł^ w alidacji i n a ekranie p o jaw i się k o m u n ik a t o b łędzie. T ak ie zach o w a n ie je s t niepozj; dane, gdyż użytkow nik pow inien m ieć m ożliw ość ustaw iania w dow olnej kolejności nych w ejściow ych, tj. z az n ac ze n ia n a jp ie rw p o la w y b o ru , a n a stęp n ie a d resu e-mail
W w iększości p rzy p ad k ó w , gdy k o m p o n e n t U l je s t renderow any, w szy stk ie dane n ie zbędne do je g o w y św ietlen ia s ą d o stęp n e p o stro n ie serw era. C zasam i je d n a k istnieje potrzeba przekazania do serw era inform acji d ołączonych do znacznika reprezentującego kom ponent U l n a stronie JSP (p a ra m etry z ac ji z n aczn ik a k om ponentu). W tym celu m ożna skorzystać z: ♦ obiektów p a ram etró w (zn aczn ik < f : pa ram>), ♦ atrybutów k o m p o n en tó w U l (z n ac zn ik < f : a t t r l bute>), ♦ bezp o śred n ieg o w ią za n ia p a ram etró w z w łaściw o ściam i k o m p o n en tu w spierającego (zn aczn ik < f : s e t P ro p e rty Act i o n li ste n e m ).
Ja va S e rv e r F a c s s Í E c lip s e S a iiie o . Tw orze nie aplikacji W S P ®
3. ♦ Używ anie JS F
139
P oniżej znajduje się k ró tk a charakterystyka w y m ien io n y c h rozw iązań w raz z p r z y j» dem ilustrującym najw ażniejsze różnice m ię d z y nim i, tj. prostym -łączem służącyęyH z liczan ia odw iedzin strony. • jjjJJ
użyciu łącza. W praw dzie po z akończeniu cyklu p rz etw a rza n ia p o jed y n c ze g o żądania obiekt TestingParams jest.u su w an y , ale skum ulow ana w arto ść lic z n ik a je s t p rz ec h o w yw ana w- p a ram etrze z najdującym się n a strom e.
Z n aczn ik rep rezen tu je p aram etry (o b iek ty UIRarameter) pozw alające u m ie sz cz e n ie d o d a tk o w y ch in fo rm acji d la k o m p o n e n tó w U l. M o że być stosow IM dla kom ponentów HtmlOutputFormat, HtmlOutputLink i Html CommandLink. K lu c z o ty ^ w łaściw ościam i kom ponentu s ą value (obow iązkow a) i name (opcjonalna). Jeśli c h c lS w ykorzystać < f : param* w kom ponencie w y ś w ie tla ją c y m d ane (HtmlOutputFormat), f i g starczy zdefiniow ać value. W przypadku kom ponentu polecenia (np. Html Comman d l j » m usim y użyć obow iązkow o w łaściw ości name, gdyż obiekt UIRarameter je st d o łącfg p w p ostaci p aram etru ż ąd an ia H T T P.
Z nacznik < f :a ttr ib u te * pozw ala na dow iązanie atrybutu do każdego kom ponentu UJ. M oże być stosow any ze w szy stk im i z n aczn ik am i re p re z en tu jąc y m i k o m p o n en ty U l. A by porów nać to rozw iązanie z poprzednim , poniżej z am iesz c zo n o p rz y k ła d altern a tyw nego licznika w ejść n a stronę:
K od m etody obsługującej zdarzenie k lik n ięcia łącza: Isto tn ą z aletą użycia kom ponentu w yjściow ego HtmlOutputFormat je s t m o żliw o ść ĘĘą św ietlania w arto ści p aram etró w z w y k o rz y stan ie m elem entów form atujących k o rjfl nikat. P aram etry są osadzane w tekście ko m u n ik atu za p o m o cą indeksów w nawiasjjjj {}. P o n iż sz y k o d p re z e n tu je frag m e n t stro n y JS P , w y św ietlając y n ap is zaw ieraj|jj¡ lite rał ła ń c u ch o w y "h ard co d ed ", w a rto ść n a g łó w k a ż ą d a n ia H T T P oraz w łaściw jjjl c o u n te r kom ponentu w spierającego t e s t i ngParams, która tutaj m a reprezentow ać licj¡¡ odw iedzin strony. < h: outputForm at va lu e -"P a ra m e try : s ta ty c z n y : { 0 } , pobrany z HTTP header: '-» -l i c z n i k { 2 } . ">
■■■.-i;
Poniżej znajduje się p rz y k ła d o w y fragm ent strony, w k tó ry m p aram etr counter p o k azu je liczbę w ejść na stronę. .¡Í| Jji
K o d k o m p o n en tu w sp ierająceg o dla obsługi o b u p o w y ż sz y ch fragm entów m a postaci p u b lic c la s s TestingParam s { p riv a t e i n t c o u n te r: p u b lic i n t g e tC o u n te rO { re tu rn c o u n te r:} p u b lic v o id s e tC o u n te riin t c o u n te r) { t h i s . coun ter = c o u n te r:} p u b lic v o id handleParam (ActionEvent e v e n t) { coun ter = In te g e r.p a rs e ln ttF a c e s C o n te x t,g e tC u rre n trn s ta n c e () . g e tE x te rn a lC o n t e x t o . getRequestParam eterMapl) . g e t ( " c o u n te r") ) : counter**;
p u b lic vo id handle A ttrC A c tio n E ve n t even t) { UlComponent component = e v e n t.getCom ponentí); counter = (In t e g e r) component. g e tA t t r ib u t e s ( ) .g e t !" c o u n t e r " ): counter**;
} Poniew aż atrybuty są d o w iązyw ane do k o m p o n en tó w U l g e n e ru ją c y c h zdarzenia, k o nieczny je s t dostęp do o b iek tu z d arz en ia akcji A c tio n E v e n t, co w y m u sz a korzy stan ie z m etody obsługi zd arzen ia akcji. T y m razem , aby licznik p o p ra w n ie re je stro w a ł w e j ścia na stronę w czasie sesji u ż y tk o w n ik a b ądź działania ap lik acji, k o n iec zn e je s t, by kom ponent w spierający testingP aram s zo stał zarejestro w an y w z asię g u s e ssion lub appl i c a tio n . W p rzy p ad k u u ż y c ia z asię g u req u e st po k a żd y m p rz e tw o rz e n iu żądania w artość licznika b ędzie u sta w ian a na 1. W spólną cechą obu p o w y ż sz y ch p o d ejść je s t konieczność sa m o d zieln e g o p rz etw a rza nia inform acji p rzesy łan y ch n a serw er w k odzie m etod o bsługi z d arz eń . Z u p ełn ie inne rozwiązanie oferuje znacznik < f :s e tP ro p e rty A c tio n lis te n e r> , który po zw ala na bezpo średnie w iązanie w artości p aram etru z n aczn ik a z w ła śc iw o ścia m i k o m p o n en tu w s p ie rającego. A trybut ta r g e t w sk azu je w łaściw ość kom ponentu w spierającego, a value w artość, która m a być do niego p rz y p isan a . Poniżej p rz ed sta w io n o k o d łą c z a zliczania odw iedzin n a stronie JSP:
*s *:;
W k odzie p ow yżej z o stała u ż y ta m eto d a o b słu g i z d arz en ia akcji, ale ró w n ie dobra m o żn a b y zasto so w ać m eto d ę akcji. O d c zy t po stronie serw era w y m a g a pobraBJ w arto ści przypisanej do o d pow iedniego k lu cz a z m ap y p aram etró w ż ąd an ia H T |j j D zięki w ykorzystaniu param etru żądania H T T P, naw et jeśli kom ponent T esti ngPar® zo stan ie zarejestro w an y w z asięgu re q u e s t, w arto ść lic z n ik a będzie rosnąć p o każdyjj
Po k lik n ię ciu łą c z a w a rto ść zm iennej c o u n te r z w ięk sza się o ł (w w y ra ż e n iu re p re zentującym w artość je st inkrem entacja zm iennej) i nie m a ju ż potrzeby obsługi zdarzenia akcji. P onow nie w a ru n k iem p o p ra w n eg o działania liczn ik a je s t z a re je stro w a n ie k o m p onentu testingP aram s w z asięg u se ssio n lub appl i c a tio n .
Ja va S e rv e r F a c e s S E c lip s e G a lile o . T w o rze n ie a plika cji
M echanizm naw igacji stron w JSF pozw ala n a definiow anie prostych reguł okreśłająeyM w aru n k i p rz ejśc ia p o m ię d z y p o sz c ze g ó ln y m i stro n a m i aplikacji. R e g u ły definiow ąfjj s ą w p lik u fa c e s-c o n fig .x m l łub in n y m p lik u X M L ro z sz e rz a ją c y m go, a u ru c h am ia fp po w y k o n a n iu akcji p rz y p isan y c h do k o m p o n e n tó w p o lec en ia (p rzy c isk łub łącze), f a l M e c h an izm u ru c h am ia n ia re g u ł je s t n a stęp u jący . N a zw a m eto d y akcji w raz z rezuflj tate m je j w y k o n a n ia (w p o sta c i ła ń c u c h a z n a k o w e g o ) s ą p rz e k a z y w a n e do obiebfli im p le m e n tu ją ce g o klasę a b strak c y jn ą N a vig a tio n H a n d le r, z d efin io w a n ą w JS F A l p N a p o d sta w ie ty ch w a rto ści oraz n a zw y bieżącej strony w id o k u s ą dopasow yw ane r a i guły naw igacji. Jeśli żad n a z re g u ł nie o d p o w ia d a k o m b in acji bieżącej strony widolgjj m etody akcji i rezultatu, to w ykonanie akcji p o w o d u je w y łą c z n ie ponow ne wyświetlęfiffi strony. K rótki p rz y k ła d ilu stru jący ten m ec h a n iz m z ap re ze n to w an o w ro zd ziale ł. na b a z || aplik acji K a lk u la to r T em peratur. W dalszej części tego p u n k tu m ec h an iz m nawigaęJJ - zostanie om ó w io n y bardziej szczeg ó ło w o , a inform acje n a tem a t m o żliw o ści rozszęS rz a n ia i p rz e d e fin io w y w a n ia sta n d ard o w e j im p le m e n ta c ji m e c h a n iz m u naw igacji N avig atio n H an d ler .z n a jd u ją się w ro z d ziale 4. (pi
3 .3 .1 . Definiowanie reguł naw igacji D e fin io w an ie reguł naw ig acji p o leg a n a określen iu , n a ja k ą stronę m a p rzejść użyff k o w n ik p o k lik n ię ciu p rz y cisk u lub łącza. R e g u ły naw igacji są d efin io w an e wewnątrz! elem en tu < n a v ig a tio n -ru ie > , k tó ry m o że zaw ierać d o w o ln ą liczbę p rzypadków n fj w ig a cji zd efin io w an y c h p rz y u ż y c iu e le m en tó w < n a v ig a tio n -ru le > , j a k w poniższymi przyk ładzie: < n a v ig a tio n -ru le > < d e sc rip tio n > R u le s fo r a ll pages in / js p di r e c t o r y . < / d e scrip tio n > < fro m -vie w -id > / js p / * < / fro m -vie w -id > < n a vig a tio n -c a se > Go to Login page. < / d e s crip tio n > log1n < to -v ie w -1 d > / js p / lo g in . js p < / to -v ie w -id > < /n a vig a tio n -c a se > < n a vig a ti on-case> < d e scrip tio n > L o g o u t and go to e n try p a g e .«/ d e s c rip tio n » logout_success < to -v ie w -id > / js p / in d e x .js p < / t o -v ie w -id > < / n a vig a tio n -ca se > < / n a v ig a tio n -ru le >
P rzy p ad k i naw ig acji określają, ja k i re zu lta t akcji m a spow odow ać p rzejście n a stronf w sk az an ą w elem encie < to-view -id> . R eg u ła naw igacji p ozw ala n a definiow anie wielj p rz y p a d k ó w n a w ig a c ji d la o k re ślo n ej stro n y , g ru p y stro n (p o w y ż sz y p rz y k ła d ) bąaj w szy stk ich stron. K o n ty n u u jm y zap re ze n to w an y pow yżej p rz y k ła d — je ś li użytkowi n ik znajduje się n a dow olnej stronie w katalogu /jsp (np. /js p /in d e x js p ), to po kliknięci!
■3ł 3. ♦ U żyw a n ie JS F
141
.p rz y c is k u lub łąc za , k tó re w y g e n eru je a k cję o w a rto śc i 1o g in , p rz e jd z ie n a stro n ę /js p /lo g in js p , natom iast je ś li'w y g e n e ro w a n ą w a rto śc ią b ę d zie 1o g o u t_ su ccess, to w y św ietli się ponow nie strona /jsp/index.jsp. Jeśli chcem y zapew nić użytkow nikow i m o ż liw ość zain icjo w an ia zdefiniow anej reguły, n a le ży n a stro n ie /jsp /in d e x.jsp u m ieścić odpow iedni elem ent U l, np.:
K liknięcie przy cisk u Login spow oduje zaw sze u a k ty w n ie n ie reguły, ja k o że w a rto śc ią akcji je s t w arto ść "lo g in ". K olejny p rz y k ła d p rzedstaw ia d o p re cy z o w a n ą regułę, d e fin iu ją c ą w a ru n e k p rzejścia p om iędzy dw iem a konkretnym i stronam i JSP: < n a vig a t1 o n -ru le> < fro m -v ie w -id > / js p / re v ie w e r/ re v ie w e rP a p e rL is t. jsp < / fro m -v ie w -id > < n a vig a tio n -ca se> paper_detai 1s_page < to -v 1 e w -1 d > / js p / a jtro r/ p a p e r0 e ta ils P a g e .js p < / to -v ie w -id > < /n a viga tio n -ca se > < n a v ig a tio n -ru le >
Jeśli reguła naw igacji nie zawiera elem entu łub w artością elem entu je s t to d o ty c z y ona w szy stk ich stron. W p o w y ż sz y m p rz y k ła d z ie n ie je s t isto tn e , czy w a rto ść "p a p e r_ d e ta i 1 s_page" je s t p rz y p is a n a n a sta łe , czy też je s t z w ra c a n a p rz ez o k re ślo n ą m etodę akcji. Jeśli u ż y tk o w n ik , k o rz y sta ją c ze stro n y /js p /r e v ie w e r / r e v ie w e rP a p e rL istjsp , uruchom i jak ą k o lw ie k akcję, k tó ra zw ró ci p o w y ż sz ą w arto ść, w a ru n ek uak ty w n ien ia reguły zostanie spełniony. A b y d o p recy zo w ać p rzy p ad ek n a w igacji, m o żn a użyć elem entu < fro m -a c tio n > , np.: < n a v ig a tio n -ru le > < fro m -v ie w -id > / js p / re v ie w e r/ re v ie w e rP a p e rL is t. js p < / fro m -v ie w -id > < n a vig a tio n -ca se> < fro m -a cti on>#{reviewerPaperL1 s t . goToPaperDetai1s}< / fro m -a c tio n > < f rom- outcome>paper_deta i 1s_page < to -v ie w -id > /jsp /a u th o r/p a p e rO e ta n sP a g e . js p < / to -v ie w -id > < / n a viga tio n -ca se > < n a v ig a tio n -ru le >
Z astosow anie w p o w y ż sz y m k o d z ie p o w o d u je , że w a ru n e k re g u ły je s t sp e łn io n y ty lk o w tedy, gdy u ż y tk o w n ik , k o rz y sta ją c ze stro n y /js p /rev iew e r/re vie w er P aperList.jsp, uruchom i akcję # { re v ie w e rP a p erL ist.g o T o P a p erD e tails} , która zw róci w artość p a p e rjje ta ils _ p a g e . E lem ent < fro n i-a c tio n > m oże zarów no doprecyzow yw ać e le m en t , ja k i z astę p o w a ć go. Je śli w d e fin ic ji p rz y p a d k u n a w ig a c ji w ystąpi w y łączn ie elem ent < fro m -a c tio n > , re g u ła b ę d zie u ak ty w n ia n a n iezależn ie od re zu lta tu generow anego przez akcję. K rótki opis w szystkich elem entów deklaracji reguł naw igacji w pliku konfiguracyjnym znajduje się w tabeli 3.7.
Ja va S e rv e r Fa ces i E clip s e G a lile o. Tw orze nie a plika cji W \|ljj
2.42
3- ♦ U żyw a n ie JS F
. es o 'i 3 .7 . E lem enty konfiguracji regid naw igacji
3.3.2 . -Nawigacja statyczna i dynamiczna
Nazwa ele m en tu
Liczebność
d e s c rip tio n
0
Opis elem entu
dispiay-nam e
0_ *
Opisowa nazwa reguły nawigacji do wyświetlania w narzęc ■>, .i. wspomagających wytwarzanie aplikacji z JSF. i
0 -*
Małe i duże ikony reprezentujące reguły nawigacji w narzędziach wspomagających wytwarzanie aplikacji z JSF.
0 -1
Identyfikator strony widoku, dla którego reguła jest stosowana - ^ Identyfikatory muszą.zawierać znak " J" (np. /lo g in , jsp) i zawierać symbol wieloznaczny (np. /jsp/*). Brak identyfi. . . . lub użycie wyłącznie dopasowuje wszystkie strony widoku do reguły. Dany identyfikator może być użyty w wielu przypa nawigacji, a także wielu regułach.
Element nadrzędny: < navigatio n--ruTe>
fro m -v ie w -i d
- *
nsvigâtion-caSc
Opis reguły nawigacji.
:
Przypadek nawigacji zawierający co najmniej identyfikator strony, która ma być wyświetlana w wyniku uaktywnienia reguły, oraz wyrażenie reprezentujące metodę akcji lub (i) wartość zwracaną w wyniku jej wywołania. Element nadrzędny: < n a vig a tio n -c a se > Q -s
Opis przypadku nawigacji.
d l s p l ay-name
o —*
Opisowa nazwa przypadku nawigacji do wyświetlania w narzędziach wspomagających wytwarzanie aplikacji z JSF.
0 -*
Małe i duże ikony reprezentujące przypadek nawigacji w narzędziach wspomagających wytwarzanie aplikacji z JSF.
0 -1
Wyrażenie języka UEL reprezentujące metodę akcji (np. "#{user. login}"). Jeśli element nie zostanie ustawiony, wszystkie / i j metody akcji brane są pod uwagę przy dopasowaniu reguły nawigacji.
from-outcome
0 -1
eK
Oczekiwany rezultat wykonania akcji dla uaktywnienia reguły i Jeśli element nie zostanie ustawiony, wszystkie rezultaty są ! j| brane pod uwagę przy dopasowaniu reguły nawigacji. Identyfikator strony widoku, która się wyświetli w wyniku 'j l uaktywnienia reguły. Standardowo na stronach JSP powinna to być pełna nazwa identyfikowana przez mechanizm zarządzania H widokiem, zawierająca znak "/" oraz pełną ścieżkę względem U głównego kontekstu aplikacji, np. (" /js p /e r r o r . jsp").
re d lr e c t
0 -1
W. n a jp ro stsz y m p rzy p ad k u n a w ig a c ja m ięd zy stro n a m i JSF m o że m ieć c h a ra k te r statyczny, tzn. zatw ierdzenie form ularza zaw sze będzie prow adzić do tej sam ej strony. N a w ig a c ja sta ty c z n a sprow adza się do um ie sz cz e n ia etykiety zw iązanej z n a w ig ac ją na stałe w definicji p rzycisku zatw ierdzającego form ularz, np.: < h: commandButton a c t ion-"goToLoginPage” v a lu e -" Loguj" />
K liknięcie przy cisk u będzie pow o d o w ać, że p o n iższy w aru n ek u a k ty w n ien ia p o n iż szej reguły zaw sze będzie spełniony. < n a v ig a tio n -ru le > < n a vig a tio n -ca se> goToLogi nPage / js p / lo g in . js p < / to -v ie w -id > < / n a viga tio n -ca se > < / n a v ig a tio n -ru le >
N aw igacja realizo w an a w ten sposób m oże służyć w y łą cz n ie do d efin io w an ia b e zw a ru n k o w y c h p o le c e ń p rz ejśc ia p o m ię d z y stro n am i, np. p r z e jd ź do stro n y lo g o w a n ia , p rz e jd ź do stro n y g łów nej itp. W rz e c z y w isto śc i w y m a g an ia d o ty cz ąc e n a w ig a c ji są z n ac zn ie w ię k sz e i dlatego m a o n a n a jc zę śc iej c h a ra k te r w a ru n k o w y , g d z ie w y b ó r docelowej strony w idoku zależy od danych w p ro w a d z o n y c h do fo rm u larza. T aki scena riusz działań określa się m ianem n a w ig a c ji d y n a m ic z n e j, a realizu je się go p o p rzez p rzy p isan ie do kom ponentu U l m eto d y akcji.
d e s c rip tio n
fro m -a c tio n
___________
Pusty element; jeśli zostanie użyty, powoduje przerwanie obsługij bieżącego żądania i przesłanie odpowiedzi do klienta, zawierającej J polecenie przekierowania HTTP. Polecenie zawiera pełny adresj-J URL strony zdefiniowanej w elemencie (w polu >fj§ Location nagłówka odpowiedzi). Konsekwencje przekierowania:! realizowanego po stronie klienta są omówione w dalszej części .jj rozdziału.
N a p rzy k ład o w y m ekranie lo gow ania p rz y cisk zatw ierd zający form ularz b ęd zie p o w iązan y z m e to d ą zd efin io w an ą w k o m p o n en cie w spierającym , np.
M eto d a akcji lo g in O przetw arza dane u w ie rzy teln iają ce (nazw ę u ż y tk o w n ik a i jeg o hasło), w pro w ad zo n e z form ularza, i w zależności od tego, czy u ż y tk o w n ik zo stał zi dentyfikow any, czy nie, generuje odpow iedni łańcuch z n ak o w y (p e łn y k o d m eto d y za m ieszczono w p u n k cie 3.2.1.1). publ ic S t r i ng ] o g fn () { //...p o zo sta ły k o d
if
(u se r != nul 1) { //.,, re tu rn "lo g in _ s u c c e s s "; } e ls e { re tu rn " fa i i ure" './/ponow ne w yśw ie tle n ie stro n y lo g o w a n ia
G dy zw rócona zostanie w artość lo gin_success, nastąpi przejście do strony /jsp/index.jsp, w przeciw nym w ypadku ponow nie w yśw ietli się strona /jspdogin.jsp, co definiują poniż sze reguły: < n a v ig a tio n -ru le > < fro m -v ie w -id > / js p / lo g in .js p < / fro m -v ie w -id >
J a v a S e rv e r F a c e s i E c lip s e G a lile o . T w o rze n ie aplikacj
#{authenticati onBean.1ogin} l ogi n_success < to-view -id> /jsp/index.jsp< /to-view -id> _ . #{authenticationBean. logi n} fai 1ure < to-view -id > /jsp /lo g in .jsp < /to -v iew -id > < /navigation-rule>
trzyganie niejednoznaczności w reguł; M echanizm naw igacji JS F je s t b ard zo elastyczny i p ozw ala n a sw obodne defini reguł, dzięki c z e m u m o ż n a d e fin io w a ć w ie le re g u ł d la tej sam ej stro n y w id o i w iele p rz y p ad k ó w n a w ig a c ji d la tej sam ej reguły. M o ż e się zd arzy ć, że d w a pi ki n a w ig ac ji b ę d ą sp e łn ia ć k ry te ria u a k ty w n ie n ia re g u ły , co je s t dość praw dopc gdy dew eloper k o rz y sta z sym boli w ieloznacznych. O to k o le jn o ść , z j a k ą weryfij s ą pa su jąc e p rz y p a d k i n a w ig ac ji: 1. p rz y p ad k i z a w ie ra ją c e z a ró w n o e le m en t , j a k i < fro m -acti 2. p rz y p ad k i sp e c y fik u ją c e ty lk o e le m e n t , 3 . przy p ad k i sp e c y fik u ją c e ty lk o < fro m -a ct1 o n > .
¿dział 3. ♦ U żyw a n ie JS F
:
■
145
odpow iedzi b ęd zie się znajdow ał p e łn y adres U R L now ej strony w id o k u , któ ra zostanie po b ran a p rzez przeg ląd ark ę dopiero w k o lejn y m żąd an iu . K o n sek w en c je p rz e k ie row ania są następujące: "
u ży tk o w n ik -w p olu adresu przeg ląd ark i w id z i adres U R L stro n y w idoku, k tó ra faktycznie je s t w yśw ietlana,♦ w y św ietlan a strona m oże zostać dodana do z ak ład ek p rz eg ląd a rk i (ulubionych stron), ♦ w ykon y w an y je s t ponow nie cały kod serw era aplikacji zw iąz an y z o b słu g ą żądania (np. z d efiniow any w filtrze), $ inform acj e p rzechow yw ane w z asięgu ż ąd an ia są tracone.
C elem p o k azan ia różnic p o m ięd zy p rz ek iero w an iem a z w y k łą n a w ig a c ją p rzed efiniujm y regułę naw ig acji dla aplikacji K a lk u la to r T em p eratu r, zap rezen to w an ej w ro z dziale 1. < n a v ig a tio n -ru le * < n a vig a tio n -ca se> sukces
Jeśli n ie istnieje żad n e d o p a so w a n ie p rz y p a d k u u ż y c ia lub m eto d a akcji zw ra to ść nul 1, to p o n o w n ie w y ś w ie tla n a je s t b ież ąc a strona.
P rz ek azy w an ie żąd a ń d la obu typów n a w ig a c ji z o stało z ilu stro w a n e n a ry su n k u 3.4, a p rz ed sta w io n e sch e m a ty z a w ie ra ją n a stęp u jąc e etapy:
N a w e t je ś li zn am y d o k ła d n ie a lg o ry tm ro z strz y g a n ia n ieje d n o zn a cz n o śc i w r n a w ig ac ji stron, n a le ż y raczej u n ik a ć n ie je d n o zn a cz n o śc i w reg u łach , gdyż s z a ją o n e czy teln o ść re g u ł, co je s t p o w a ż n ą n ie d o g o d n o ś c ią p rz y re aliz a cji pr< g rupow ych.
1. U ż y tk o w n ik z atw ierd z a form ularz, po czy m p rz eg ląd a rk a p rz esy ła żądanie p o b ra n ia strony P O S T K alkulator.jsp.
3 .3 .4 , Przekierow anie i n aw igacja poza JS F P rezen to w an e do tej p o ry re g u ły n a w ig a c ji w y k o rz y stu ją sc h e m a t przekazyw : d an ia w e w n ę trz n ie p o stro n ie se rw e ra . P o le g a on n a tym , ż e w trakcie przetwżądania, po fazie w y w o ła n ia m e to d a p lik a c ji, n a stę p u je u a k ty w n ie n ie odpov reguły naw igacji, w y re n d e ro w a n ie i p rz esła n ie do u ż y tk o w n ik a now ej strony (jeszcze w tym sa m y m c y k lu p rz e tw a rz a n ia ż ąd a n ia JS F). U ż y tk o w n ik p o otrz o dpow iedzi w id z i n a e k ra n ie n o w ą stro n ę w idoku, ale w p o lu a d resu przegląda św ietlan y je s t a d res U R L p o p rz e d n ie j stro n y w idoku. JSF um ożliw ia w y korzystanie alternatyw nego sposobu przechodzenia na n o w ą st p rzek a zy w an ia ż ą d a n ia p o stro n ie k lie n ta (przek iero w an ia). Jeśli uaktyw nioni zaw iera elem ent , to przerw ana zostanie obsługa bieżącego żądania, a słanej do k lie n ta o d p o w ie d z i b ę d zie p o lec en ie p rz e k ie ro w a n ia H T T P . W na
2a, Serw er generuje stronę W ynikjsp i przesyła j ą w odpow iedzi H T T P o statusie
200 OK. 2 b . Serw er przesyła odpow iedź o statusie 302 M o ved Tem porarily, który oznacza,
że zasó b został p rzen iesio n y i p o sia d a inny adres U R L . P o le L o ca tio n n a g łó w k a o dpow iedzi H T T P zaw iera p e łn y adres U R L stro n y W id o k jsp . 3. P rzeg ląd ark a w trybie n aty ch m iasto w y m p rz esy ła ż ąd an ie p o b ra n ia strony G E T W y n ik jsp . 4. S erw er generuje stronę W y n ik js p i p rz esy ła j ą w o d p o w ie d zi H T T P o sta tu sie 200 OK. Ponadto ry su n e k 3.4 ilustruje istotne ró ż n ic e zw iązane z w y św ietlan iem strony Wy n ik jsp , tj. ró ż n e w yn ik i tem p e ra tu ry oraz różne w arto ści w p a sk u a d resu przeglądarki. Poniew aż dane form u larzy przech o w y w an e s ą w k o m p o n en cie w sp ie rają cy m o zasię gu żądania, p o p rzek iero w an iu następ u je ich w y zero w an ie (aby w y n ik i b yły p o p ra w nie w yśw ietlane, kom p o n en t w sp ierający m usi b y ć w id o c zn y w z asię g u sesji).
Ja va S e rv e r F a ce s i E c lip s e G a lile o, Tw orzenie apiika
1 46
S e rw e r < n a v i g a c i o n - r u 1e > < n 3.V i q a t i o n - c a 3 e >
.„ r fz iał 3. ♦ U żyw a n ie JS F
W zakresie internacjonalizacji i lokalizacji JS F k o rz y sta z ro z w iąz ań o p racow anych dla p latform y Ja v a 2. D o reprezentow ania sp e c y fic zn y c h u sta w ień re g io n a ln y c h służy klasa 'j a v a ,ü t i l .Lo cale. D ane aplikacji m o g ą być p rz ec h o w y w a n e w p a k ie ta c h z a sobów (ang. resource, bundle) u w z g lęd n iają cy c h sp ecy ficzn e u sta w ien ia regionalne (polityczne, g eo graficzne czy kulturow e). D o re p re z en tac ji p a k ie tó w zasobów służy idasa ja v a . u t i l . ResourceBundle, a zasoby są p rzec h o w y w a n e w p o sta ci plik ó w tek stow ych .p ro p ertie s.
1
< t o - v i e w - id > / W y n i k .j sp < / - o - -j i e w - i d >
< / n a v i a a ~ io n - c a s e > < / n a v 1.g a t i o n - r u 1 e >
S e rw e r
2a
-41---- ——— ---ro „ .... ... w diii -<*
i
N aw et je ś li nie je s t w ym agane, aby aplikacja u d o stę p n ia ła in terfejs w w ie lu języ k ach , w arto korzystać z p a k ie tó w zaso b ó w do p rz ec h o w y w a n ia tek stu k o m unikatów , ety kiet, p odpow iedzi, u staw ień k o n fig u racy jn y ch itd., w y stę p u ją c y c h w aplikacji. C en tralizacja p rz etw a rza n y ch łańcuchów znak o w y ch p o z w a la n a ła tw ie jsze zarządzanie zasobam i, a także w y m u sza ich spójność. Jeśli n a p rz y k ła d o k reślo n y tek st p o jaw ia się na w ielu stronach, to w arto um ieścić go w p a k ie cie z aso b ó w i o d w oływ ać się do tego p a k ie tu z w ie lu stron. R ów nież ew en tu aln a m o d y fik a cja teg o tek stu n ie będzie w ym agać w ło ż en ia dużego w ysiłku, z w łaszc za że d o stęp n e s ą specjalizo w an e w ty c z ki p rogram istyczne, ułatw iające p racę z p a k ietam i z aso b ó w w E clipse.
¡ \
- rukv ; w
4 -------------► Ü.0
;■
:/ n a v i g a t i o n - c a s e> ./n a v i g a ń i c n - r u l e >
147
A n g ie ls k ie s ło w o in te rn a tio n a liz a tio n je s t c z ę s to s k ra c a n e d o H 8 n , ja k o że p o m ię d zy p ie rw s z ą i o s ta tn ią lite rą te g o te rm in u w ję z y k u a n g ie ls k im w y s tę p u je 18 zn a k ó w . A n a lo g ic z n ie lo c a liz a tio n je s t s k ra c a n e d o llO n .
3.4.1 . Lokalizatory R y s u n e k 3 .4 « S chem aty p rzekazyw ania żądania w p rzyp a d ku standardow ej nawigacji (u góry)
i p rzekiero w a n ia (na dole)
3.4. P rzetw arzan ie p akietó w zasobó . i in tern acjon alizacja T w o rzą c d o w o ln y in te rfe js u ż y tk o w n ik a , n a le ż y p a m ię ta ć o tym , że p otenc u ż y tk o w n ik a m i aplik acji m o g ą b y ć o so b y n a c ały m św iecie. D la aplikacji W W W jejl to szczególnie istotne ze w z g lęd u n a jej dostępność w globalnej sieci. G dy uruchomiml aplikację p rz e z n a c z o n ą d la u ż y tk o w n ik ó w innej n a rodow ości, p ie rw sz ą niedogodnfj ścią, k tó rą zauw ażym y, b ęd zie inny ję z y k . K o le jn ą m oże się okazać w łaściw e tan ie daty czy zap isó w liczb o w y ch . N a w e t u ż y tk o w n ic y po słu g u jący się tym ję z y k ie m m o g ą k o rz y sta ć z ró ż n y c h fo rm a tó w z a p isu liczb czy d a ty — przykładęlj n iec h b ę d ą B ry ty jc z y cy i A m ery k an ie. P roces p rz y g o to w an ia ap lik a cji do w sp ie ran ia w ięcej niż je d n e g o ję z y k a i t reg io n a ln y c h je s t n a zy w a n y i n te r n a c jo n a liz a c ją (ang. internationalization). Prows adaptacji a p lik a cji do w s p a rc ia k o n k re tn e g o ję z y k a lub u staw ień regionalnyc w a n y je s t lo k a liz a c ją (ang. localization).
K onkretne ję z y k i i ustaw ien ia regionalne s ą rep re z en to w a n e za p o m o c ą k o d ó w opra cow anych p rz ez In tern a tio n a l Standardization f o r O rganization. Ję z y k je s t re p re z en tow any za p o m o c ą k o d u składającego się z d w ó ch m ały c h liter, np. p l d la ję z y k a p o l skiego, en d la ję z y k a angielskiego itd. L o k aliza cja re g io n u je s t re p re z en to w a n a p rzy u życiu k o d u k ra ju złożonego z dw óch w ielk ich liter, np. P L dla P o lsk i i U S d la Sta nów Z jed n o czo n y ch A m eryki Północnej. K o d y ję z y k ó w d efin iu je sta n d ard IS O -639, a k ody krajó w IS O -3 1 6 6 1. Tworząc konkretne ustaw ienia (tzw. lokalizatory), m ożna użyć w yłącznie kodu języka. K od k ra ju je s t opcjo n aln y i dołącza się go do k o d u ję z y k a p o z n a k u p odkreślenia, np. lokalizator enJJS oznacza jęz y k angielski używ any w U S A . R óżnica pom iędzy użyciem lo kalizatorów en i enJJS je s t taka, że p ierw szy nie definiuje k ra ju , w ięc n ie m o żn a go użyć do fo rm ato w an ia w alut, sposobu w y św ietlan ia liczb i in n y ch z ag ad n ień sp ecy ficznych dla p o sz c ze g ó ln y c h krajów . Im plem entacja lo k alizato ró w w Javie p o z w ala defin io w ać je s z c z e je d e n opcjonalny elem ent — tzw . w ariant, który określa specy ficzn y dla p ro d u c en tó w i p rzeg ląd arek kod, np. W IN dla W indow s, P O S IX dla POSDC, M A C dla M acintosh itd., jed n ak w apli kacjach W W W n ie m a o n p raktycznego zastosow ania.
Kody ISO-3166 i ISO-639 dostępne są na oficjalnej strome International Organization for Standardization pod adresem htipd/w w w . iso.org.
1 48
Ja v a S e rv e r F a c e s i E clip s e G a lileo. T w o rze n ie aplil
,dział 3. ♦ U żyw a n ie JS F
T w orząc lokalizatory d la a p lik acji JS F, zaw sze n a le ży ro zw aży ć dokładnie, dla je s t ona przeznaczona, i u żyć w ła śc iw y c h ustaw ień. Jeśli d e fin icja lokalizatorćL I B dzie zaw ierać k o d kraju, JS F b ęd zie w sp ierać po p raw n e w y ś w ie tla n ie 'liczb, w alet dat. P rzykładow o różnice w fo rm ato w a n iu daty w P o lsce (dzień, m iesiąc, rok) i N. (m iesiąc, dzień, rok) m o g ą b y ć ź ró d łe m p ro b lem ó w i w arto u ż y w ać szczególe- lo k ałizato ró w , b y k o m p o n e n ty w y ś w ie tla ją c e d an e p o tra fiły a u to m a ty c zn ie a w łaściw y form at.
[ 3,8, E lem enty konfiguracji lokalizacji
tjjazwa. elem entu
L iczebność
■(jefault-locale
0 —1
Domyślne ustawienia lokalizacji dla aplikacji (kod lokalizatora, np. en_GB lub p l). Jeśli element nie zostanie ustawiony, ustawienia językowe i regionalne będą skopiowane z maszyny wirtualnej Javy.
0 —*
Deklaracja lokalizacji wspieranej przez aplikację (kod lokalizatora, np. en_GB lub p l).
Element nadrzędny: < lo c a le -c o n fig >
suppor t e d -lo c a le
3 . 4 . I . I . D eklarow anie lo k a liza cji w pliku konfiguracyjnym Pierw szym krokiem do internacjonalizacji aplikacji JSF jest zadeklarow anie, ja k ie ---ii ustaw ienia reg io n aln e m a w sp ie rać aplik acja. Jest to b ardzo w ażne, gdyż darki W W W p rz e sy ła ją w n a g łó w k ac h żąd a ń H T T P sp ecy fik acje w spieranych — w ie ń ję z y k o w y c h . N a p o d s ta w ie p re fe re n c ji p rz e g lą d a re k o ra z lo k a liz a to ró d e k la ro w a n y c h w a p lik a c ji JS F d o p ie ro u sta la n y je s t ję z y k , w k tó ry m ra generow any b ędzie w idok.
3,4,1.2. D efiniow anie bieżącej lokalizacji na stro n ie w idoku L ok alizato r d la strony aplikacji m oże zostać p rz ed e fm io w a n y za p o m o c ą w ła śc iw o ści lo c a le w z n aczn ik u , d efiniującym stronę w idoku. W ó w czas cała zaw arto ść strony b ędzie w y św ietlo n a w ję z y k u o kreślonym p rz ez w arto ść 1ocal e, np.: < f:v ie w lo c a le -" p l "> < h: form>
N iech nagłów ek żądania A c cep t-L an g u ag e z a w ie ra n a p rz y k ła d w a rto śc i n q=0.7 , e n ; q=0.3, które oznaczają, że przeglądarka prefem je języ k polski (dom yślny przeglądarki), ale ak cep tu je ró w n ie ż w y św ietlan ie w id o k u w ję z y k u angielski u sta w ie ń am erykańskich i w jęz y k u a n g ie lsk im (o g ó ln ie ). S to p ie ń a k c e p ta c ji i w artość param etru q. Jeżeli w naszej aplikacji JS F z a d e k la ru jem y w sparcie d la ję z y k a p olskiego, tc m atycznie strony w id o k u b ę d ą w y św ietlan e w ję z y k u p o lsk im (n iezależn ie oc czy b ędzie to ję z y k dom y śln y ap lik acji, czy ję z y k w sp ieran y p rzez aplikację). ' je d n a k aplikacja JS F n ie w s p ie ra ła ję z y k a p o lsk ieg o , to b ędzie u ż y w an y kolejny z listy n agłów ka żądania, w sp ie ra n y p rz ez aplikację JSF. G d y b y aplikacja Ji w sp ie rała żadnego z trze ch z d efin io w an y c h w nagłó w k u jęz y k ó w , to strony ap b ę d ą w yśw ietlane w d o m y śln y m ję z y k u aplik acji JSF.
Zaw artość pow yższej strony będzie zaw sze w yśw ietlana w jęz y k u polskim , o ile w pakie cie zasobów z o stan ą zdefiniow ane odpow iednie etykiety w tym języku. W artością atry butu m oże być rów nież w yrażenie re p re z e n tu ją c e w a rto ść, np. 1o c a l e="#{vi s i tB e a ri. *M o c a l e } ", dzięki c zem u m o żn a d y n am icznie zm ieniać w e rsję ję z y k o w ą strony.
Uwaga
D eklarow anie lokalizacji w p lik u konfiguracyjnym i odbyw a się p rz y u ż y ciu el tó w <1 ocal e- c o n fig * , z d e fin io w a n y c h w w ęźle , np.: < a p p lic a tio n * < lo c a le -c o n fig * «s u p p o rte d -! ocal e>de < / a p p lica tio n *
’ Opis e lem en tu
HI
N ie należy m ylić s p o s o b u d zia ła n ia atrybutu lo ca le dla kom po nen tu w idoku ze s p o s o b e m d zia ła n ia a tryb u tu lang d la k o m p o n e n tó w U l. A try b u t lo c a le w p ływ a na p ro c e s g e n e ro w a n ia w id o k u po s tro n ie s e rw e ra , n a to m ia s t a try b u t lang w p ływ a na s p o s ó b in te rp re to w a n ia e le m e n tó w s tro n y w p rz e g lą d a rc e (je s t to s ta n d a rd o w y a try b u t H T M L ).
3.4.1.3. D efiniow anie bieżącej lokalizacji w kodzie aplikacji L okalizatory reprezentow ane s ą w kodzie za p o m o c ą obiektów klasy Java . u t i 1 . Local e, któ ra u d o stę p n ia trzy k o n stru k to ry do tw o rzen ia instancji:
• f i li 'SS®
W p ow yższym p rz y k ła d zie a p lik a cja je s t u staw io n a n a obsługę ję z y k a polskiego, ak m a rów nież w spierać o b słu g ę ję z y k ó w angielskiego (dla u sta w ień am erykańs k ic M oraz niem ieckiego (ogólnie), w zależ n o śc i od p otrzeb klientów . K ró tk i opis elemensi tó w składni deklaracji lo k aliza cji zo stał p rzed staw io n y w tabeli 3.8.
♦ L o ca le C S trin g language), np. L o c a le C p l" ) ,
♦ L o c a le ( S tr in g language, S tr in g c o u n try ), np. L o c a le !" p l " , "PL"), ♦ L o c a le lS tr in g language, S tr in g c o u n try , S tr in g v a r ia n t ) , np. L o c a le ( " p l " , " P L " . "W IN").
A b y zm ienić b ież ąc e u sta w ien ia jęz y k o w e i reg io n aln e w k o d zie aplik acji JSF, n ależy u staw ić w łaściw o ść lo c a le d la bieżącej strony w id o k u , np.: FacesContext.getC urrentInstance!) .getViewRoott) . setlocale(new L ocaleC pl")):
Ja va S e rv e r Faees i
150
e lip sę G a lile o. Tw orze nie aplikaęj||j
B ie ż ą c a stro n a re p re z e n to w a n a je s t p rzez k o m p o n en t U IY ie w R o o t dostępny w / ■ F a c e s C o n t e x t . R o z w ią z a n ie to je s t bardzo przy d atn e, gdy pro jek tu jem y aplikaj ra m a p o z w a la ć n a w y b ó r w e rsji językow ej (k o m pletny p rz y k ła d znajduje sii ’ Stingu 3 .11).
3 .4 .2 . P a k ie ty zasobów L o k a liz u ją c a p lik a cję Javy, szybko u z y sk u jem y bardzo d u ż ą liczbę łańcuchć k o w y c h , k tó re m u sz ą z o stać przetłum aczone. W szelkie etykiety, kom unikaty p o d p o w ie d z i i in n e e le m e n ty in te rfe jsu u ż y tk o w n ik a , w y stę p u jąc e w w ielu w ■■■ ję z y k o w y c h , m u s z ą b y ć ła tw o d ostępne. Z arz ą d z a n ie ty m i zaso b am i m oże c e n tra liz a c ja w lo k a liz o w a n y c h p a k ie tac h z aso b ó w , z a p isy w an y c h w plikacściw ości .proverv.es, które s ą rep rezen to w an e przez obiekty podklas klasy j a v ; R e s o u rc e B u n d le .
W aplikacji JS F istnieją dw ie m ożliw ości deklaratyw nego ustaw ienia pakietów z w p lik u f a c e s - c o n fig .x m l, tj. p o p rz e z w y k o rz y sta n ie e le m e n tó w . P ierw sza z nich dotyczy pakietów kom unikatów o błędach w anych p rz e z k o n w e rte ry i w alid ato ry , które s ą u m ie sz cz a n e w kolejce kom un i n ie ja w n ie o d b iera n e p rz e z sp ecjaln e k o m p o n e n ty U l słu ż ąc e do ich w yśw L P a k ie ty k o m u n ik a tó w s ą o m ó w io n e w n a stęp n y m punkcie. D ru g i typ d e k la rac ji d o ty cz y p a k ie tó w zaw ierający ch kom u n ik aty , do których " p u ją ja w n e o d w o ła n ia p rz y u ż y c iu w yrażeń re p re z en tu jąc y ch w artości w dowk o m p o n e n ta c h U l. N a listin g u 3.9 p rzed staw io n o d eklarację p akietu, który nr z w ie ra ć d o w o ln e lo k alizo w an e łań cu ch y z n ak o w e w w e rsjac h angielskiej i p. ,i K ró tk i opis e le m en tó w sk ła d n i deklaracji p a k ie tu z aso b ó w zo stał p rzedstaw ion1 b e li 3.9. L isting 3 .9 . D e k la r a c ja p a k ie tu z a s o b ó w < a p p l ic a t io n > <1ocale-config>
< d e fa u lt-lo c a le > p l< / d e fa u lt-1 o c a le > ert ■rresource-bundl e> resources. ISRPMessages messages < / a p p li c a t i o n >
P akiety zasobów są zw ykłym i plikam i w łaściw ości, zaw ierającym i pary klucz-1 (patrz strona 109 „ M a p y w ła śc iw o ści i p lik i .properties”). K a żd a w artość map chow yw anej w p lik u w ła śc iw o ści p o siad a klucz, któ ry je s t iden ty czn y d la w sz w ersji języ k o w y c h . W ersje ję z y k o w e przech o w y w an e s ą w o d ręb n y ch plikai ściwości, różniących się przyrostkiem w postaci kodu języka. W przykładzie z list b ędą to pliki resources/lSR P M essages,properties, resources/ISRP M essages_en.pr i resources/ISR P M essagesjpl.properties. E lem ent w ystępujący w dc
[ział 3,
. U żyw a n ie JS F
15 1
'
,la-3dB, E le m e n ty k o n fig u r a c ji p a k ie tó w z a so b ó w elementu
. Liczebność.
J L ; lay.name a d :'con 1 .a
'•
O pis elem entu
Element nadrzędny: < re source-bundle
0 —*.
Opis. pańciu zasobów.
0
Opisowa nazwa wyświetlana w narzędziach wspomagających wytwarzanie aplikacji z JSF.
P
-
Małe i duże ikony reprezentujące pakiet zasobów w narzędziach wspomagających wytwarzanie aplikacji z JSF. W pełni kwalifikowana nazwa instancji java .u til .ResourceBundle. Przykładowo nazwa reso u rce s . ISRPMessages odpowiada plikowi resources/ISRPMessages.properties (oraz plikom wersji językowych z przyrostkami, np. resources/ISRPMessagesjpl.properties).
w ar ■
Nazwa identyfikatora dostępna w kontekście aplikacji JSF, pozwalająca na odwołanie do instancji Ja va . u ti 1. ResourceSundl e. na listingu 3.9 definiuje nazw ę p lik u do m y śln y ch w a rto ści p a k ie tu z asobów — je d y nego p lik u b ez p rz y ro stk a z aw ierająceg o zestaw w arto ści d o m y śln y ch , k tó re s ą uży wane, gdy dany klucz nie w ystępuje w w ersji językow ej. W szystkie pliki pow inny być um ieszczone w m ie jsc u w id o c zn y m d la ścieżki d ostępu do k las aplikacji (cla ssp a th ). Element określa identyfikator (tutaj messages), który będzie pozw alał odw ołać się do p akietu zasobów , np.:
3 .4 .2 .1 . Zmiana ustawień językowych w kodzie aplikacji F ra g m en t strony JS P zap re ze n to w an y n a listingu 3.10 zaw iera p rz y k ła d w ył n ia lokalizo w an y ch p lik ó w do z m ia n y w ersji jęz y k o w e j aplikacji. D w a łacz: ła ją n a przełączan ie w ersji jęz y k o w y c h : angielskiej i p olskiej, a in fo rm acja o w ersji językow ej w yśw ietlana je s t w elem encie (rysunek 3.5). fazy renderow ania sym bol zastępczy {0} zaw arty w treści kom unikatu c o u n try , m ien ian y je s t na k o d w ersji ję z y k o w e j aplikacji, p rz ek a zy w an y za p o m o c ą z < f :param> (patrz p u n k t 3.2.3, „P a ram etry z ac ja k o m p o n en tó w U l”). O bsługa akcji generow anych przez kliknięcie łącza realizow ana jest za p o m o cą m etod’ z d arzeń ch angelocale ( p a tr z l i s t i n g 3 .1 1 ), zdefiniow anej w k om ponenci ra ją cy m stronę, a p a ra m e tr p rz e k a z y w a n y p rz ez a k ty w n e łąc ze słu ż y do us w ersji języ k o w ej w k odzie m eto d y . Z m ia n a w ersji językow ej o d b y w a się ustaw ien ie w łaściw ości 1ocal e. L is t in g 3 .1 0 . K orzystanie z p likó w zasobów na stronach JSP //przeslanie na serwer parametru locale= ’p l’ //przeslanie na serwer parametru locale= 'en’ < t. param va i ue= 7 f{fa ce s C o n te xt. v i ewRoot. 1ocal e j " />/!wyświetlenie zmiennej locale
L is t in g 3 .1 1 . Z m iana bieżących ustaw ień ję z y k o w y c h w kodzie aplikacji p u b lic void c h a n g e lo ca le (A c tio n E v e n t e ve n t) { FacesContext co n te xt= F a ce s C o n te xt.g e tC u rre n tIn s ta n c e !) : S t rin g language = c o n te x t.g e tE x te rn a lC o n te x tO .getRequestParam eterMap() . g e t ( “ l o c a l e " ) : i f (la n g u a g e != n u ll) c o n te x t. getView R oot( ) . s etL o ca le(n ew L o c a le (1anguage)) :
□
h tt¡
S C ID /K a iłu a t r r r - c c ' / L c i 3 e D c m e j r o
. językowe ’pi
2. Dynamiczne ładowanie pakietów i znacznik a Ite rn a ty w n y m ro z w ią z a n ie m d la d e k la ro w a n ia p a k ie tó w z a s o b ó w w p lik u fa c e s configam i je s t u ży cie zn acznika < f : 1oadBundl e> (w p o p rz ed n ich w ersjach JS F b yło to jedyne dostępne rozw iązanie). R ó ż n ic a po leg a n a tym , że z ad ek laro w an y p a k ie t m oże zostać z a ład o w an y na kon k retn ej stro n ie, do której o g ra n ic z o n y b ę d zie z asię g je g o w idoczności. P rz y k ła d poniżej ilu stru je ład o w a n ie p a k ie tu z aso b ó w i w y k o rz y stan ie kom unikatów w kom p o n en cie w y św ietlający m napis: < f :1oadBundle basenam e="resources. ISRPMessages" var="m essages” /> < h :o u tp u tT e xt va 1u e -"# {m essages[’ c o u n try . i n f o '] } " / >
Znaczenie atrybutów basename i var je st analogiczne do elem entów deklaracji z tabeli 3.9. K orzystanie z tego ro z w ią z a n ia m a z n aczen ie p ra k ty c z n e tylko w te d y , g d y c h cem y udostępnić zaso b y d la w y b ra n y ch stron. D zięki m o żliw o śc i d y n am icznego ładow ania pakietów z aso b ó w m o że m y łań cu ch y znakow e u m ie sz cz a ć w w ielu pakietach, które będą pełnić różne funkcje w aplikacji. N a przykład łańcuchy znakow e przeznaczone do w yśw ietlan ia m o g ą b y ć um ieszczo n e w pak iecie zad e k la ro w a n y m w fa ce s-c o n fig .x m l, a ustaw ien ia k o n fig u rac y jn e (np. p o łąc ze ń do b a z y d a n y ch , do serw era p o czto w eg o itp.), które nie w y m a g a ją lokalizacji, m o g ą być u m ie sz cz a n e w pak ietach ład o w an y c h dynam icznie. D ostęp do p a k ie tu z aso b ó w w k odzie aplikacji z ap e w n ia ją statyczne m etody: ♦ R e s o u rce B u n d le .g e tB u n d le (S trin g bundleName); ♦ R e s o u rce B u n d le .g e tB u n d le (S trin g bundleName, Lo ca le io c a le ) : ♦ R e s o u rce B u n d le .g e tB u n d le (S trin g bundleName, Lo ca le lo c a le . C lassLoader lo a d e r ) :
P rzek azy w an y o b iek t bundleName je s t iden ty fik ato rem zasobu, obiekt lo c a le re p re zentuje u sta w ien ia jęz y k o w e i regionalne, a obiekt lo a d e r — m ech an izm ład o w an ia klas. W p rz y p a d k u k o rz y stan ia z jed n o a rg u m e n to w e j w e rsji m eto d y , w a rto ś c ią do m y śln ą w ła śc iw o ści lo c a le je s t bieżące ustaw ienie lo k alizacji m aszy n y w irtualnej (dostępne m etodą statyczną L o c a le .g e tD e fa u ltO ). D om yślną w artością 1oader jest obiekt m ech an izm u ła d o w a n ia klas w y k o rzy stan y p rzez o b iek t k lasy w yw ołującej m etodę, tj. :hi s.g e tC la s s C ) . g e tC la s s L o a d e r().
B0zd zh rf'- F U ż y wanie JS F_________________■ ____________
P oniżej z a m ie sz c z o n o p r z y k ła d m e to d y k la sy p o m o cn ic ze j, służącej do w arto ści z lo k a liz o w a n e g o z a s o b u w aplik acji JS F (listing 3.12): . ' -
.# FacesMessage.SEVERITY_INFO — reprezentuje kom u n ik aty , k tó re p o sia d aja
charakter inform acyjny i nie d o ty cz ą błęd ó w (w artość dom yślna),
L is tin g 3 .1 2 . K o d m etody p o m o c n ic z e j do p o b ie r a n ia lokalizow anych łańcuchów znakowych
.♦ FacesMessage. SEVERITY_WARN — o strzega o m ożliw ości w y stą p ien ia błędów ,
Im port J a v a .u t i l .M Is s ln g R e s o u rc e E x c e p tlo n ; Im port j a v a . u t l 1 .R esou rceB u nd le : im port ja v a x .f a c e s . c o n t e x t .F a c e s C o n t e x t :
♦ FacesMessage. SECURITYJFRRGR — inform uje o w y stą p ien iu b łęd ó w , + FacesMessage. SECURITY_FATAl — zaw iadam ia o w ystąpieniu p ow ażnych błędów .
p u b lic c la s s R e s o u rc e U tlls { p u b lic s t a t i c S t r in g g e tS trin g F ro m B u n d le (S trin g bundleName. S trin g key. FacesC ontext c o n t e x t ) { C lassLo ader lo a d e r = T h re a d . c u rre n tT h re a d !) . g e rC o n te xtC la ssL o a d e ri) ; ■ i f (1 oaaer - - n u l1) . lo a d e r - Cl a s s lo a d e r . g e tS yste m C la ssL o a d e r!) ; S t r in g t e x t - n u l1: R esourceBundle b un dle = R esourceB undle. getBundle(bund!eName, con text • .g e tV ie w R c o t!) .g e t L o c a le ! ) , lo a d e r ) ; try { t e x t = b u n d le .g e t S t r in g ( k e y ) : ’> cate* d i i s s ) n g R eso u rceE xcep tlo n e) { t e x t = "key " + key + " not found” :
}
Kom unikaty m o g ą być tw orzone i dodaw ane do kolejk i k om unikatów : ♦ p rzez kom ponenty U l, k onw ertery i w alid ato ry , które po n a p o tk a n iu b łęd ó w podczas poszczeg ó ln y ch faz p rzetw arzan ia ż ąd an ia generuj ą k o m u n ik a ty poziom ie istotności FacesMessage. SEVERITY_INFO, ♦ dynam icznie w kodzie ap likacji — p o zio m istotności definiuje p ro g ram ista (zagadnienie om ów ione w rozdziale 5., przy okazji d efin io w a n ia w ła sn y c h konw erterów ).
:i*
re tu rn t e x t :
i
'
}
155
g
K om unikaty znajdujące się w kolejce utrzym yw anej przez obiekt kontekstu aplikacji JS F m ogą zostać w ykorzystane w fazie renderow ania p rz ez k o m p o n en ty słu ż ąc e do w y św ietlania Html Messages i Html Message, rep rezen to w an e n a stro n a ch JS P zn aczn ik am i i (patrz pun k t 3.7.1.8). K o le jk a k o m u n ik a tó w dostępna jest program ow o w obiekcie FacesContext (patrz ro z d ział 4.).
I S
N a stę p u ją ce u ż y cie m e to d y w k o d z ie aplikacji: R esourcellti Is .g e tS trin g F ro m B u n d le ( "re so u rc e s . ISRPmessages". "c o u n try . i n f o " );
je s t a lte rn a ty w ą d la z a p re z e n to w a n e g o n a p o c zą tk u tego p u n k tu ład o w an ia łańcuch''’ z p a k ie tu z aso b ó w n a stro n ie JS P.
3 .4 .3 , P akiety kom unikatów Istotnym z ag a d n ie n iem z w ią z a n y m z w y tw a rza n iem interfejsu u żytkow nika d lty jjj w olnej aplik acji je s t p ra w id ło w e w y św ie tla n ie kom u n ik ató w o błędach. B łędy wyku p u jące w a p lik a cji m o ż n a p o d z ie lić n a dw ie grupy: b łęd y aplikacji (zw iązane z logiSf« b iz n e s o w ą p o łą c z e n ia m i do b a z d a n y c h itp.) oraz błędy w ynikające z nieprawidłowow p ro w ad z an y c h d a n y ch (n ie k o m p le tn e lub niep o p raw n e dane w form ularzach). W ystąpienie błędu aplikacji zazw yczaj pow oduje przejście do specjalnej strony, jącej in fo rm ację o je g o p rz y c z y n ie . W y stąp ien ie b łęd u zw iązanego z niewłaścńyfptg w p ro w ad z an ie m d a n y ch z az w y c z a j p o w o d u je p onow ne w yśw ietlenie strony z nie’ ściw ie w y p e łn io n y m fo rm u la rz e m oraz k o m u n ik a te m d otyczącym p rzyczyny w> * p ie n ia b łę d u (o p c jo n a ln ie z a w ie ra ją c y m in fo rm a cje n a te m a t o c ze k iw an e g o fo rm ljl i zakresu w a rto ści w p ro w a d z a n y c h zm iennych). K om u n ik at w a p lik a cji JS F je s t re p re z e n to w a n y p rzez klasę FacesMessage, która ucun iuje trzy .w łaściw ości k o m u n ik a tu : treść w w e rsji skróconej, treść w w ersji szcze|jj łow ej oraz p o z io m isto tn o ści (ang. se v erity level), będ ący w a rto ścią typu wyhczeßio*’ w ego enum. P o z io m y isto tn o ści k o m u n ik a tó w :
M echanizm obsługi kom u n ik ató w JS F zap ew n ia m ożliw ość k o rz y sta n ia z różnych w ersji jęz y k o w y c h k o m u n ik a tó w w aplikacji. P onadto stan d ard o w e w a lid a to ry i k o n wertery posiadają gotow e pakiety kom unikatów zdefiniow ane w językach: angielskim , francuskim , hiszp ań sk im i n iem ieck im (nie w szy stk ie w ersje z a w ie ra ją p rz ed e fin io w ane w artości). W referencyjnej im plem entacji stan d ard o w e p a k ie ty kom u n ik ató w zn a jd u ją się w p a k ie cie j a v a x . f a c e s , w p lik u M essages.properties (w szystkie k lu cz e i w a rto ści zdefiniow ane w p lik u zostały p rzed staw io n e w d o d a tk u D ). P a k ie ty kom u n ik ató w s ą sk o n fig u ro w a n e n a p o d sta w ie z w y k ły ch p a k ie tó w z a so b ó w Ja v y (p a kietów R e so u rc eB u n d le, z aw ie ra ją c y c h p a ry k lu cz -w a rto ść) i w y ró ż n ia ją się ty lk o p rz y ję tą k o n w e n cją n a d aw a n ia w a rto ści kluczy. Poniżej znajd u je się frag m e n t p lik u M essages.properties z w ersjam i sk ró c o n ą i sz c ze g ó ło w ą k o m u n ik a tu g en ero w an eg o przez k o n w erter w p rz y p ad k u b łęd u konw ersji: ja v a x .fa c e s .c o n v e rte r.ByteConverter.BYTE={2}: ’ ' { 0 } ' ' must be a number between 0 and 255. ja v a x .fa c e s .c o n v e rte r.B y te C o n v e rte r.B Y T E _ d e ta il= {2 }: ’ ' { 0 } ' ' must be a number '♦between 0 and 255. Example: {1 }
W ersja szczeg ó ło w a w y ró ż n ia się p rz y ro stk ie m __detail w w a rto śc i k lu c z a id en ty fi kującego kom unikat. W ersje sz c ze g ó ło w e n ie w y s tę p u ją w e w sz y stk ic h k o m u n ik a tach — b ra k w ersji szczegółow ej dla danego ko m u n ik atu n ie je s t b łęd e m . S ym bole zastępcze, np. {0}, um ożliwiają, w yśw ietlanie obiektów przekazyw anych do kom unikatu, np. w trak cie tw o rzen ia o b iek tu FacesM essa ge. K ażda aplikacja m oże być p o w ią za n a z p o je d y n c z y m p a k ie te m k o m u n ik a tó w , któ ry jest definiow any w pliku fa ces-co rfig .xm l. Pakiety kom unikatów (ang. m essage bandies) deklarow ane są inaczej n iż p a k ie ty zasobów , tj.:
¿56
Ja va S e rve r F a c e s i E c lip s e G a lile o. Tw orzenie ap
< a p p lica tio n > «message-bund! e>ISRPfiessages < lo c a le -c o n fig > < d e fa u lt-1 o c a le>pl « s u p p o rte d -1o c a le>en < / lo c a le -c o n fig > ■< / a p p lic a tio n >
ai 3 . ♦ .U żyw a nie JS F
JiBB
W pow yższym fragm encie zaprezentow ano p a k ie t k o m u n ik ató w ISRPM essag, pozw ala przedefiniow ać w ybrane kom unikaty. P lik ISR P M essages.properties b y ć um ieszczony w m iejscu w idocznym dla ścieżki dostępu do klas aplikacji (cl .... K ażd a w ersja ję z y k o w a je s t d e fin io w a n a w o d ręb n y m p lik u z odpow iednim p - ' k iem w nazw ie, np. IS R P M e ssa g e s_pl.p ro p e rtie s , IS R P M e ssa g e sje n .p ro p erii P akiety kom unikatów um ożliw iają m odyfikow anie treści sta n d a rd o w y c h komuniKain» (a w zasadzie nad p isy w an ie ich). Jeśli d ew elo p e r p rz e d e im iu je w arto ść komurą«np. w ISR P M essages_pl.p r o p e r tie s : j a v a x .faces .c o n v e rte r.B y te C o n v e rte r. B Y T E -{2 ’>: ’ ' {0 } ' w u0119dzy 0 i 255.
Musi by\u0107 lic z b iu o s w
to taki ko m u n ik at b ędzie w y św ietlan y n a ekranie p rzeglądarki zam iast domyśl'.... (przy ustaw ien iu polskiej w e rsji jęz y k o w e j). Jeśli k om unikat generow any przeż' d ato r lub k o n w e rter nie zostanie p rz ed e fm io w a n y w żadnej w ersji językow ej pąń«, kom u n ik ató w IS R P M e ssa g e s, to w y św ietli się d o m y śln a treść kom unikatu (w j / ń " angielskim ) z p lik u M essages . p r o p e r t i e s. gpt Wskazówka
S ta n d a rd o w e k o m u n ik a ty m o g ą b yć n ie z ro z u m ia łe dla p o te n c ja ln e g o użytkowni a p lik a c ji. U żytk o w n ik , k tó ry n a p o tk a k o m u n ik a t n p . V a l i d a t i o n E r r o r : V a lu e : n o t v a l i d , m o że nie w ie d z ie ć , czym j e s t b łą d w a lid a c ji w a plikacji W W W . Dlate w a rto p rz e d e fin io w a ć k o m u n ik a ty, k tó re m o g ą b yć n ie zro zu m ia łe dla użytkowni n a s ze j a p lik a c ji. O z n a c z a to n ie ty lk o z d e fin io w a n ie k o m u n ik a tó w w e własi w e rs ji ję z y k o w e j, a le ró w n ie ż n a d p is a n ie w a rto ś c i d la k lu c zy zdefiniow any M e s s a g e s .p ro p e rtie s . A b y to z ro b ić , w y s ta rc zy p rze d e fin io w a ć w a rto ści przypise do s ta n d a rd o w y c h k lu c zy w je d y n y m p lik u , k tó ry n ie za w ie ra p rz y ro s tk a określ;: c e g o w e rs ję ję z y k o w ą (n p , w pliku IS R P M e s s a g e s .p ro p e rtie s).
'
________________________________
15 7
properties, to m o że m y je o tw o rz y ć o p c ją O pen W ith/R esource B u n d le E d ito r z m enu kontekstow ego. E k ran e d y to ra z aw ie ra zaw sze trzy z ak ład k i narzędziow e: P roperties jje w i D e fa u lt oraz p o jed n ej z ak ład c e d la edycji każdej w ersji jęz y k o w e j (patrz ry su nek' 3-6)- Z ak ład k a D e fa u lt p o z w a la n a edycję w a rto ści d o m y śln y ch (od w o łu je się do pliku w łaściw o ści b ez p rz y ro stk a w e rsji jęz y k o w e j w nazw ie). Z ak ład k a N e w p o z w ala na łatw e do d aw an ie w e rsji ję z y k o w y c h (w isto cie g e n ero w a n ie plik ó w z odp o w ied nim i przy ro stk am i), a z ak ład k a P ro p e rtie s je s t g łó w n y m ek ran em ro b o c zy m w tyczki. W oknie po lew ej stronie w y św ietlan e s ą k lucze (w p o sta ci listy lub drzew a), a m enu kontekstow e u m o ż liw ia tw o rz en ie n o w y c h kluczy, d u p lik o w an ie , u su w an ie , m odyfi kow anie n azw y czy w y łą cz an ie istn ie jąc y ch (p o p rzez k o m entarze). Z g łaszan e są ró w nież o strzeżenia i b łęd y d o ty cz ąc e k lu cz y (np. b rakującej w a rto ści dla w ersji ję z y k o wej, n iep raw id ło w y ch z n ak ó w w k lu c z u itp.). Je śli w oknie po lew ej stronie zostanie zaznaczony klucz, z praw ej stro n y b ę d ą w y św ietlan e o b szary ed y cy jn e d la w szy stk ich wersji języ k o w y c h . P o z w a la ją one m o d y fik o w ać w a rto ści p rz y p isan e do k lu cza przy k orzystaniu z sy ste m o w y c h u sta w ie ń ję z y k o w y c h . D z ię k i tem u u ż y tk o w n ik m oże w prow adzać ła ń c u ch y z n a k o w e ta k sam o j a k w z w y k ły m e d y to rz e tek sto w y m , choć znajdujące się w n ich znaki c h ara k te ry sty c zn e dla ró żn y ch ję z y k ó w b ę d ą zapisyw ane do pliku z u ż y c ie m skład ającej się z sześciu z n ak ó w A S C II sekw encji określonej w standardzie U nicode, np. \u015B. N a rysunkach 3.6 przedstaw iono zakładkę Properties, odzie w p ro w ad zan y te k st je s t p isa n y z polskim i znakam i, oraz z ak ład k ę p o lsk i p o za kodow aniu. Z aw arto ść p lik ó w w ła śc iw o ści w y ś w ie tla n a w z ak ła d k a c h w e rsji ję z y kow ych (o raz D efaidt.) m o ż e b y ć m o d y fik o w a n a p rz e z u ż y tk o w n ik a .
.4. Internacjonalizacja w w a rstw ie biznesowej W p unkcie 3.4.2.1. „ Z m ian a u sta w ień ję z y k o w y c h w k o d zie aplik acji” p rz ed sta w io n y został p ro sty sp o só b w y k o rz y sta n ia w b u d o w a n y c h fu n k c jo n a ln o śc i JS F do u m o ż li w ienia w yboru w ersji językow ej aplikacji. Z aprezentow ane rozw iązanie, dodatkow o w zbogacone o elem en ty w iz u aln e (ik o n y flag n aro d o w y ch , p o d p o w ied zi itp.), m oże być całkow icie w y sta rcz a ją ce w w ięk szo ści z astosow ań, p rz y założeniu, że w szystkie lokalizow ane łańcuchy znakow e są statyczne i m o g ą być u m ie sz cz o n e w pakietach za sobów oraz ko m u n ik ató w .
P ra c a z p a k ie ta m i w ś ro d o w is k u w E c iip s e Ś rodow isko E ciip se nie m a w b u d o w an e g o n a rzę d zia u łatw iającego pracę z lok; w anym i pak ietam i zasobów , ale d o stęp n e s ą w ty c zk i program istyczne uzupełni to p rzeoczenie. Je d n ą z n ich je s t d a rm o w y e d y to r E ciip se R esource B undle I P ascala E ssiem b reg o , d ostępny n a stro n ie http://sourceforge.net/projects/eclipse Instalacja odbyw a się p o p rz ez sk o p io w a n ie z a w a rto śc i p lik u arch iw aln eg o do kał /p lu g in s śro d o w isk a E ciipse. Po instalacji i p o n o w n y m u ru c h o m ie n iu śro d o w is k a w ok n ie k reato ra New/Oi p o w in n a się p o jaw ić no w a opcja, R eso u rceB itn d le/R eso u rceB u n d le, za której po m o żn a tw orzyć lo k alizo w an e p a k ie ty zasobów . Jeśli m am y w cześniej utworzoni
N ależy je d n a k p a m ię ta ć, że p e łn a in te rn acjo n alizacja ap likacji m o że w ym agać także tłu m a cz en ia d a n y c h b iz n e s o w y c h , p o b ie ra n y c h z b a z d a n y c h b ą d ź in n y c h ź ró d e ł i u dostępnionych w w a rstw ie bizn eso w ej aplikacji. In tern a cjo n a liza c ja m usi w takim p rz y p ad k u b y ć re a liz o w a n a w k o d z ie w a rstw y b iz n e so w e j, a o b ie k ty o m ó w io n ej w punkcie 3.4.2.1 k lasy L o c a le m o g ą zostać w y k o rz y stan e ja k o p aram etry w y w ołań obiektów w a rstw y u słu g o w e j. P o d su m o w u jąc, m echanizm intern acjo n alizacji w JSF ułatw ia zm ianę w ersji ję z y k o w e j staty czn y ch z asobów w a rstw y prezen tacji, ale zm ia nę w ersji językow ej danych bizn eso w y ch dew elo p erzy m u sz ą zaim p lem en to w ać w c a łości sami.
1 58
Ja va S e rv e r F a c e s j E c lip s e G a lileo. Tw orzenie aplikacj
♦ U żyw a n ie JS F
159
m wersja-. ■ N ew pro p erties file:
■W aplik acji W W W d ane u ż y tk o w n ik ó w p rz e sy ła n e są. w p o sta ci p a ra m e tró w żąd a ń protokołu HTTP, który jest protokołem tekstow ym . K ażdy z param etrów jest łańcuchem znakow ym , ale po strom e serw era m oże b y ć rep rezen to w an y p rz e z obiekt dow olnej klasy. Po stronie k lie n ta data m oże być w y św ietlan a ja k o łań c u ch z nakow y (S trin g ) w dow olnym form acie, np. (01/02/2010), (luty 1, 2010), lub w p o sta ci ko n tro lk i Ja v a Script, pozw alającej graficzn ie w ybrać dzień. P o stronie serw era d ata n a jp ra w d o p o dobniej będzie przed staw ian a za p o m o c ą o b iek tu ja va . u ti 1 . Date. Z ad an iem d e w elo pera je s t zap e w n ien ie ob u stro n n ej k o n w e rsji d la ty ch ró ż n y c h re p re z e n ta c ji. JS F ułatw ia to zad an ie, d o sta rcz ają c z esta w sta n d a rd o w y c h k o n w e rte ró w dla p o d sta w o w ych typów oraz udo stęp n iając interfejs p ro g ram isty czn y do d e fin io w a n ia w ła sn y c h k onw erterów (sch arak tery zo w an y w rozdziale 5.).
i . Standardowe konw ertery W szystkie k om ponenty U l dzied ziczące p o k lasach U lln p u t i U lO utput, o d p o w ie d zial ne za w prow adzanie lub w yśw ietlanie danych, k o rz y sta ją w sposób ja w n y lub n ieja w ny z k onw erterów . Z a k a żd y m razem , gdy w arto ść kom p o n en tu m a być w yśw ietlana, n a jp ie w je s t p rz ek sz tałc an a n a p o sta ć ła ń c u c h a znak o w eg o S tr in g p rz ez konw erter. Z kolei za każdym razem , g d y u ży tk o w n ik w p ro w ad z a dane w p o sta ci łań c u ch a z n a k o w ego, s ą on e p rz e k sz ta łc a n e n a p o sta ć o b ie k to w ą — ró w n ie ż p rz e z o d p o w ie d n i konw erter. Jeśli k o n w e rter nie b ęd zie ja w n ie p rz y p isan y do k o m ponentu U l, JS F w y k o n a n ie jaw ne p rzypisanie, zależn ie od typu, ja k i m a b y ć przekształcany. Je śli dla o k reślonego typu n ie zo stanie zare je stro w a n y żaden konw erter, to aplikacja zgła sz a błąd k o n w e r sji. JS F zap ew n ia n ie ja w n ą k o n w ersję dla w szy stk ich p o d sta w o w y c h ty p ó w Javy, tj. : BigOecim al, B ig ln te g e r, Boolean, Byte, C h a ra cte r, In te g e r, S h o rt, Double, F lo a t, Long i Enum, obsługując zaró w n o obiekty w ym ien io n y ch klas o p akow ujących, j a k i ty
pów p rym ityw nych, które te k lasy opakow ują). K lasy k o n w e rteró w dla ty p ó w p o d staw ow ych um ieszczo n e s ą w pak iecie ja v a x . faces .c o n v e rt i m a ją n a zw y z p rz y rostkiem C on ve rte r, np. B igD ecim alC onverter, BooleanC onverter, etc.
R y s u n e k 3 .6 . E krany wtyczki E clipse R esource B u n d le E d ito r
W szystkie k o n w ertery im p le m e n tu ją interfejs C onverter, który, d e klarując w ym agane m etody g e tA s 0 b je c t( ) i g e tA s S trin g i ), w y m u sz a d w u stro n n ą k o n w ersję n a w szy st kich k lasach im plem entujących. M eto d y te nie z m ie n ia ją p rz etw a rza n y ch w artości, tzn. w y k o n a n ie k o n w e rsji ta m i z p o w ro te m n ie m o że zm ien ić w a rto śc i — n ależy o ty m p a m ię ta ć, tw o rz ąc w ła sn e k o n w e rtery . Je śli n a p rz y k ła d k o m p o n e n t U l w y świetla w łaściw ość < h :ou tp u tT e xt value=*"#{myBean.activeF1ag}"/'>, gdzie a c tiv e F la g je st w łaściw ością typu boolean lub Boolean, to JS F a u to m a ty c z n ie w y b ie rz e Boolean '-'»-Converter. G dy w a rto ść w ła śc iw o śc i b ę d z ie u sta w io n a n a t r u e , w ó w c z a s z o stan ie w yśw ietlo n y napis " t r u e " . Z k o lei gdy u ż y tk o w n ik w p ro w a d z i do p o la tek sto w eg o < h :in p u tT e x t v a lue="#{myBean . a c t i v e F la g } "/> napis " t r u e " , to p o p rz e sła n iu fo r m ularza zostanie do p o la a c tiv e F la g k o m p o n en ta w spierającego myBean p rz y p isan a w artość tru e .
ja v a S e r v e r F a c e s i E c lip s e G a lile o. T w o rze n ie aplika -
W pa k ie cie ja v a x . fa c e s . c o n v e rt o p ró c z w y m ien io n y c h ko n w erteró w dla typ , staw o w y ch z n a jd u ją się k la s y k o n w e rte ró w DateTlm eConverter i NumberCoi s łu ż ą c y c h do k o n w e rs ji d a t (o b ie k tó w Date) i liczb (Double lub Long). U żv
konw erterów w p rzeciw ieństw ie do pozostałych w ym aga zaw sze jaw nej deklaraci < f :convertOateTim e/'> < /h:O utputText> < h : 1 n pu tText val u e = " # {in v o ic e . t o t a l C o s t } "> < f: convertiium ber D a tte rn =l'# ,x tf ■00 t y p e - c u rre n c y />
P o z a tym , że o b a te k o n w e rte ry p o sia d a ją w ła sn e z n ac zn ik i i m u sz ą być deki; w k o m p o n en ta ch U l, w y ró ż n ia ją się b o g a ty m z estaw em w łaściw ości p o z w ą ¡ n a fo rm ato w an ie łań c u ch o w ej re p re z en tac ji d at i liczb (inne standardow e koi im p le m e n tu ją ty lk o m eto d y k o n w e rsji).
r axiat3- ♦ U żyw a n ie JS F _________________;_________________________________________________ 161 ■N u iiib e rC o n v e rte r je s t re p re z en to w a n y p rz ez zn ac zn ik < f : c o n v e rtN u m b e r/ > , którego
:
w łaściw ości zo stały p rzed staw io n e w tab e li 3.11,
^gla 3,11- Właściwości konwertera liczb - '^ ¡ ¡ d w o ić
Alfanumeryczny międzynarodowy kod waluty (wg ISO 42172), np. PLN. Poprawny, gdy typ e jest ustawiony na c u rre n c y . Używany zamiennie z currencyS ym bo!.
Symboli
S trin g
Symbol waluty, np. S. Jeśli nie jest ustawiony, używany jest symbol zdefiniowany dla ustawień regionalnych (L o ca le ). Poprawny, gdy typ e jest ustawiony na c u rre n c y. Używany zamiennie z currencyCoae.
Jsed
boolean
Określenie, czy grupujące separatory mają być użyte (np. ,). Domyślnie tru e .
boolean
Określenie, czy część ułamkowa liczby ma być ignorowana. Domyślnie fa l se.
S t rin g lub Locale
Ustawienia regionalne (patrz punkt 3.4.1, „Lokalizatory”). Ustawienie tej właściwości nadpisuje bieżące ustawienia regionalne użytkownika i ma wpływ' na format liczby.
Dni y
DateTlmeConverter je s t reprezentow any przez znacznik < f :convertDateTime/>
atry b u ty p rz ed sta w io n o w tab e li 3.10. Je śli w e w n ą trz z n ac zn ik a n ie b ę d ą z w an e żadne atry b u ty , p rz y ję te z o sta n ą w a rto ści dom yślne.
S trin g
Code
group'
lo cale
T ab e la 3 .1 0 . Właściwości konwertera daty
Typ .________ opisu____________________________________________________ _____
Styl form atowania łańcuc a znakowego reprezentującego dat' ale ważny tylko wtedy, gry ustawiona jest jaw nie właściwość Dostępne formaty: s h o rt edium (d e fa u lt), long i f u l l .
g e rD ig its
In te g e r
Minimalna liczba cyfr w części całkowitej.
g e rO ig lts
In te g e r
Maksymalna liczba cyfr w części całkowitej.
patte rn
S trin g
Wzorzec formatowania liczby (używany zamiennie z type ). Poprawnymi wartościami są wzorce wspierane przez klasę j a v a . t e x t .Decimal Format (opisane w dokumentacji API), np. liczba 12 345 w formacie ”##0 .#####£0" — "12.345E3".
type
S t rin g
Określa, co ma być wyświetlane. Możliwe wartości: c u rre n c y, number i percent.
lo c a le
S trin g lub Locale
Ustawienia regionalne (patrz punkt 3.4.1, „Lokalizatory”). Ustawienie tej właściwości nadpisuje bieżące ustawienia regioi użytkownika i ma wpływ na format czasu i daty.
p a tte rn
S t rin g
W zorzec formatowania daty i czasu (używany zamiennie z type) Poprawnym i wartościami są wzorce wspierane przez klasę J a v a . t e x t . Simpl eDateFot t (opisane w dokumentacji API), np. "hh 'o ^ c lo c k ' a" — 12 o 'c lo c k PM".
tim e S ty le
S trin g
Styl fomratowania łańcucha znakowego reprezentującego czas, ale ważny tylko wtedy, gdy ustawiona jest jawnie właściwość t Dostępne formaty: s h o rt di urn (d e fa u lt), long i f u l l .
timeZone
S trin g
Strefa czasowa. Domyślna wartość GMT.
typ e
S trin g
Określa, co ma być wyświetlane. Możliwe wartości: date, time i both.
Poniżej zam ieszczono p rz y k ła d u ży cia k o n w ersji daty z w yk o rzy stan iem atryb form atujących: < f:co nvertD a teTim e lo c a le = " p l" type = "bo th" d a te S ty le = " fu l1"/> < /h:o utputText>
i rezultat n a ekranie przeglądarki:
Poniżej po k azan o p rz y k ła d u ż y cia k o n w e rsji liczby 234.45 z w y k o rz y sta n ie m atry butów form atujących:
i rezu ltat n a ekranie przeglądarki: PLN 234,45.
\
DateTim eC onverter i Num berConverter m o g ą być p rz y p is a n e d o k o m p o n e n tu Ul za p o m o c ą a try b u tu c o n v e rte r , n p , . J e s t to m niej p ra k ty c z n e ro zw ią za n ie n iż u ż yc ie z n a c z n ik ó w , g d y ż nie p o zw a la na d e fin io w a n ie w ła ś c iw o ś c i k o n w e rte ra .
p o n ie d zia łe k , 28 g ru d zie ń 2009 22:54:48
Kody ISO 4217 dostępne są na oficjalnej stronie International Organization for Standardization pod adresem http://www.iso.org/iso/support/citrrency_codes_Jist-l .htm.
1 62
Ja va S e rve r F a ce s i E c lip s e G a lile o . Tw orze nie aplikac
aZŹZ|ał 3. ♦ U żyw anie JS F
»sługa błędów konwersji Jeśli podczas konw ersji pojaw i się błąd, n astępuje:
Komunikat ten nie je st zbyt zrozum iały dla użytkow nika, przede w szystkim ze w zględu na to, że jest w yśw ietlan y u n ik ato w y id en ty fik ato r kom ponentu. K o m p o n en ty m o g ą posiadać p rzy p isan e 'o p cjo n a ln ie etykiety defin io w an e a try b u tem la b e l, które są w y korzystywane p o d c za s g e n ero w a n ia k o m u n ik a tó w . D o p isa n ie do p o la teksto w eg o z pow yższego przy k ład u etykiety, tj. < h : i n p u tle x t la b e l = ‘‘Pole t o t a l ” . .. > , spow o duje, że ew entualny k o m u n ik a t b ę d zie czytelniejszy, np.:
.
♦ w ygenerow anie w m iejscu w ystąpienia błędu (m etodzie konw ertera getAsOb lub g e tA s S trin g i )) obiektu odpow iadającego w y jątk o w i klasy CorvertExce" zaw ierającego referencję do obiektu FacesMessage, rep rezentującego korm o błędzie;
Pole t o t a l:
W szystkie kom unikaty m o g ą być dowolnie form atow ane, a także prezentow ane w w er sjach szczegółow ej i skróconej, ró w n ież w w ie lu jęz y k ac h . W ła śc iw o śc i kom ponentu HtmlMessage, dostępne w p o sta ci atrybutów z n ac zn ik a , o p isan e s ą szcze gółowo w punkcie 3.7.1.8. T reści kom u n ik ató w o b łęd a ch m o g ą być z m odyfikow ane przez p ro jektanta aplikacji, co je s t opisane w p u n k cie 3.4.3. Poniżej po k azan o frag m ent p lik u M essages j o l.p ro p e rties, defin iu jący treść k o m u n ik ató w w ję z y k u p olskim dla b łędu konw ersji z p o w y ższeg o przykładu:
D zięk i takiem u rozw iązaniu u ży tk o w n ik n ie m u si p o n o w n ie przepisyw ać wsz ■■. : danych, a jednocześnie błędne czy niekom pletne dane nie pow odują niespójność: ■■ ■■ delu danych. Sam o ponow ne w yśw ietlenie strony nie m usi być jednak przez u ż y tł. ■-- o w ła śc iw ie interpretow ane — n a le ża ło b y je s z c z e w y ś w ie tlić in fo rm a cję o wys b łęd u konw ersji, je g o przy czy n ie czy d o p u sz c za ln y m p rz e d z ia le z m ien n o ści w projSl dzanych danych. W praw dzie odpow iedni kom unikat zostanie w ygenerow any i s do strum ienia w yjściow ego na serw erze, ale nie do użytkow nika. Jeśli na przykład \\pW". w adzane dane nie są oczekiw aną liczbą, to n a serw erze pojaw i się poniższe ostrzeż-.....
javax.faces.converter.NumberConverter.NUMBER - {2 }: ‘ ‘ { 0 } '' nie je s t liczb\u0105.n ja v a x . faces .c o n v e rte r .NumberConverter.NUM8ER_det.ail = {2 } : ‘ ’ {0 } ‘ ' n ie je s t W ic z b X u G lQ S . Przyk\u0142ad: i l U
W y stąp ien ie b łę d u k o n w e rsji w o m a w ia n y m p rz y k ła d z ie s p o w o d u je w y ś w ie tle n ie napisu:
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been di source Id-j_id_jsp_5 6 5 2 0 1 2 _l:j_id _jsp_5 6 5 2 0 1 2 _3 [severity= (E R R O R 2). sum m ary=(j_id_jsp_5652012_l:j_id_jsp_56520I2_3: ‘ n a p is ’ is not a num ber.), d e t a il—(j_id_jsp_5652012_l: j_id_jsp_5652012_3: ‘ n a p is 1 is not a number. Example-
Pole t o t a l :
3 .5 .2 .1 , W yśw ie tla n ie pojedynczych kom unikatów o błędzie konwersji A b y w y św ietlić n a stronie JS P ko m u n ik at o błędzie konw ersji, p ro jek tan t m oże ścić o dpow iedni znacznik , re p re z en tu jąc y kom p o n en t HtmlMessage, który b ędzie odpow ied zialn y za w y św ietlan ie k o m u n ik a tu o błędzie, gdy taki w ystąpi. W p o n iższy m przy k ład zie m am y zad ek laro w an e p o le tekstow e, do k tórego u; n ik p o w in ien w prow adzić liczbę:
< h :in p u tT e x t converterMessage="B\u0ł42\u0105d k o n w e rsji" id = " t o t a l " . . . / >
\ Uwaga ■■í.-:
A trybut f o r znacznika m a p rz y p isan ą w artość identyfikatora kom j dla którego w yśw ietlane b ę d ą kom u n ik aty , zaś atry b u t lang definiuje ję z y k komim§ katów . Jeśli w p o le tekstow e w p ro w ad z im y n ie w ła śc iw ą w artość, np. xxx, to po stój n ie u ży tk o w n ik a w yśw ietli się kom unikat:
'x x x ' n ie je s t lic z b ą . P rzy k ła d : 99
Jeśli chcemy przypisać kom unikat o błędzie konw ersji b ezpośrednio do k o m p o n e n tu U l, którego w artość podlega konw ersji, m ożem y skorzystać ze specjalnego atrybutu, przed stawionego w p rzy k ła d zie poniżej: < h :in p u tT e x t converterM essage="B \u0142\u0105d konw ersji" id=''t o t a l " . . . />. K om unikat ten będzie w y św ie tla n y z aw sze , gdy w ystąpi błąd k o n w e rsji w a rto śc i, n a w e t je ś li d o d a tk o w o z o sta n ie p rz y p is a n y z n a c z n ik . Jeśli n a p rz y k ła d w ystąpi b łą d p o d czas k onw ersji p o n iższe g o ko m p o nenta, efektem b ędzie w y św ietlen ie kom u n ik atu „B łąd k o n w e rsji” .
in fo rm u jące o tym , że obiekt FacesMessage zo stał w ygenerow any, ale m oże w y św ietlan y użytkow nikow i.
j_id _ jsp _ 5 6 5 2 0 X 2 _ l: t o t a l : ‘ x x x ‘ is not a number. Example: 99
'x x x ' Is not a number. Example: 99
W arto śc ią atry b u tu la b e l m o że b y ć w y ra ż e n ie ję z y k a U E L , np. 1 abel="#{m essages [ ' e k r a n . p o le .to ta l 1]}". D zięki tem u m ożna skorzystać z m ech an izm u intern acjo n ali zacji kom unikatów — etykiety m o g ą być zap isan e w p a k ie tac h k o m u n ik ató w (plikach .properties) dla różnych w ersji ję z y k o w y c h (patrz p u n k t 3.4).
♦ p o n o w n e w yśw ietlenie bieżącej strony, zaw ierającej w szystkie w pisane pi u ż y tk o w n ik a dane. Po z ak o ń c z e n iu fa z y w e ry fik a c ji dan y ch sterow anie przekazyw ane jest bezpośrednio do fazy renderow ania, w której bieżący wido ponow nie renderowany. N ie są w ykonyw ane m etody obsługi zdarzeń, akcje f auęuzy stronam i czy aktualizacja m o d elu danych. N a w e t jeśli część fonm je s t w yp ełn io n a popraw nie, to w p ro w ad z o n e d ane n ie ak tu a liz u ją w ła śc m k o m p o n en tu w sp ie rają ce g o , g d y ż fa za a k tu a liz a c ji m o d elu je s t pom ijana.
< h :message f o r = " t o t a l" lang-"pl"> < h:1nputText id = " t o t a l" v a lue="#{myBean . t o t a l }" -> < / h :in p u tTe xt>
163
W a d ą s to s o w a n ia o p is a n y c h tu rozw ia.zań j e s t w y ś w ie tla n ie tylk o p ie rw s z e g o ko m un ik atu o b łę d z ie . W s y tu a c ji, g d y p o d c z a s k o n w e rs ji i w a lid a cji k o m p o n e n tu b ę d zie w yg e n e ro w a n y c h w ię ce j k o m u n ik a tó w , n ie z o s ta n ą o n e w y ś w ie tlo n e .
3.5.2.2, W yśw ie tla n ie w ie lu kom unikatów o błędach Istnieje m ożliw ość prezentow ania w jednym m iejscu w szystkich kom unikatów o błędach w ystępujących w p rz etw a rza n y ch n a stronie k om ponentach. Służy do tego k om ponent HtmlMessages, re p re z en to w a n y z a p o m o c ą z n a c z n ik a , k tó ry w y św ietla
Ja va S e rv e r F a c e s i E c lip s e G a lile o . T w o rze n ie aplikac
164
w szy stk ie (a n ie tylko pierw sze, ja k < h :m e ssa g e > ) k o m u n ik a ty d o ty cz ąc e wsz k o m p o n e n tó w stro n y . P o n iżej z a m ie sz c z o n o p rz y k ła d p o z w a la ją c y n a w yśw ew en tu aln y ch k o m u n ik a tó w je d e n p o d drugim :
1ayou L—
able"/
D o m y śln ą w a rto śc ią atry b u tu ia y o u t je s t l i s t , co p o w o d u je w y św ietlan ie h '’mi®;, i k a tó w w jed n y m ciąg u (m niej c zy teln e ro z w iąz an ie ).
; dzjał 3. ♦ U żyw a n ie JS F
165
L i . Im plem entacja metod w alidacji W alidacja danych w JS F m oże-być realizow ana: ♦ w k odzie kom p o n en tu U l.(p a trz ro z d z ia ł 5.), ♦ w k odzie logiki b iznesow ej aplikacji, ♦ w kodzie m eto d y k o m p o n en tu w sp ierająceg o ,
U Uwaga
S
/ iu
K o rzy s ta ją c z , n a le ż y p a m ię ta ć , ż e je ś li w zn a c z n ik a c h k o m p o t ■■ tó w Ul s k o rz y s ta m y z a try b u tó w d e fin iu ją c y c h k o m u n ik a ty , n p . c o n v e rt e rM e s 1 v a l Id a to rM e s s a g e o ra z re q u i re d M e s s a g e , to p rz e d e fin iu ją o n e t r e ś ć do m yś k o m u n ik a tó w .
W a lid a c ja W ery fik o w an ie p o p ra w n o śc i d a n y ch (w a lid a c ja ) j e s t isto tn y m asp e k te m wsz aplikacji, które p rz e tw a rz a ją dane p rz e sy ła n e p rz e z u ż y tk o w n ik ó w . Z dolność uu chw ytyw ania n iep o p ra w n y c h d a n y ch je s t k ry ty c z n a d la z ap e w n ien ia spójności-'..,, delu danych aplikacji, stąd JS F p o sia d a w b u d o w a n e m ec h an iz m y um ożliw iające wa lid ację danych po stro n ie serw era. W p rzypadku aplik acji W W W dane w p ro w a d z a n e s ą p rz y u ż y ciu form ularzy, a na" stępnie o dczytyw ane z p a ram etró w ż ąd a ń H T T P . W szk ielecie JS F ten proces reajff zo w an y je s t n ieja w n ie, a d e w elo p e r m u si je d y n ie z a tro sz c z y ć się o w ła śc iw e użycie dan y ch w aplikacji oraz ich p o p ra w n o ść . D an e w p ie rw sz y m etapie przetw arzania żą-r d an ia s ą d ekodow ane z p a ram etró w żąd an ia. P o o d c zy tan iu w a rto ści w prow adzone t p rz ez u ży tk o w n ik a n astęp u je ich z a p isa n ie w p o sta c i ła ń c u c h ó w z n ak o w y c h Strąngr w obiektach k o m p o n en tó w U l, re p re z e n to w a n y c h p rz e z zn aczn ik i n a stro m e JSP. OdP czytane w artości je d n a k n ie a k tu a liz u ją m o d e lu d a n y ch i n ie m o g ą b y ć wykorzystanal p rz ez aplikację, dop ó k i n ie z o sta n ą z w ery fik o w a n e . W arto ści k o m p o n en tó w sąkójjjjl w erto w an e z ty p u S trin g do o d p o w ie d n ic h ty p ó w o b iek to w y c h , a n astęp n ie spoiwdzane p o d ką te m p o p ra w n o śc i i k o m p le tn o śc i. Je śli w trak c ie k o n w ersji lub waliMcJlj p o ja w ią się b łęd y , stro n a z aw ie rają ca fo rm u larz d a n y ch z o stan ie p o n o w n ie wyświe-' tlo n a w ra z z w y p e łn io n y m i danym i i k o m u n ik a tam i o błęd ach . T akie rozw iązanie ro zw ala uniknąć n ieo d w rac aln y c h b łę d ó w w m o d elu d a n y ch w p rz y p a d k u niekompletni n y ch b ą d ź n iep o p ra w n y c h danych. Je d n o c z e śn ie w ro z le g ły c h fo rm u larzach darif|j|J u ży tk o w n ik m oże p o p ra w ić tylko b łę d n ie w p ro w ad z o n e lub b ra k u ją ce dane, bez poj-r trze b y p o n ow nego w y p e łn ia n ia c ałeg o form ularza. D ostępne w JSF rozw iązania zapew niające konw ersję o pisano w p o p rz ed n im punkciety w ty m m iejscu b ę d ą om ó w io n e sta n d ard o w e ro z w iąz an ia JS F, p o z w ala ją c e na weifj fikację danych. In terfejs p ro g ra m isty c z n y i ro z w ią z a n ia d o ty cz ąc e definiow ania w j j snych w alid ato ró w sc h a ra k tery z o w a n o w ro z d ziale 5.
♦ z w yk o rzy stan iem o biektów w alid ato ró w .
j . l . l . W alidacja w kodzie kom ponentu Ui K od spraw dzający p o p ra w n o ść w p ro w ad z an y c h dan y ch je s t d e fin io w a n y w m etodzie v a l i d a t e d klasy ja v a x . f a c e s . com ponent. LII In p u t, re p re z e n tu ją c e j k o m p o n e n ty U l służące do w p ro w ad z an ia d a n y ch . W y sta rc z y p rz e d e fm io w a ć o d p o w ie d n ią klasę k om ponenta w ejścio w eg o (np. Html In p u tT e x t) i nad p isać m eto d ę v a l i d a t e d . P o d czas cy k lu p rzetw arzan ia ż ąd a n ia JS F a u to m a ty c z n ie w y w o ła m e to d ę v a l i d a t e d . Z aletą takiej im plem entacji w a lid a cji je s t szy b k a i w y d a jn a w a lid a c ja k o m p o n e n tó w zdefiniow anych p rz ez d ew elopera. W a d ą je s t m ożliw ość p o n o w n e g o u ż y c ia k o d u dla innych kom ponentów . W ięcej in fo rm acji n a tem a t im p lem en tacji w ła sn y c h k o m p o nentów C zytelnik zn ajdzie w ro z d ziale 5.
3 .6 .I .2 . W alidacja w kodzie lo gik i biznesow ej T en typ w alidacji p o leg a n a sp ra w d z an iu reg u ł pop raw n o ści w k o d z ie m eto d y k o m po n en ta w spierającego (akcji lub m eto d y obsługującej zd arzen ie). G d y w p ro w ad zo n e dane s ą niep o p raw n e lub n iek o m p letn e, w k o d z ie s ą d ynam iczn ie tw o rz o n e i d o d a w a ne do k olejki kom u n ik aty o b łęd zie. R o z sz erz m y p rz y k ła d z p u n k tu 3.2.1.1 — m eto d a obsługująca proces lo g o w an ia u ż y tk o w n ik a m oże m leć postać: p u b lic S trin g l o g i n ( ) { i f (u se r 1= nul 1) { v i s i tB ean. s e tA u th e n tlc a t i o n B e a n ith is ): v i s itB e a n . s e t U s e r (u s e r ): re tu rn " 1ogl ■: r r . c r s s -.//przejście d o n a stęp n eg o ekranu } e ls e { FacesMessage message - new FacesM essagel) ; message. s e tS e v e rit y ( " FacesMessage. SEVERiTY_ERROR") : message.setSummmary("Login f a i l e d . ” ) : message. s e tD e ta i1e d ("L o g in f a i l e d . In c o rr e c t lo g in o r p a s s w o rd ."): Fa c e sC o n te xt.g e tC u rre n tln sta n c e C ) .addM essage(userForm :firstN am e, m essage): re tu rn n u ll -.//ponowne w yśw ie tle n ie str o n y lo g o w a n ia
Strona zaw ierająca form ularz m u si zapew nić w yśw ietlanie k o m u n ik a tó w o błędzie, ta je s t to realizow ane z w y k o rz y stan ie m id en ty fik ato ró w fo rm u larza i k o m p o n en tu w e j ściow ego (p o g ru b io n a czcionka).
1 66
Ja va S e rv e r F a ce s i E c lip s e G a lile o, Tw orzenie aplikacji < h : 1 nputText id -" firs tN a n ie " . . .
/>
to w kodzie kom p o n en ta m ożna dynam icznie tw orzyć in stan cję k o m p o n e n ta i u sta wiać w alidator. K o d p rzy k ład o w eg o k o m p o n en tu w spierającego: p u b lic cla ss MyBean{ Htm lInputText p ric e ; p u b lic Html In p u tT e xt g e tP ric e O { re tu rn p r i c e ;} p u b lic void s e tP ric e (H tm lIn p u tT e x t p ric e ) { t h i s . p r i c e = p r i c e ;} MyBean() { DoubleRangeValidator v a l1dator=new D o u b le R a n g e V a lid a to rO ; v a lid a to r.s e tM in im u m (lO ); prlcem ew Html In p u t T e x U ) ; p r ic e .a d d V a lid a t o r ( v a lid a t o r );
} p u b lic vo id su b m it(A ctio n E ve n t eve n t) { //... m etoda nie zo sta n ie uruchom iona, je ś l i w a rto ść b ęd zie m n iejsza n iż 10
N ależy pam iętać, aby nie rejestro w ać dyn am iczn ie w a lid a to ró w w m eto d a c h o b słu g u jących zdarzenie akcji łub akcjach, gdyż m eto d y te s ą w y k o n y w an e ju ż p o fazie w e ry fikacji w artości.
,1.4. W alidacja w o b ie k ta ch w a lida to rów Każdy w ejściow y k om ponent U l m oże posiadać zarejestro w an ą d o w o ln ą liczbę obiek tów walidatorów , które b ę d ą w eryfikow ać popraw ność w prow adzanych danych. W szyst kie klasy w alidatorów m u sz ą im plem entow ać interfejs Val i d a to r . U ż y cie w alidatorów w łasnych bądź z n ajd u jąc y ch się w b ib lio tek a ch ro z sze rz ając y c h sta n d a rd o w ą im p le m entację należy zare je stro w a ć w p lik u fa c e s-c o n fig .x m l. Z a le tą teg o ro z w iąz an ia je s t przenośność i czytelność, w a d ą — dość w ąski z ak res fu n k c jo n a ln o ści stan d ard o w y ch w alidatorów (w p o ró w n a n iu z innym i szk ieletam i p ro g ram isty cz n y m i, np. Struts). Opis standardow ych w a lid a to ró w znajduje się w n a stęp n y m p u n k cie, a definiow anie w łasnych w rozdziale 5.
j_gg
Ja va S e rv e r F a c e s i E c lip s e G a lile o. T w o rze n ie aplikae
3 .6 .2 . Standardow e w a lid a to ry S ta n d ard o w a im p lem en tacja JS F d o sta rc z a z e sta w trze ch w a lid a to ró w weryfikuj', p o p ra w n o ść w p ro w ad z o n y ch p rz e z u ż y tk o w n ik a d a n y ch do k o m p o n en tu U l: ♦ Doubl eRangeVal 1d a to r, sp ra w d z ają cy , czy w p ro w a d z o n a w arto ść m oże być rzu to w an a do typu doubl e i c zy z n a jd u je się w o d p o w ie d n im p rzed ziale wai d o p u szczaln y ch , o k re ślo n y m p a ra m e tra m i mi nimum i maximum (jeśli zostaną
z d efiniow ane); ♦ LongRangeVai i d a to r, sp ra w d z ają cy , c zy w p ro w a d z o n a w arto ść m oże być rz u to w an a do typu 1ong i czy z n a jd u je się w o d p o w ie d n im p rzed ziale wart< d o p u szczaln y ch , o k re ślo n y m p a ra m e tra m i mi nimum i maximum (jeśli zostaną
z definiow ane); ♦ LengthVal i d a to r ; sp ra w d z a ją c y , c z y w p ro w a d z o n y ła ń c u c h zn ak o w y jest o dpow iedniej długości, o k re ślo n ej p a ra m e tra m i minimum i maximum (jeśli zom
z definiow ane).
dział 3. ♦ U żyw a n ie JS F
169
. dw a w alidatory, z k tó ry ch je d e n sp ra w d z a długość w p ro w ad z o n eg o łań c u ch a zn ak o w ego, a drugi w eryfikuje w artość zm iennej p o k o n w ersji n a typ: ■ . - - < f:va ld d a te te n g th minimum“ "?" maximum="X"/> < f : va1i dateDoubleRange minimum“ " 10" maxi mum-"999"/>
D zięki tej w łaściw ości w alidacji w JS F fu n k c jo n a ln o ść sta n d a rd o w y c h w a lid a to ró w m oże być łatwo uzupełniana przez w alidatory zdefiniow ane przez dew elopera lub w b i bliotekach ro zszerzający ch sta n d ard o w ą im plem entację.
6.4. W ym uszanie wprowadzania danych K ażdy kom p o n en t w ejścio w y p o sia d a w ła śc iw o ść re q u ire d ; je ś li zo stan ie ona u sta w iona n a w artość tr u e , w y m u sza od rzu can ie p u sty c h w a rto ści p rz e z kom ponent. Jeśli zastosujem y na p rzy k ład atrybut re q u i red d la p o ła tek sto w eg o , ja k poniżej: < h :in p u t le x t re q u ire d “ "tru e " v a lu e - " # { v i s i tB e a n .u s e r .e m a il}/>
% Uwaga
S ta n d a rd o w e w a lid a to ry nie d z ia ła ją d la k o m p o n e n tó w z ro d zin y S e le c tM a n y , któi w a rto ś c ia m i s ą ta b lic e .
W a lid a to r Doubl eRangeVal id a t o r re p re z e n to w a n y je s t n a stro n ach JS P za pumnrj z n a c z n ik a < f : va l i dateDoubleRange>, np.: < h :in p u t le x t id “ " r a t e ” v a lu e - " # { t o t a l . r a t e } "> < f:va lid a te lo n g R a n g e maximum“ " -0 .5 " minimum“ " ! ,5"/> < / h :irp u tT e x t>
W alid ato r LongRangeVai Id a to r rep re z en to w a n y je s t n a stronach JS P za pom ocą znacz n ik a < f : val idateLongRange>, np.: < h :1 n p u tle xt id="age" v a lu e = " # {v is ltB e a n . u s e r . age } "> < f :v a l IdateLongRange max1mum="150" m1nimum=,'18,,/> < /h : in p u tle x t>
W alidator LengthVal id a to r reprezentow any je s t n a stro n a ch JS P z a p o m o cą znaczjiJB < f : v a lid a te le n g th > , np.: < h :in p u tT e x t 1d="firstNam e" v a l ue="#{UserRegi s t r a t i o n . u s e r. f i rstNam e}"> < f : v a lid a te le n g th minimum“ "?" maximum="25" /> < / h : in p u tle x t> Standardowe w a lid a to ry
3 .6 .3 . Kom binowanie różnych w alidatorów W a lid a to ry p rz y p is a n e do k o m p o n e n tó w n ie w y k lu c z a ją się w z aje m n ie , ja k to jg | w przypadku konw erterów . Jeśli k o m p o n e n t p o sia d a k ilk a p rz y p is a n y c h walidatorojj to w prow adzona w artość je st trak to w an a ja k o błędna, jeśli którykolw iek z nich odrzuciJg W p o n iższy m p rz y k ła d zie w p ro w a d z o n a w arto ść zm iennej je s t w eryfikow ana ptjjj
to w przypadku niew y p ełn ien ia p o la p rzez u ż y tk o w n ik a będzie w y g e n ero w an y b łąd konw ersji i autom atycznie nastąp i p o w ró t do form ularza. W y m u sza n ie w p ro w ad z an ia danych je s t p rzy k ła d em w a lid a cji realiz o w a n e j w e w n ę trz n ie p rz e z k o m p o n e n t U l, który nie p otrzebuje delegow ać tego z ad an ia do żadnej zew nętrznej m etody w alid acji czy obiektu w alidatora. A trybut req u i red m o że być sto so w a n y ra z e m z in n y m i, czego p rz y k ła d z n a jd u je się w punkcie 3.6.3.
.6,5. Pomijanie w eryfikacji Pom ijanie p rocesu w ery fik acji je s t m o żliw e dzięki u ż y c iu a try b u tu Immediate, co z o stało ju ż w yjaśnione w punkcie 3.2.2, „N atychm iastow e w ykonyw anie m etod obsługi” . Jest to istotna funkcjonalność, która pozw ala w ykonyw ać m etody obsługi zdarzeń i akcje, naw et jeśli form ularz z aw iera n iep o p ra w n e lub niek o m p letn e dane. W ten sposób m o że być realizow ane na p rzykład anulow anie procesu w prow adzania danych do fo rm u la rza i jed n o czesn e przejście do innej strony (ty p o w a funkcja p rz y c isk u A n u lu j fo rm u larza).
.7. Standardow e znaczniki
i kom ponenty Ul N ajw ażniejszą c ec h ą JSF, która w yróżnia go spośród innych szkieletów pro g ram isty cz nych dla aplikacji W W W , je s t w p e łn i fu n k c jo n a ln y m o d el k o m p o n en tó w U l, z d e fi niow any w p a k ie cie ja v a x . fa ce s .component. O p a rty n a k la s ie UlComponent i w z o rc u
±J0
Ja va S e rv e r F a ce s i E clip s e G a lile o . Tw orze nie aptik;
k o m p o zy tu (patrz rozdział 1.) m odel k o m p o n en tó w U l abstrahuje od konku'* zyka znaczników , w k tórym kom ponenty' s ą renderow ane — m oże to być HTJy czy d o w o ln y inny jęz y k . P o z a gen ery czn y m m o d e le m JSF dostarcza- rów nież k om p o n en ty ' U l (d o stę p n e w p a k ie c ie ja v a x . fa ce s . com ponerit. h tm l) oraz r< p rz ez n ac zo n e d la ję z y k a H T M L . A b y w yg en ero w ać stronę w id o k u w dow olnej tech n o lo g ii (np. JSP), kom po m u sz ą m ieć w sparcie k las p o m o cn ic zy c h zap e w n iają cy c h szeroki zakres doda)' w y oh funkcjonalności. K la sy w sp arcia s ą o d p o w ie d zialn e za obsługę zn aczn U IC o m p o n e n tT a g ) czy w y k o n y w an ie sp ecy ficzn y ch zad ań d elegow anych p r p o n e n ty U l do innych obiektów , tak ic h j a k k o n w e rsja, w a lid a cja , rendering ■■■■■■ ■ słu g a zdarzeń. S ta n d ard o w a im p le m e n tac ja JS F d o sta rcz a d w ie b ib lio tek i znaczników d h n e n tó w U l i k o m p o n en tó w w sparcia: core i htm l. Z naczn ik i zdefiniow ane w core ■' m a ją w izualnej re p rezen tacji i s ą całkow icie n iez ale żn e od technologii wic iż a p o w ia d a ją one obiektom n iez b ęd n y m do w y g e n ero w an ia strony w idoku oraz ; k o m p o n en tó w U l. B iblioteka htm l zaw iera zbiór znaczników JSF reprezentujących typow e elementy uH T M L (tzw . kontrolki). Z n ac zn ik i re p re z e n tu ją k o m p o n e n ty U l dla ję z y k a HTJ" zdefiniow ane w pakiecie ja v a x . f a c e s . component. h tm l , renderow ane przy użyciu s ta r1dow ego z bioru R enderK it HTML. Z n ac zn ik i z b ib lio tek i h tm l m ające w izualną rm z en tac ję są zgodne ze stan d ard em H T M L 4.01 i m o g ą być integrow ane z CSS JavaS c rip t. yjj|S
% Uwaga
W n in ie js z e j k s ią ż c e s tro n y JS P p re z e n to w a n e s ą w n o ta cji zg o d n e j ze składnią! X M L . J e ś li C z y te ln ik c h c ia łb y u m ie ś c ić k o m p o n e n ty n a tra d y c y jn yc h s tro n a c h JS P ,i to p o w in ie n p a m ię ta ć o u życ iu d yre k tyw t a g l i b d o za im p o rto w a n ia stan dardo w ych « b ib lio te k z n a c zn ik ó w J S F : y|
<%@ t a g lib u r i - " h t t p :/ / j a v a . s u n , com/js f / h t m l" p r e f ix -" h " %> <%& t a g lib u r i - ”h t t p : / / ja v a .s u n .c o m / js f/ c o re " p r e f ix = " f " t> P o w y ż s z e d yre k tyw y s ą z a b ro n io n e na s tro n a c h JS P zg o d n y c h z X M L i ja k o takie) n ie b ę d ą tu w y k o rzy s ty w a n e ! )
dziai 3. ♦ U żyw a n ie JS F
■
X71
w ynikow ego w niezm ienionej postaci. N a p rz y k ła d k o m p o n en t Html Form p o sia d a w ła ściwość t a r g e t , która określa m iejsce w y św ietlen ia strony w ynikow ej po p rzesłan iu form ularza. .Jeśli p rogram ista p rz y p isze w a rto ść ta r g e t w zn ac zn ik u JSF, np.: ■ -
target-"_blank". ..
Analogicznie będzie w yglądać użycie atrybutów definiujących obsługę zdarzeń D H TM L w języ k u JavaScript. Jednak nie w szystkie atrybuty w y stęp u jące w danym elem encie ję z y k a H T M L m o g ą być dostępne jak o w łaściw o ści od p o w iad ająceg o m u k o m p o n e n tu U l. W po d an y m przykładzie form ularza k o m p o n en t Html Form nie p o sia d a w ła śc iw o ści, któ ra o d p o w ia dałaby atrybutow i method form ularza. W y n ik a to z faktu, że w szy stk ie ż ąd a n ia w JSF przesyłane są za p o m o cą m eto d y P O S T — k o m p o n en t Html Form je s t re n d ero w a n y zawsze w postaci form ularza H T M L , z ustaw io n ą na stałe w artością atrybutu, tj.
Z e w zględu na s p e c yfic zn y s p o s ó b g e n e ro w a n ia identyfikatorów kom ponentów <»/ użycie styló w d e fin io w a n y ch dla s e le k to ró w # (o d n o s z ą c y c h s ię do w a rto ś c i atryt ■ id ) m o że b yć k io p o tliw e .
Uwaga
w ygeneruje n astępujący k o d w ynikow y w ję z y k u HTM L: < fo ra 1d“ "form Id" name-“ form id" m ethod-"post" a c tio n = ,,/ K ,a lk u la to r/fa c e s/fo rm .jsp " e n c ty p e -” appU c a t io n /x-w v»w -fo rm -u rlencoded"> < input typ e = ” hidden" name="formId" va1ue="form Id" /> c in p u t i d - ” fo rm Id :b u tto n " typ e = ” submit" name*" fo rm ld : b u tto n " value="Subm it'7>
3 .7 .1 .3 . Form ularze F o rm u larze HTM L służące do p rz e sy ła n ia d a n y c h n a se rw e r są reprezentot p o m o c ą k o m p o n en tu HtmlForm, któ ry stan o w i w y łą cz n ie k o n ten e r d la elementów m u la rza HTM L — k o m p o n en t HtmlForm n ie p rz e tw a rz a k om ponentów p o to i- ą i^ K o n te n er p o w in ien z aw ie rać przy n ajm n iej je d e n k o m p o n en t U l pozw alająm ■ tw ierdzenie form ularza HTM L (np. HtmlCommandButton), a w szy stk ie kom poner ściow e p o w in n y być zaw arte w fo rm ularzu. W k o d z ie w y n ik o w y m w łaśnk o m p o n en tu m o że b y ć u ż y w a n a ja k o p re fik s w n a zw a c h w szystkich kontrc m u larza ( " t d _ f o m u ł a r z a " : " i d j c o n t r o l k i "). D o m y śln ie atry b u t method for je s t n ied o stę p n y d la u ż y tk o w n ik a , a je g o w a rto ść je s t ustaw io n a n a stałe n; A n a lo g ic z n ie p a ra m e tr a c tio n je s t d om yśln ie u sta w io n y n a w a rto ść bieżąc ", »: ..... doku. P aram etr enctype je s t d o stę p n y d la u ż y tk o w n ik a , a je g o w a rto ść domy app i i c a ti on/x-www-formurl encoded. P o d su m o w a n ie dostęp n y ch w łaściw ości n e n tu fo rm u la rza p rz ed sta w io n o w tabeli 3.13.
1 Uwaga
Nie j e s t w ym a g a n e , a b y u żytk o w n ik z a w s z e d e fin io w a ł w a rto ś ć a tryb u tu i d — m o że b yć o n a w yg e n e ro w a n a p rze z J S F a u to m a ty c z n ie . W ta kim p rzyp a d k u w a rto ś ć id e n ty fik a to ra po s tro n ie klie n ta je s t m a ło c z y te ln a , g d y ż id e n ty fik a to r d o w o ln e g o e le m e n tu w e w n ą trz fo rm u la rz a b ę d zie zło że n ie m d w ó c h u n ik a to w yc h k lu czy, np. c in p u t t y p e = " t e x t " n a m e = "j_ 1 d _ jsp _ 2 2 9 0 9 4 2 7 3 _ l; jjid js p _ 2 2 9 0 9 4 2 7 3 _ 3 " />. je ś li u żyje m y ja w n y c h d ek la ra cji a try b u tó w id, m o że m y u z y s k a ć c z y te ln ie js z y kod id e n ty fik a to ra , n p . n a m e = " f o r m Id :t e x t Id " . A b y a n a liz o w a n ie k o du s tro n w yn ik o w ych b yło ła tw ie js z e , w n in ie jszym ro zd zia le p o w s z e c h n ie s to s o w a n e b ę d ą ja w n e d e k la ra c je id e n ty fik a to ró w .
T a b e la 3 .1 3 . P odsum ow anie cech kom ponentu fo rm u la rz a
R o d z in a
j a v a x .fac e s . Form
Z n a c z n ik , kom ponent
< h: form>. Html Form
W y g lą d w p rz e g lą d a rc e
brak
3.7.I.4. Polecenia Ifl
Z adaniem kom p o n en tó w p oleceń je st zap ew n ien ie interakcji u ży tk o w n ik a z a p lik a c ją poprzez generow anie zdarzeń akcji. K o m p o n en ty p o le c e ń u m o ż liw ia ją zatw ierdzanie i p rzesyłanie dan y ch z fo rm ularzy oraz d e fin io w a n ie m eto d u ru c h am ia n y c h w o d p o w iedzi na aktyw ację w yżej w ym ien io n y ch k o m p o n en tó w (w ystąpienie akcji). W y n i k iem a k cji m o że b y ć p rz ejśc ie n a in n ą stro n ę a p lik a cji. S ta n d ard o w y m i k o m p o n e n tami p oleceń JS F s ą przyciski i łącza, re p re z e n to w a n e p rz ez k la s y HtmlCommandButton i HtmlCommandLink.
m
A tr y b n ty H T M L 4.0
acce pt, a c ce p tc h a rs e t, d i r , en ctype , lang, s t y l e , t a r g e t , t i t l e
A tr y b u ty D H T M L
o n b lu r, onchange, o n c lic k , o n d b lc lic k , onfocus, onkeydown, onkeypre onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onreset, onsubmit
P o d staw o w e a tr y b u ty
b in d in g , id , rendered, s t y le C la s s
V Uwaga
S p ecy ficzn e a try b u ty
Typ
D om yślnie
O p is
prependld
boolean
tru e
O kreśla, czy identyfikator form ularza p o p rzed za identyfikatory jeg o komponentów.
submitte d
boolean
fa ls e
O kreśla, czy form ularz był ju ż przesyłany. A trybut dostępny tylko p ro g ram o w o w kod w aplikacji.
JS F w sp ie ra w y stę p o w a n ie w ie lu fo rm u la rz y n a stro n ie. G d y stro n a służy wyłą do w y św ietlan ia d anych, fo rm u la rz n ie je s t w y m a g an y . Je d n a k u ż y tk o w n ik ni. w ów czas m ożliw ości przejścia n a in n ą stronę aplikacji inaczej niż przez wykorzy p rz y cisk ó w n a w ig ac y jn y c h p rz eg ląd a rk i.
i
B ib lio te k a htm l u d o s tę p n ia je s z c z e z n a c zn ik re p re z e n tu ją c y kom p o n e n t łą c za H t m lO u t p u t lin k , któ ry ró w n ie ż u m o żliw ia p rz e jś c ie na inn ą s tro n ę lub d o z a s o b u a p lik a cji (n p . o b ra z u ). N ie je s t o n je d n a k k o m p o n e n te m p o le c e ń , g d yż je g o u ż y c ie nie p o w o d u je p rz e s ła n ia d a n yc h fo rm u la rz a i w yg e n e ro w a n ia zd a rze n ia akcji, a k o le jn y w y ś w ie tla n y z a s ó b nie j e s t ju ż p rz e tw a rza n y p rz e z J S F .
Z nacznik re n d em je n a stro n ie w ynikow ej H T M L elem ent p rz y ci sku < in p ut> . T yp p rz y cisk u zależy od w arto ści p a ra m e tru ty p e , który m oże przyjąć następujące w artości: ♦ submi t — p rz y cisk zatw ierd zający form ularz, ♦ re s e t — p rz y c isk c zy szc zą cy form ularz,
Jak w idać, użycie JS z m n ie jsza czy teln o ść k o d u strony w ynikow ej w przypadł sow ania łączy do z atw ierd z a n ia form ularzy.
3 .7 ,1 .5 , Pola i ob szary te k s to w e K ontrolki służące do w p ro w a d z a n ia danych u ży tk o w n ik a s ą reprezentowane kom ponenty należące do rodziny In p u t. K om ponenty te um ożliw iają modyfikacji św ietlanie w prow adzonych danych. Ponadto ro d z in a k o m p o n en tó w In p ut zawiei ponent Html InputH idden, k tó ry n ie re p re z en tu je kontrolki, lecz pole , 1 zaw artość p rz etw a rza n a je s t p o stro n ie serw era w sposób podo b n y ja k zawan nych pól w ejściow ych. Z nacznik reprezentuje jednow ierszow e pole tekstow e służące do dzania danych i je s t o d p o w ie d n ik ie m H T M L -o w e g o elem entu < in p u t type=" Z n ac zn ik < h : i np u tS e cre t> re p re z e n tu je je d n o w ie rsz o w e m askow ane pole te służące do w p ro w ad z an ia p o u fn y c h d a n y ch i je s t odpo w ied n ik iem HTM L elem entu <1nput type="passw ord"> . Z e w z g lęd ó w bezp ieczeń stw a danych doi zaw arto ść p o la nie je s t w y ś w ie tla n a p o p rz e sia n iu fo rm u la rza (val u e = " ") i pon w yśw ietleniu strony. U żytkow nik m oże to zm ienić poprzez ustaw ienie atrybutu re n a tr u e (patrz p rz y k ła d p o n iżej). Z nacznik reprezentuje w ielow ierszow e pole tekstow e (obszar) do w p ro w ad z an ia d a n y ch i je s t o d p o w ie d n ik ie m H T M L -o w eg o elem entu O b szar m oże być u ż y w a n y do w p ro w ad z an ia w ięk szy ch tek stó w i um ożliw ia k law isza E n te r do p rz e jśc ia do n a stę p n e j lin ii b e z u tra ty ste ro w a n ia (ang. R o z m ia r obszaru tek sto w eg o m o ż n a d efin io w ać, podając liczbę w ierszy i kolui Z nacznik służy do w prow adzania pól ukrytych i je s t odpowie* H T M L -o w eg o elem en tu <1nput ty p e =,'h id d e n ” >.
oraz w yrendęrow any na ich p odstaw ie k o d H T M L : « in p u t i g - ’’f o r m I d :t e x tI d ” t,ype="text" name-” formld: t e x t Id” v a l u e - " a . [email protected]" /’> ■rtnput id = " fp rm ld :s e c re tld ” type="passw ord’’ name="formId: s e c re tld " value=” a.m®helion.p-1" />
rows="4">notka
/> W tabeli 3.15 został zam ieszczo n y w y g lą d k om ponentów z aw a rty ch w p o w y ż sz y m przykładzie. e|a 3.1.5. Podsumowanie cech komponentów pól i obszarów tekstowych Ltindziiia ; Znacznik, komponent
javax.fa ce s. Input
HtmlInputText
HtmlInputSecret
HtmlInputTextarea
HtmlInputHidden
210C Tui kra -v.
brak
Standardowy wygląd w przeglądarce
[email protected]
Zdarzenia J S F
Zmiana wartości
Atrybuty HTML 4.0
(nie dotyczy ): accesskey, a l t (bez ), di r, d isa b le d , la b e l, 1ang, maxiength (bez < h :in p u tT e x ta re a > ), re a d o n ly, s iz e (bez < h :in p u tfe x ta re a > ), s t y le , ta b in a e x, t i t l e
Atrybuty DHTML
(nie dotyczy ): o n b lu r, onchange, oncl le k , o n d b ic lic k , onfocus,
i Podstawowe * atrybuty
;
onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, o n se le c t bin d in g , c o n v e rte r, id , rendered, re q u ire d , s ty le C la s s , va lu e , v a lid a t o r
Specyficzne atrybuty
TyP
Domyślnie
Opis
.cois
in t
brak
Dotyczy wyłącznie . Liczba kolumn.
immedlate
boolean
fa ls e
W artość logiczna wskazująca, czy wartość komponentu ma być skonwertowana i zweryfikowana w fazie aktualizacji stanu komponentów (natychmiast po odczycie wartości).
redisplay
boolean
fa ls e
Dotyczy wyłącznie . Wartość logiczna wskazująca, czy wartość pola ma być ponownie wyświetlana, gdy strona zostanie przeładowana.
brak
Dotyczy wyłącznie . Liczba wierszy.
P rzy k ład y u ży cia k o m p o n e n tó w w e jśc io w y ch n a stronie JSP: < h :1 n p u tle xt i d - " t e x t l d " v a iu e = ’’#{user.em a11}"/ > < h :InputH idden id -" h id d e n ld " v a l u e -’’param etr"/>
rows
1 i nt
. . . a ♦ U żyw anie JS F
Ja va S e rve r Fa ces i E clip s e G a lile o. T w o rze n ie aplij
■ I 3 .7 .1 .6 . W yśw ie tla n ie grafiki
mm
—
Gdy zostanie z d efin io w an y styl d la w y św ietlan e g o tek stu , np.: body
tekst w k odzie w y n ik o w y m b ęd zie sfo rm a to w an y p rz y u ż y ciu e le m en tu , tj.: after value
Interpretację p o w y ż sz eg o k o d u w p rz eg ląd a rce p o k a za n o w tabeli 3.17.
ja v a x .fa c e s .O u tp u t
Todzina
W ygląd k o m ponentu został zaprezen to w an y w tabeli 3.16.
Znacznik,
< h :o u tp u tText>
komponent
Htm lOutputText
H tm lO utputlabel
HtralOutputFormat
Htm lOutputLi nk
T a b e la 3 .1 6 . P odsum ow anie cech kom ponentu w yśw ietlającego grafikę
after value
T wygiąd
R odzina
ja v a x .fa c e s .G ra p h ic
wprzeglądarce
Z n a cz n ik , kom ponent
, HtmlG raphic Image
W y g lą d i
w p rz e g lą d a rc e
^
i 'X ; L o g o E clipse
HTML 4.0
A try b u ty H T M L 4.0
a l t , di r, h e ig h t, ismap, lang, longdesc, s t y le , t i t l e , usemap, w
A tr y b u ty D H T M L
o n b lu r, onchange, o n c lic k , o n d b lc lic k , onfocus, onkeydown, onk onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, o
P o d staw o w e a try b u ty
b in d in g , id , rendered, s ty le C la s s , va lu e
S pecy ficzn e a try b u ty
Typ
D om yślnie
O pis
u rl
S t rin g
brak
Definiuje adres wyświetlanego z:uuhn ¡
3 .7 .1 .7 . W yśw ie tla n ie te k stu i zw yk łych łą czy D o w y św ietlan ia zw ykłego tek stu oraz łąc zy słu ż ą cztery k o m p o n en ty z rodzir put, k tórych wspólna^ c e c h ą je s t m ożliw ość k o rz y stan ia ze stylów CSS do fo n ia w yśw ietlanej zaw artości. Z n ac zn ik < h: o utputT ext> u m o żliw ia w y św ietlan ie zw ykłego tek stu w kodzie kow ym H T M L . Jeśli k o m p o n en t nie je s t fo rm ato w an y , to zaw artość atrybuti je st renderow ana bezpośrednio po tekście u m ie sz c z o n y m w e w n ą trz z n a c z n ik a , i p o n iż e j: < h :o u tp u tT e xt v a lu e -" va lu e " >body
1 Sil
Instytut Sterowania i Systemów Informatycznych
accesskey (tylko ), c h a rse t (tylko ), coords (tylko < h :o u tp u tlin k > ), d i r , d is a b le d (tylko < h: o u tp u tlin k > ), h re fla n g (tylko ), lang, re i (tylko < h: o u t p u t li nk>), re v (tylko < h :o u tp u tli nk>), shape (tylko ), s t y le , ta b in d e x (tylko ), ta rg e t (tylko < h: o u tp u tlin k > ), t i t l e , typ e (tylko )
A trybuty
lub
w ygeneruje napis: "body v alue".
181
T e k s t, zn ajdujący się po m iędzy zn a czn ik iem otw iera ją cym i zam ykającym tra k to w a n y je s t ja k sta tyG zn y te k s t s z a b lo n u s t ro n y — J S F p o zw a la n a ta k ie p rz e p la ta n ie e le m entów sza blon u i ko m p o n en tów U l. Nie je s t to je d n a k ro zw iąza nie za le ca n e — zm niejsza o n a lc z y te ln o ś ć kodu i u n ie m o żliw ia d yn a m ic zn e m o d yfik o w a n ie za w a rto śc i stro ny.
D o w y św ietlania grafiki służy z n aczn ik < h : graph1clmage>, będący odpowń H T M L -ow ego elem entu . Jako elem ent w y jśc io w y n ie m usi on być umi w form ularzu. i * N a jw a ż n ie jsz y m a try b u tem z n ac zn ik a je s t u rl (H T M L ), któ ry definiuje ad • św ie tla n eg o zasobu. Jego w a rto śc ią m o że być z aró w n o pełn y adres U R L (n . localhost:8080/K alkulator/im g/eclipseicon.gif), ja k i ścieżka w zględem kontek: nego (im g/eclipseicon.gif), co jest znacznie w ygodniejszym rozwiązaniem . Ati t « B l je s t renderow any ja k o s r c w k odzie H T M L , co m o żn a zauw ażyć w poniższ- . mm M adzie. K o d strony JSP:
■
VP&&Z------— -----------------
o n b lu r, onchange, o n c lic k , o n d b lc lic k , onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup
Atrybuty DHTML i Podstawowe atrybuty
b in d in g , c o n v e rte r, id , rendered, s ty le C la s s , value
Specyficzne 1 atrybuty
Typ
Domyślnie
Opis
S trin g
brak
Dotyczy wyłącznie . Identyfikator pola, dla którego przeznaczona jest etykieta.
boolean
tru e
Dotyczy i . Wartość logiczna, wskazująca, czy znaki charakterystyczne dla HTML lub XML (< > i &) m ają być wyświetlane literalnie w przeglądarce.
— ............ escape
....
Znaki zabronione XM L w znacznikach JSF W dokum entach JS P z g o d n y ch z X M L do d e fin io w a n ia a try b u tó w n ie m o żn a używ ać znaków zab ro n io n y ch w X M L . P rz y k ład e m m oże b y ć z n a k m n iejszo ści (<) lub am persand (&). Z n ak ó w ty c h n ie m o ż n a sto so w ać , p o n ie w a ż p a rse ry X M L m o g ły b y je błędnie interpretować, np. znak m niejszości w ew nątrz elem entu zostałby zidentyfikow any
182
Ja va S e rve r F a ce s i t c iip s e G a lileo. Tw orze nie ay
¡ał 3- ♦ U żyw a n ie JS F
ja k o p o c zą te k znacznika. Specyfikacja X M L daje m ożliw ość u ż y w an ia tak ie 1 z w ykorzystaniem pred efin io w an y ch od n iesień jed n o stk i. Jeśli -np. chcenr znak m niejszości (<), w p isu je m y z am iast niego sekw encję & lt;, znak' arną &, znak w iększości (>) & §t; itd. P ró b a u m ie sz cz e n ia znak u zabronioneg
183
.Składnia wyrażeń form atujących określona jest w specyfikacji klasy ja v a . t e x t. Messagemat, której obiekty re p re z en tu ją fo rm ato w an y tekst. K la sa p o z w a la form atow ać typy: liczbow y, daty i czasu, dostarczając d la k ażd e g o z ty ch ty p ó w k ilk a stylów . P a ram etry oraz fo rm at ich w y św ietlan ia p rz e k a z y w a n e s ą w n a w ia s a c h k la m ro w y c h według n astępującego porządku:
tekst" />
i mdeks_parametru . fo rm a to w a n y_typ (o p cjo n a lrrie ), s t y l_ fo rm a tu (o p c jo n a ln ie )}
zak o ń czy się błędem p a rso w a n ia w trakcie kom p ilacji strony JS P do p o s ta c i: (zgłoszonym p rz ez JspD ocum entP arser).
K lasa HejsageFormat p o z w ala p o n a d to n a z d e fin io w a n ie ty p u w y b o ru (ang. c h o ice fo rm a t'), d e fin iu jąc eg o n ap isy , w y św ietlan e , g d y p rz e k a z y w a n y p a ra m e tr lic z b o w y spełnia określone w arunki. W zorzec w y b o ru z aw ie ra zb ió r p a r w a rto ść-n a p is, w k tó rym w artości są oddzielone od napisów sy m b o lem lic z b y (#) lub op erato ram i re la cy j nymi (<, >). P oszczególne p a ry (opcje w yb o ru ) odd zielo n e s ą sep arato ram i w po staci znaku |. T yp w yboru je s t przydatny, gdy chcem y w y św ietlić form ę fle k sy jn ą rz e czow nika zam iast liczby lub j ą uzupełnić (szczeg ó ln ie w ję z y k u polsk im , gdzie w y stępuje w iele k o ń c ó w ek liczby m nogiej). Ilu stru je to p o n iż s z y p rz y k ła d , w k tó ry m zdefiniow ano trzy opcje:
Jeśli ren d ero w an y tekst zaw iera znaki sp ecjaln e H T M L lub X M L , to dom y sta n ą one w yrenderow ane w sposób u m o żliw iając y przeg ląd arce w yśw ietłer teralnie, np. d la n astępującego kom ponentu: < h :o u tp u tT e xt val ue=" 8.11 :B>t e k s t & lt : /B>: “ />
b ęd zie w yren d ero w an y k o d strony w ynikow ej H T M L :
«tv.ou tputFora at value="Odvriedzono nas: {0 .c h o ic e ,0#brak odw iedzin|1#jeden ra z1 18.lt; « » { 0 , number.1n te g e r} ra z y }" > < f : param va 1 u e -"# {a p p li c a t lonB ean.c o u n t e r}” />
&11: B>: t e k s t 8 .lt : /B>:
interp reto w an y p rzez p rzeg ląd a rk ę ja k o napis < 8 >tekst. Jeśli w ty m samy k ład z ie zm ienim y d o m y śln ą w artość atry b u tu escape, tj,: < h :o u tp u tT e xt v a lu e = " & lt: 8>: t e k s t 8 .lt : /B>:" escape-"fa1 se"/>
Jeśli w artość p aram etru będzie:
to w y ren d ero w an y k o d n a stronie H T M L b ęd zie m ia ł postać:
♦ ró w n a 0, to n a ekranie po jaw i się n ap is O dw iedzono nas: b ra k odw iedzin,
tekst«/B>
♦ ró w n a 1, to n a ekranie po jaw i się napis O dw iedzono nas: je d e n raz,
i zo stanie w yśw ietlony jako: te k s t. Z n ac zn ik < h: outputL abel > je s t w y k o rz y sty w a n y do defin io w an ia ety k iet dla kona.,, lek w ejściow ych. E ty k ieta w ią za n a je s t z e le m en tem d o celo w y m p o p rzez atr którego w a rto śc ią je s t id en ty fik ato r kon tro lk i, np.: < b:1 nputText 1 d = "te xtId "/>
K od kom ponentu etykiety będzie w yrenderow any w języku H T M L jako elem ent 1.
■■ ir
<1abel fo r= " fo rm ld :te x tId " > o u tp u tla b e l< / la b e l» « in p u t id = " fo rm Id :te x tId " ty p e = "te x t" nam e= "fo rm Id:textId" />
Z nacznik je st używ any do w yśw ietlania param etryzow anego i W artości p aram etró w s ą osadzane w tek ście ko m u n ik atu z a p o m o c ą sym boli zn-rcnczy ch u m ieszczan y ch w n a w iasac h klam ro w y ch , a sam e p a ram etry ja k o komponerrą potom ne s ą deklarow ane znacznikiem < f :param>. P rosty przy k ład parametryzowanego tekstu został ju ż przedstaw iony w punkcie 3.2.3. W p rz y k ła d zie ty m k a ż d y paramen b y ł fo rm a to w a n y id en ty c zn ie. M o ż liw e je s t je d n a k w y k o rz y sta n ie ró ż n y ch wnnntó w d la p o sz c z e g ó ln y c h p a ra m e tró w , np.: < f : pa ram v a lue-"#{m yBean.d a te } ">
w yśw ietli datę 4.02.2010 w form acie: Data: czw a rte k. 4 lu t y 2010.
U życie pow yższego łącza spow oduje przejście n a stronę autora: http://www.issi. ■ Sm-u, p l/? a c tio n = lll& id = 6 . P o n ie w a ż do d o w o ln y c h a try b u tó w z n ac zn ik ó w JS ... ‘ przypisyw ać w yrażenia reprezentujące w artość, łąc za m o g ą być generow ane w sl POSÓb dynam iczny.
ja v a x . faces'. Message
ja va x.fa ce s.M e ssa g e s
, Html Message
, HtmlMessages
fo rm Id :t e x t Id : Va1id a tio n E r r o r : Value is re q u ire d .
♦ fo rm ld : lo g in : V a lid a t io n E r r o r : Value is requi red.
ąfimponent T-^ygląd w przeglądaixe -ik .
♦ fo rm ld : password : V a lid a t io n E r r o r : Value i s le s s than a llo w a b le minimum o f ’ 4'
... Uwaga
^trybuty -f ir r M L 4.0
Do w yśw ie tla nia zw yk łego te k stu b e z fo rm a to w a n ia C S S m ożna w yko rzystać zns: tms ię w bib lio tece cors zn a czn ik < f :v e rb a tim > , re p re ze n tu ją cy kom po nen t U m n m
¿trybuty .nH TM L
3.7.1.8. W yśw ietlanie kom unikatów
podstawowe
Z nacznik służy do d e fin io w a n ia e le m e n tu w y św ietlając e g o kor dotyczące konkretnego pojedynczego kom ponentu w ejściow ego, wskazyw anego ¡lUUm. tem fo r, np.: < h :in p u tT e x t id = " t e x t ld " re q u ire d -" tru e " / >
K om u n ik at o błędzie zw iąz an y m z b ra k ie m w a rto ści w ym aganej zostanie wyręnderow any ja k o (w ygląd w p rz eg ląd a rce p o k a za n y w tabeli 3.18): formId:textId: V a lid a t io n E r r o r : Value is requi re d . «/sj-nIstotnym o graniczeniem z asto so w an ia z n ac zn ik a je s t wyświetl: łącznie pierw szeg o k o m u n ik a tu zw iązanego z d an y m k o m p o n en tem — pozo; m unikaty s ą p om ijane. Z n ac zn ik p o z w ala n a w yśw ietlanie ws kom unikatów , k tórych ro zm ieszczen ie m o ż n a ustaw iać p rzy u ż y ciu atrybutu (dom yślnie w artość l i s t ) . P rz y k ład u ż y c ia d la k ilk u elem entów w ejściow ych: < h :in p u tT e x t id = " lo g in " re q u ire d = " tru e " /> < h :in p u tT e x t id-"p a ssw o rd "> < f : val idateLen gth mi nimum="4"/>
< /h:form>
Utrylraty "Specyficzne atrybuty
o n b lu r, onchange, o n c lic b , ondbl c li c k , onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmcuseover, o n re se t, onsubmit b in d in g , id , rendered, s t y l eClass
Typ
Domyślnie
S trin g
brak
Dotyczy wyłącznie . Identyfikator (wartość atrybutu i d) komponentu, dla którego ma być wyświetlona wiadomość.
'■errorClass, fatalClass, infoClass, . warnClass
S trin g
brak
Klasy CSS do formatowania komunikatów o poziomach istotności SEVERITY ERROR, SEVERITY FATAL, SEVERITYJNFO, SEVERITYJ/JARN (patrz 3.4.3).
.y ief .yle, infoStyle, . warnStyle
St rin g
brak
Style CSS do formatowania komunikatów o poziomach istotności SEVERITY ERROR, SEVERITY FATAL, SEVERITYJNFO, SEVERITY_WARN (patrz 3.4.3).
^global Only
boolean
fa ls e
Dotyczy wyłącznie . Wartość logiczna wskazująca, czy zakres wyświetlanych komunikatów ma być ograniczony do globalnych wiadomości (niezwiązanych z żadnym komponentem).
layout
S trin g
" lis t"
Dotyczy wyłącznie . Sposób wyświetlania wielu komunikatów — dostępne są wartości " l i s t " i " ta b le " .
showDetai 1
boolean
patrz obok
Wartość logiczna wskazująca, czy wyświetlić szczegółową wersję komunikatu. Domyślne wartości to tru e dla i fa l se dla .
'•'•showSummary
boolean
patrz obok
Wartość logiczna wskazująca, czy wyświetlić streszczoną wersję komunikatu. Domyślne wartości to f a ls e d la i t ru e dla .
fa ls e
Wartość logiczna wskazująca, czy szczegóły wiadomości będą wyświetlane jako podpowiedz. Podpowiedz jest wyświetlana tylko wtedy, gdy showDetai 1 i showSummary są ustawione na wartość tru e .
- i
P odczas p rzetw arzan ia żądania k o m p o n en ty w e jśc io w e oraz p o w iązan e z n ■" , datory i konw ertery m o g ą generow ać ko m u n ik aty o błędnych danych w prow przez u ży tk o w n ik a (w ięcej n a ten tem at w p u n k c ie 3.4.3 i w rozdziale 4.). Uomunikaty te m o g ą zostać w y św ietlo n e p rzy u ż y c iu sp ecjaln y ch k om ponentów : Message. T reść k o m u n ik ató w je s t re n d ero w a n a n a strom e w ynikow ej ja k o zawartość ele m en tu , k tó ry m o że b y ć sfo rm a to w a n y z ależ n ie o d p o z io m u wolności k o m u n ik atu . U ż y tk o w n ik m o że z d e fin io w a ć ró ż n e style C SS dla obsługi 1 katów o następujących p o z io m a ch : SEVERITY ERROR, SEVERITY FATAL, SEVERE SEVERITY_WARN.
d i r , lang, s t y le , t i t l e
. ■tooltip
•boolean
Opis
♦ U żyw anie JS F
G d y oba p o la z o sta n ą n ie w ła śc iw ie w y p e łn io n e , n a stronie w ynikow ej pojau stę p u ją cy k o d (w y g lą d w p rz e g lą d a rc e p o k a za n o w tab e li 3.18):
<11> f o r m ld :lo g in : V a lid a t io n E r r o r : Value is ' re q u ire d . < / li> <11> fo rm ld :p a ssw o rd : V a lid a t io n E r r o r : Value is le s s than a llo w able w .,. w o f '4 ' < / li> «/ u l >
i
3 19 . P o d su m o w a n ie cech k o m p o n e n tu p o la w yb o ru ■ja v a x .fa c e s .SelectBoolean
: na n ik ,
.glądarce
■enia JSF
Je śli w a rto śc ią a try b u tu 1a yo u t je s t ta b l e, k o m u n ik a ty b ę d ą renderow ane w |0(j lum now ej tab eli, np.: n°'t0« t a b le id -"fo rm Id :m s g Id ">
T o rm ld :lo g in : V a lid a t io n E r r o r : Value is re q u ire d .
r
To rm ld : passw ord: V a lid a t io n E r r o r : Value is le ss than allo w -u n,, w o f '4 '
« / ta b le s
3 .7 .1 .9 . P o le w yb oru
u ty
H T M L 4.0
< h :s e ie c tB o o leanCheckbox 1 d -"c h e c k ld " v a lu e = ”t r u e ’7>
z o stan ie w y re n d ero w an y ja k o :
K orzystając z p ola w yboru, n a le ży zw rócić uw agę, że nie w szystkie zdarzenia D w spierane przez różne przeg ląd ark i (In tern e t E xplorer nie generuje zdarzenia < P o d s u m o w a n ie d o stę p n y c h w ła ś c iw o ś c i k o m p o n e n tu p o la w y b o ru przeć w ta b e li 3.19.
3 .7 .1 .1 0 . Pola w yb oru p o je d yn c ze j op cji K o n tro lk i z ap e w n iają ce m o ż liw o ść w y b o ru je d n e g o z w ie lu elem entów z listy z en to w a n e s ą p rz e z k o m p o n e n ty z ro d z in y SelectOne. K o m p o n en ty z tej roi d e ro w an e s ą zazw yczaj ja k o listy ro z w ija n e, zb io ry p rz y cisk ó w rad io w y ch li p o jed y n c ze g o w y b o ru . W s p ó ln ą c e c h ą k o m p o n e n tó w je s t k o rzy stan ie z komponentów U IS e le c trte m lub U IS e le c tIte m s re p re z e n to w a n y c h p rz e z z n a c z n ik i < f :s e li i < f : se i e c tlte m s > do d e fin io w a n ia e le m e n tó w lis ty (p a trz p u n k t 3.7.2.2). Z n a c z n ik < h : s e l ectOneRadi o> słu ż y do d e fin io w a n ia z b io ru p rz y c isk ó w radio’ z k tó ry c h ty lk o je d e n m o że b y ć z az n a c z o n y . Z n ac zn ik je st ri.-i¡ce ro w a n y ja k o ele m en t < ta b le > z a w ie ra ją c y ele m en ty p otom ne <1nput ty p e = "ra d i| W zależności od w artości atrybutu 1ayout p o sz c z e g ó ln e p rz y c isk i ra d io w e s ą rozn czane p o z io m o lub p io n o w o . W p o n iż s z y m p rz y k ła d z ie p rz e d sta w io n y został kod k o m p o n e n tu p o z w a la ją c y n a w p ro w a d z a n ie p łc i o so b y , re p re z e n to w a n e j w aplikant z m ie n n ą ty p u boolean:
Zmiana wartości accesskey, border, d i r , d isa b le d , la b e l, lang, rea don ly, s t y le , s iz e , ta b ln d e x, t i t l e
.uty DHTML
onbl u r, onchange (nie działa w przeglądarce Internet Explorer), oncl 1ck, o n d b lc lic k ,o n fo c u s , onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onraouseover, onmouseup, o n se le c t
rwowe atrybuty
bin d in g , c o n ve rte r, id , rendered, re q u ire d , s t y le C la s s , v a lid a t o r , value, va lueC h an getistener
flezne atrybuty
Typ
Domyślnie
Opis
boolean
fa ls e
Wartość logiczna wskazująca, czy wartość kom ponentu ma być skonwertowana i zweryfikowana w fazie aktualizacji stanu komponentów (natychmiast po odczycie wartości).
a
Z nacznik służy do definiow ania pola wyboru, repi cego w arto ść logiczną. P o le w y b o ru m o ż e z n ajd o w a ć się w stanie zaznaczam lub n ie z a zn a c zo n y (a try b u t v a lu e u s ta w io n y o d p o w ie d n io n a tr u e lub fa ls e ). Znacviub < h : sei ectB ool eanCheckbox> ren d ero w an y je st w kodzie H T M L jak o elem ent ■ ■■0JT> N a p rz y k ła d n a stęp u jąc y k o m p o n e n t stro n y JSP:
aanCheckbox>, H tm lS e le ctB o oleanCheckbox
kom ponent
< f : s e le c t Item id="m ld" ite m V a lu e -"tru e " itemLabel="M"/> < f :s e le c t item 1 d = "fld ’' 1 tem V a lu e-"fa lse" item Label=’'F"/>
Kom ponent w kodzie strony wynikow ej z o sta n ie w y re n d e ro w a n y jak o (w ygląd w prze glądarce p okazan o w tab eli 3.20):
«in p u t typ e = "ra d io " checkea-"checked" na m e-"form Id:genderId" id “ "fo rn u d :g e n d e rld :0 " va lu e = "tru e " /> «la b e l fo r= "fo rm ld :g e n d e rld :0 ” > M «/labei> «/td> «td> «in p u t t y p e -" r a d io M nam e="form Id:genderId" id -" f o r m Id :g e n d e r id :l" v a lu e = "fa ls e " /> «labei fo r= " fo rm Id :g e n d e rId :l" > F < /td> «/tr> «/ta b le >
Gdy lista opcji je s t d ługa i zaw iera w iele opisów , z b ió r p rzy cisk ó w rad io w y ch zajm ie sporo m iejsca n a ekranie p rzeglądarki. W tak im p rzy p ad k u lep szy m rozw iązaniem m oże być z astosow anie listy rozw ijanej (ang. combo box), definiow anej p rzez zn ac z nik , k tó ra po zw o li z ao szczęd zić p rz estrz eń n a stronie. L ista ro z w ijana re n d ero w a n a je s t n a strom e H T M L z a p o m o c ą elem entu < s e le c t> . W k o n ty nuacji p ow yższego p rz y k ła d u kod k o m p o n en tu listy rozw ijanej b ęd zie m ieć postać: «luselectOneM enu id="menuld" value-"# {m yB ean.ge n d er}" > « f :s e le c t lt e m id="m aleld" 1temValue=”tru e " 1tem label="Male"/> « f :s e le c t lt e m id = ” fem aleld" ite m V a lu e = "fa lse " item Label="Fem ale,7>
188
f 3 . ♦ U żyw a n ie JS F
Ja va S e rv e r F a ce s i E c lip s e G a lile o. T w o rze n ie ap
Tabela 3 .2 0 . P odsum ow anie cech kom ponentów p ó l wyboru pojedynczej opcji
oraz kod strony w ynikow ej w ję z y k u H T M L :