Sunteți pe pagina 1din 6

JSF-fundamente

Introducere
Tehnologia Java Server Faces este un framework de construire a componentelor server side
folosite in aplicatiile web. JSF consta din:
Un AP ce repre!inta starile componentelor si care gestionea!a starile" manipulea!a
evenimentele" face validari server side" conversii de date" navigatia intre pagini"
internationali!are si furni!ea!a e#tensibilitate spre alte capabilitati
$ibrarii de tag%uri pentru adaugarea de componente paginilor web si pentru conectarea
componentelor la obiectele de pe server
& aplicatie JSF contine urmatoarele tipuri componentele:
Pagini JSP
$ibrarii de taguri utili!ator
o Pentru redarea componentelor U pe pagina
o Pentru repre!entarea manipulatorilor de eveniment" validatori sau alte actiuni
'omponente U repre!entand obiecte cu stare de pe server
(anaged beans ce definesc proprietatile si functiile componentelor U
'omponente utili!ator de intrare:
o )alidatori
o 'onvertori
o *vent listener%i
o *vent handler%i
Fisier configurator pentru resursele aplicatiei
& aplicatie web ba!ata pe JSF trebuie sa includa:
& librarie ce contine tag%uri pentru repre!entarea componentelor U
& librarie pentru actiuni" numita core tag librar+
Schema urmatoare ilustrea!a cum functionea!a tehnologia JSF.
JSF este ba!at pe ()'" ce are propriul front controller cunoscut sub numele de Faces servlet
si care controlea!a interactiunile clientului cu serverul. Totodata front controller%ul actionea!a
ca o interfata intre client si componentele paginii JSF.
& pagina JSF este format dintr%o arborescenta de componente U. ,e fiecare data cand apare
un eveniment pe pagina" componenta U accesea!a managed beanurile aplicatiei JSF.
(anaged beanurile contin logica aplicatiei si manipulea!a procesarea datelor utili!ator. ,upa
ce acestea au fost procesate JSF utili!ea!a un -ender.it pentru a reda afisarea clientului.
diferitele tipuri de clienti" precum desktop" P,A" etc necesita diferite tipuri de -ender.it%uri.
& aplicatie JSF se e#ecuta intr%un container servlet si contine:
'omponente Java/ean" cunoscute si sub numele de managed bean" ce contin modelul
de date si e#ecuta functionalitatile aplicatiei
*vent listenere
Pagini JSP descrise de componente JSP repre!entand U
'lase helper server side
& librarie custom tag pentru redarea componentelor U
& librarie custom tag pentru pentru repre!entarea event handler%ilor si validatorilor
'omponente U repre!entand obiecte server%side cu stare
)alidatori utili!ati pentru validarea datelor componentelor individuale inainte de
actuali!area pe server
(anipulatoare de evenimente si navigare
Fisiere de resurse ale aplicatiei specificand servlet controller%ul JSF%ului" managed
bean%urile si manipulatorii de navigatie
Aplicatiile JSf difera de alte aplicatii servlet0JSP prin faptul ca sunt diri1ate de evenimente"
functionea!a prin procesarea evenimentelor" cau!ate de actiunile utili!atorilor. Urmatoarea
diagrama ilustrea!a cele mai sus mentionate:
Astfel" utili!atorul produce un eveniment" cum ar fi click%ul pe un buton" in pagina ide#.1sp.
2otificarea evenimentului este trimisa ca o cerere 3TTP serverului. n web containerul
serverului este un servlet special" specificat in diagrama ca JSF 'ontroller" care procesea!a
cererea si o trimite catre o pagina JSP. ,aca e necesar" folosind librariile de tag%uri JSF si
-ender.it%ul pagina JSP generea!a iesirea si raspunsul este trimis clientului ce afisea!a
re!ultatul. JSF furni!ea!a un listner de actiune predefinit pentru navigare. Astfel" in fisierul de
configurare al aplicatiei" faces-config.xml" printr%o intare de forma:
<rule from-view-id=a.jsp to view-id=b.jsp>
Action listener%ul de navigatie stie ce pagina va afisa in continuare.
)om pre!enta" in continuare" cele mai importante notiuni relativ la tehnologia JSF:
U component classes" specifica starea si comportamentul componentelor U. &
pagina JSF este formata dintr%un arbore de componente U. ,e fiecare data cand
utili!atorul trimite o pagina" acesta o trimite serverului. Parametrii cererii sunt mapati
unui backing bean ce comunica cu componenta. /acking bean%ul este interfata cu
logica aplicatiei" numita si modelul logic.
'omponent rendering model" fiecare componenta are o repre!entare pe server ce reda
componenta clientului sub forma unui marca1 4markup5. 'lientul utili!ea!a acest
marca1 pentru a desena componenta pe ecran. -edarea fiecarei componente poate fi
specificata fie in fisierul de configurare al aplicatiei fie in logica de rulare" aceasta
inseamna ca fiecare componenta poate fi redata independent de platforma. Aceasta
inseamna ca fiecare componenta are posibilitatea de a fi redata diferitelor dispo!itive
precum P,A" telefoane mobile" etc. ,e asemenea" poate fi redata folosind diferinte
repre!entari. Spre e#emplu" o componenta booleana poate fi redata ca un radio buton"
buton de selectie sau optiune dintr%un meniu.
(anaged bean 4backing bean5" sunt obiecte Java/ean ce servesc ca interfata intre
pre!entare si logica aplicatiei
*vent and listener model" procesarea pe server a fiecarei componente a paginii poate
cau!a comportamente noi de inserat in lista evenimentelor" ce apar in diverse fa!e ale
procesarii cererii trimise
'onversion model" fiecare parametru soseste de la client ca un string. 'onversia se
rfefera la transformarea acestuia intr%un obiect Java potrivit
)alidation model" se verifica daca obiectele de intare intrunesc conditiile asteptate de
aplicatia web
2avigation model" dupa ce cererea a fost procesata JSF include un mecanism pentru a
determina care pagina a aplicatiei va fi urmatoarea afisata.
'omponentele U sunt obiecte ce gestione!a interactiunea cu un utili!ator si compune
interfata utili!ator a unei aplicatii JSF. *#emple de componente: te#t bo#" panel" data grid"
label sau button.
& componenta U JSF este un obiect cu stare si este pastrat pe server. 'omponentele pot fi
responsabile de propria afisare sau pot delrga afisarea catre un render.
JSF furni!ea!a componente U predefinite. Acestea sunt clase ce specifica functionalitatea.
Scurt istoric
Protocolul de transport 3TTP este un protocol stateless. Un server 3TTP raspunde fiecarei
cereri si nu pastrea!a niciun fel de informatii despre raspuns. Aceasta arhitectura face www
scalabil. n ca!ul unei aplicatii insa" aceasta arhitectura nu este folositoare pentru ca cererile
sunt in relationate si de aceea ele necesita o stare.
& solutie in acest sens este utili!area '6 4common gatewa+ interface5 ce suprapunea un
proces peste o cerere in vederea accesarii unor depo!ite de date utili!ator create de sesiunile
dintre cereri. Aceasta solutie ingradea insa scalabilitatea.
n Java solutia persistentei datelor intre cereri a fost implementata de catre servlet%uri. Aceasta
tehnologie folosea un AP pentru gestiunea datelor de sesiune. ,e!avanta1ul servleturilor era
slaba coordonare intre business logic si presentation logic. Pasul urmator a fost facut prin
paginile JSP" care includeau cod Java intre tag%urile 3T($. (odelul in care aplicatiile
foloseau JSP si servlet este similar modelului ()'.
JSP Standard Tag $ibrar+ 4JST$5 incapsulea!a functionalitatea de ba!a" comuna multor
aplicatii web sub forma de tag%uri. JST$ ofera suport pentru operatii ca: iteratii" conditionari"
manipulari ale documentelor 7($" internationali!are" S8$ sau integrarea tag%urilor custom.
ntr%o aplicatie web traditionala o pagina 3T($ este descarcata si afisata de pe un server.
,aca pagina contine si un formular" utili!atorul poate sa%l complete!e si sa%l e#pedie!e
serverului web" care generea!a raspunsul ca o pagina 3T($ pe care o retrimite web
browserului client. Serverul nu mentine niciun detaliu despre cerere dupa ce raspuns a fost
returnat.
Structura unei aplicatii JSF
Fisierele cu care un de!voltator al unei aplicatii JSF interactionea!a sunt:
web.xml" este fisierul deplo+ment descriptor al aplicatiei web
faces-config.xml" este fisierul deplo+ment descriptor specific JSF%ului folosit
pentru configurare
fisierele .jsp folosite pentru view
fisierele backing beans 4.java5 folosite pentru interactiune cu modelul
modelul 4.java5" ce comunica cu data tier pentru asigurarea persistentei. Acestea nu
sunt parte a tehnologiei JSF
Structura simplificata a unei aplicatii ce foloseste JSF" asa cum a fost ea creata de *clipse"
este evidentiata in diagrama urmatoare:
Un fisier .jsp ce contine o pagina JSF are urmatoarea structura:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pagencoding="ISO-8859-1"%>
<%@ taglib prefix="f" uri="http://java.sun.cm/jsf/cre"%>
<%@ taglib prefix="h" uri="http://java.sun.cm/jsf/html"%>
<!"#$T%& 'tml &()*+$ ,---./$--"T" 0T1* 2.34 Transitional--5,
,'ttp6--www.w/.org-T7-'tml2-loose.dtd,>
<'tml>
<'ead>
<meta 'ttp-e8uiv="!ntent-"#pe" content="text/html; charset=ISO-8859-1">
<title>+nsert title 'ere<-title>
<-'ead>
<body>
<f6view>
<f6load)undle basename="$eans.messa%es" var="ms%"->
<'6form>
<'6panel9rid border="1" columns="&">
<'6outputText value=,:;msg.name<,><-'6outputText>
<'6inputText value=,:;login)ean.name<,><-'6inputText>
<'6outputText value=,:;msg.password<,><-'6outputText>
<'6input=ecret style="'()th: 15*px" value=,:;login)ean.password<,>
<-'6input=ecret>
<-'6panel9rid>
<'6command)utton value="+%(n" action="l%(n"><-'6command)utton>
<-'6form>
<-f6view>
<-body>
<-'tml>
Primele doua linii includ declaratiile celor doua tag librar+ cerute. $inia 9 declara f ca prefi#
folosit de tag%urile din biblioteca JSF core si care sunt independente de render kit. $inia :
declara ' ca prefi# al tag%urilor JSF ce constituie componente standard ce sunt redate in
format 3T($.
Atributele ce contin valori string delimitate de :;>< sunt asa numitele value binding. JSF
cauta valorile acestor atribute si le inlocuiesc cu un string. )alue binding utili!ea!a
*#pression $anguage pentru a lega tag%ul de valoarea din backing bean.
'ateva dintre tagurile folosite in e#emplul anterior:
<f6view>><-f6view>" delimitea!a conte#tul JSF. Toate tagurile JSF trebuie sa
apara intre ele
<'6form>><-'6form>" reda un element form 3T($
<'6outputText>->" reda un te#t static
<'6inputText>->" reda un camp de intrare form
<'6input=ecret>->" reda un camp de intare form" unde type=password
<'6command)utton>->" reda un camp de intare form" unde type=button. Acest tag
are un atribut action ce indica faptul ca urmatoarea pagina a aplicatiei va fi afisata
la click.
Backing bean
package beans?
public class *ogin)ean ;
=tring name?
=tring password?
public =tring get5ame@A ;
return name?
<
public void set5ame@=tring nameA ;
this.name = name?
<
public =tring get&assword@A ;
return password?
<
public void set&assword@=tring passwordA ;
this.password = password?
<
<
*ste implementat dupa modelul Java/ean%urilor. Fiecare valoare legata dintr%o pagina JSF
este mapata prin metode getter%i si setter%i in backing bean. Spre e#emplu"
:;login)ean.name< este mapata prin metodele get5ame@A si set5ame@A din backing bean%
ul *ogin)ean. ,e remarcat sufi#ul metodelor get si set care sunt asemanator cu numele
atributului" prima litera ma1uscula.
Fisiere de configurare
Pentru aplicatia anterioara fisierul faces-config.xml are urmatorul continut:
<Bxml version="1.," encoding="-".-8"B>
<faces-config
xmlns="http://java.sun.cm/xml/ns/javaee"
xmlns6xsi="http://'''.'/.r%/&,,1/01+Schema-(nstance"
xsi6sc'ema*ocation="http://java.sun.cm/xml/ns/javaee
http://java.sun.cm/xml/ns/javaee/'e$-facescnf(%212&.xs)"
version="1.&">
<managed-bean>
<managed-bean-name>login)ean<-managed-bean-name>
<managed-bean-class>beans.*ogin)ean<-managed-bean-class>
<managed-bean-scope>session<-managed-bean-scope>
<-managed-bean>
<navigation-rule>
<display-name>login<-display-name>
<from-view-id>-login.jsp<-from-view-id>
<navigation-case>
<from-outcome>login<-from-outcome>
<to-view-id>-welcome.jsp<-to-view-id>
<-navigation-case>
<-navigation-rule>
<validator>
<display-name>nmn<-display-name>
<validator-id>beans.Calidate&assword<-validator-id>
<validator-class>beans.Calidate&assword<-validator-class>
<-validator>
<-faces-config>
Tag%ul managed-bean mapea!a o instanta a Java/ean%ului catre o value binding. n e#emplul
nostru *ogin)ean catre login)ean. Fisierul de configurare poate contine mai multe astfel de
taguri. ,omeniul stabilit pentru bean" in e#emplu" este session" ceea ce inseamna ca in
momentul in care sesiunea se incheie instanta managed beanului este distrusa. Alte valori
posibile pentru domeniu sunt: application si re8uest.
Tag%ul navigation-rule configurea!a reguli de navigare statica pentru aplicatia JSF. n
e#emplul nostru" in pagina login.jsp" actiunea login determina aplicatia sa afise!e pagina
welcome.jsp. Fiecare tag navigation-rule defineste o pagina de pornire prin tagulul from-
view-id. )aloarea acestui element poate fi numele unei pagini web sau o e#presie regulata.
Spre e#emplu" D defineste o regula de navigatie pentru toate paginile web din aplicatie.
*lementul from-outcome defineste actiunea" adica un string ce specifica care este pagina
potrivita pentru a fi urmatoarea. *lementul to-view-id defineste destinatia.

S-ar putea să vă placă și