Sunteți pe pagina 1din 10

Curs 8 Complemente JSF, Facelet

Utilizarea obiectelor custom


Prin obiecte custom intelegem convertori, validatori sau componete custom.
Un convertor custom este aplicat unei componente prin una dintre urmatoarele modalitati:
Referim convertorul prin atributul converter al tag-ului componenta
Inseram un tag converter in interiorul tag-ului componenta si referim custom
convertorul printr-unul dintre atributele tagului convertor
Un validator custom este aplicat unei componente intr-unul dintre urmatoarele moduri:
Inseram un tag validator in tag-ul componenta si referim custom validatorul din el
Inseram un tag validator custom in tagul componenta
Pentru a utiliza o componenta custom adaugam tag-ul asociat componentei la paginia.
Fisierele TL sunt stocate in directorul WEB-INF, in subdirectorul fisierului !"R, in
directorul META-INF sau intr-un subdirector a unei bibiloteci de tag-uri impac#etate in fisierul
$"R.
Legarea unui component value de o proprietate
%e face specificand numele bean-ului si al proprietatii folosind atributul value. "ceasta
inseamna ca numele beanului din &L trebuie sa se potriveasca elementului managed-bean-
name al declaratiei managed beanului, din prima parte a e'presiei (pina la punct). *ea de-a
doua parte a e'presiei trebuie sa coincida cu elementul property-name corespunzator, din
fisierul de configuratie al aplicatiei.
"tributul value poate fi legat si de un obiect implicit, spre e'emplu obiectul e sesiune
(sessionScope). +biectele implicite la care poate referi atributul sunt prezentate in tabelul
urmator. Toate obiectele, e'ceptandu-le pe cele scope sunt read-onl, si de aceea nu pot fi
utilizate de componente UIInput.
Legarea unei instante a componentei de o proprietate a beanului
%e face prin atributul binding. "cest mod de legare este recomandat atunci cand beanul
trebuie sa sc#imbe dinamic atributului componetei.
Facelet-uri Componente compuse
Termenul de facelet se refera la un limba- de vie. folosit de catre $%F. In versiunile anterioare
$%F (inainte de /.0) $%P era folosit pentru prezentare, dar acesta nu suporta toate facilitatile
din $%F /.0.
Facelet utilizeaza stilul de lucru al template-urilor 1T2L. Facilitatile facelet include:
Utilizeaza 31T2L pentru a crea pagini .eb
%uport pentru librariile de tag-uri facelet alaturi de taguri faces si $%TL
%uport pentru &L
Folosirea sabloanelor (template-urilor) pentru componente si pagini
"vanta-ele folosirii facelet-urilor:
Reutilizarea codului prin folosirea template-urilor si a componentelor compuse
(composite components)
&'tensibilitatea componentelor prin customizare
Timp de compilare redus
4alidarea &L la compilare
Renderizare de inalta performanta
Fisierele facelet au e'tensia .!tml si folosesc 32L namespace declarations. Tag-urile
suportate de facelet sunt date in tabelul de mai -os.
"plicatiile $/&& sufereau de e'cesive configurari 32L. $/&& 5 a redus considerabil aceste
configurari. In $/&& 6 reducerea s-a facut si mai mult facand fisierul de configurare "aces-
con"ig.ml optional.
2anaged bean-urile pot fi configurate prin anotatia #ManagedBean, fara a mai folosi "aces-
con"ig.ml. e asemenea, pentru navigare e'ista o conventie: daca valoarea atributului
action a unui command lin7 sau command button este numele unui facelet (mai putin
e'tensia), atunci, prin conventie, aplicatia va naviga catre acea pagina.
$%F / introduce o localizare standard a resurselor. Resursele reprezinta artifact-e pe care o
pagina sau o componenta $%F le foloseste pentru a fi redate corect. %pre e'emplu: fisiere *%%,
fisiere $ava%cript sau imagini. In $%F / resursele pot fi plasate intr-un subdirector numit
resources fie la radacina fisierului !"R, fie sub 2&T"-I8F. Prin conventie, componentele
$%F stiu ca trebuie sa-si ia resursele din una dintre aceste locatii. 2ai mult, pentru a organiza
resursele directorul resources va fi impartit in subdirectoare. Un subdirector va fi referit in
atributul library al componentei $%F. %pre e'emplu, vom plasa fisierul de stiluri style.css
in resources$css$. In pagina $%F putem obtine fisierul prin tagul:
%!&outputStyles!eet library()css) name()style.css)$*.
In mod asemanator cream subdirectoarele images sau scripts.
Una dintre facilitatile importante ale $%F / este furnizarea de instrumente pentru
implementarea unor interfete usor de e'tins si reutilizat. Template-urile ne permit sa creem
9baze: pentru alte pagini din aplicatie. Template-urile ne a-uta sa mentinem un loo7 and feel
standard intr-o aplicatie cu un numar mare de pagini.
Tagurile Facelet utilizate la template-uri sunt prezentate in tabelul urmator:
Tag-ul principal al bibliotecii Facelet este ui&insert. + pagina template ce a fost creata cu
acest tag ne permite sa definim o structura predefinita pentru o pagina si este folosita ca
sablon pentru alte pagini, denumite frecvent pagini client.
Fie urmatorul e'emplu:
%+,-.T/0E !tml 0UB1I. )-$$W2.$$,T, 34TM1 5.6 Transitional$$EN)
)!ttp&$$777.72.org$T8$!tml5$,T,$!tml5-transitional.dtd)*
%!tml mlns("http://www.w3.org/1999/xhtml"
mlns&ui("http://java.sun.com/jsf/facelets"*
%!ead*
%title*
%ui&insert name("title"*
titlu
%$ui&insert*
%$title*
%$!ead*
%body*
%div id("header"*
%ui&insert name("header"*
%ui&include src("header.xhtml"$*
%$ui&insert*
%$div*
%div id("content"*
%ui&insert name("content"*
%$ui&insert*
%$div*
%div id("footer"*
%ui&insert name("footer"*
%ui&include src("footer.xhtml"$*
%$ui&insert*
%$div*
%$body*
%$!tml*
Fisierul precedent, basicTemplate.!tml este salvat in directorul WEB-INF$template.
Pagina este impartita in trei sectiuni: #eader, content si footer ce formeaza o structura ce poate
fi reutilizata de alte pagini ale aplicatiei. Fisierele !eader.!tml si "ooter.!tml sunt
situate in acelasi director:
%9ml version("1.0" encoding("IS!""#9!1" 9*
%+,-.T/0E !tml 0UB1I. )-$$W2.$$,T, 34TM1 5.6 Transitional$$EN)
)!ttp&$$777.72.org$T8$!tml5$,T,$!tml5-transitional.dtd)*
%!tml mlns("http://www.w3.org/1999/xhtml"*
%body*
%div style("width:100$%font!si&e:3'px%line!
height:("px%)ac*ground!color:nav+%color:white"*
primul !eader
%$div*
%$body*
%$!tml*
Respectiv:
%9ml version("1.0" encoding("IS!""#9!1" 9*
%+,-.T/0E !tml 0UB1I. )-$$W2.$$,T, 34TM1 5.6 Transitional$$EN)
)!ttp&$$777.72.org$T8$!tml5$,T,$!tml5-transitional.dtd)*
%!tml mlns("http://www.w3.org/1999/xhtml"*
%body*
%div style(")ac*ground!color:nav+%width:100$%color:white"*
%br $*
%$div*
%$body*
%$!tml*
Pagina client invoca template-ul prin tag-ul ui&composition. In e'emplul nostru vom crea o
pagina, login.!tml, ce foloseste template-ul anterior creat:
%+,-.T/0E !tml 0UB1I. )-$$W2.$$,T, 34TM1 5.6 Transitional$$EN)
)!ttp&$$777.72.org$T8$!tml5$,T,$!tml5-transitional.dtd)*
%!tml mlns("http://www.w3.org/1999/xhtml"
mlns&ui("http://java.sun.com/jsf/facelets"
mlns&!("http://java.sun.com/jsf/html"
mlns&"("http://java.sun.com/jsf/core"*
%ui&composition template("/,-.!I/0/template/)asic1emplate.xhtml"*
%ui&de"ine name("content"*
%!&"orm*
%!&grap!icImage library("images" name("du*e.gif"*%$!&grap!icImage*
%!:*
4ei; sunt ,u<e+ Ma gandesc la un numar intre =>userNumberBean.minimum?
si =>userNumberBean.maimum?. 0oti sa-l g!icesti9
%$!:*
%!&inputTet id("user/o" value("23user/um)er.ean.user/um)er4"*
%"&validate1ong8ange minimum("23user/um)er.ean.minimum4"
maimum("23user/um)er.ean.maximum4"$*
%$!&inputTet*
%!&commandButton id("su)mit" value("1rimite" action("response.xhtml"$*
%!&message s!o7Summary("true" s!o7,etail("false" style("color: red%
font!famil+: 6/ew 7entur+ School)oo*68 serif% font!st+le: o)li9ue% text!
decoration: overline" id("errors1" "or("user/o"$*
%$!&"orm*
%$ui&de"ine*
%$ui&composition*
%$!tml*
;eanul ce controleaza aplicatia este:
pac<age beans@
import Aava.util.8andom@
import Aava."aces.bean.ManagedBean@
import Aava."aces.bean.SessionScoped@
#ManagedBean
#SessionScoped
public class UserNumberBean >
Integer randomInt ( null@
Integer userNumber ( null@
String response ( null@
private long maimum(56@
private long minimum(6@
public UserNumberBeanBC >
8andom randomD8 ( ne7 8andomBC@
randomInt ( ne7 IntegerBrandomD8.netIntB56CC@
System.out.printlnB)Numarul lui ,u<e este& ) E randomIntC@
?
public void setUserNumberBInteger userFnumberC >
userNumber ( userFnumber@
?
public Integer getUserNumberBC >
return userNumber@
?
public String get8esponseBC >
i" BBuserNumber +( nullC GG BuserNumber.compareToBrandomIntC (( 6CC >
return )Asta-i+)@
?
i" BuserNumber (( nullC >
return null@
? else >
return )ScuHe; ) E userNumber E ) este incorect+)@
?
?
public long getMaimumBC >
return Bt!is.maimumC@
?
public void setMaimumBlong maimumC >
t!is.maimum ( maimum@
?
public long getMinimumBC >
return Bt!is.minimumC@
?
public void setMinimumBlong minimumC >
t!is.minimum ( minimum@
?
?
$%F / ofera conceptul de componenta compusa. + componenta compusa este un tip special de
template ce actioneaza ca o componenta. + componenta compusa consta dintr-o colectie de
taguri. *omponenta aceasta, creata de utilizator si reutilizabila are o functionalitate definita si
poate contine validatori, convertori sau listeneri atasate.
Folosind facilitatile de identificare a resurselor componentele compuse pot fi stocate in
biblioteci disponibile aplicatiei. *ateva dintre cele mai utilizate taguri pentru gestionarea
componentelor compuse sunt date intr-un tabel mai -os.
In e'emplul urmator prezentam o componenta compusa:
%+,-.T/0E !tml 0UB1I. )-$$W2.$$,T, 34TM1 5.6 Transitional$$EN)
)!ttp&$$777.72.org$T8$!tml5$,T,$!tml5-transitional.dtd)*
%!tml mlns("http://www.w3.org/1999/xhtml"
mlns&composite("http://java.sun.com/jsf/composite"
mlns&!("http://java.sun.com/jsf/html"*
%!&!ead*
%title*T!is content 7ill not be displayed%$title*
%$!&!ead*
%!&body*
%composite&inter"ace*
%composite&attribute name("name:rompt" de"ault("username"$*
%composite&attribute name("password:rompt" de"ault("password"$*
%composite&attribute name("login.utton1ext" de"ault("login"$*
%composite&attribute name("login;ction" met!od-
signature("java.lang.String action<="$*
%$composite&inter"ace*
%composite&implementation*
%!&"orm id("form"*
%!&messages style("color: red%"*%$!&messages*
%!&panelDrid columns(">"*
=>cc.attrs.name0rompt?
%!&inputTet id("name" value("23cc.attrs.m+login.name4"
reIuired("true"$*
=>cc.attrs.pass7ord0rompt?
%!&inputSecret id("password" value("23cc.attrs.m+login.password4"
reIuired("true"$*
%$!&panelDrid*
%p*
%!&commandButton id("login.utton" value("23cc.attrs.login.utton1ext4"
action("23cc.attrs.login;ction4"$*
%$p*
%$!&"orm*
%$composite&implementation*
%$!&body*
%$!tml*
In aplicatie avem mai multe valori date de &L sub forma =>cc.attrs.numeAtribut?. cc in
$%F este un cuvant rezervat pentru componente compuse. &'presia anterioara este utilizata
pentru a accesa atributele definite de interfata componentei compuse. In cazul general al
discutie atributul accesat este numeAtribut. Fisierul anterior, email.!tml, este salvat in
directorul resources$emcomp. irectorul este considerat o biblioteca a $%F si o componenta
poate fi accesta dintr-o astfel de biblioteca.
Pagina .eb ce utilizeaza aceasta aceasta componenta este numita using page. Pagina trebuie
sa includa o referinta la componenta compusa in spatiul declaratiilor de nume 'ml,
mlns&eH("http://java.sun.com/jsf/composite/emcomp/. *omponenta in sine este
accesata prin tagul eH&email.
%+,-.T/0E !tml 0UB1I. )-$$W2.$$,T, 34TM1 5.6 Transitional$$EN)
)!ttp&$$777.72.org$T8$!tml5$,T,$!tml5-transitional.dtd)*
%!tml mlns("http://www.w3.org/1999/xhtml"
mlns&!("http://java.sun.com/jsf/html"
mlns&eH("http://java.sun.com/jsf/composite/emcomp/"*
%!&!ead*
%title*.omponenta compusa%$title*
%$!&!ead*
%body*
%div id("compositecomponent"*
%eH&email mylogin("23m+login.ean4" loginAction("23m+login.ean.login4"*
%$eH&email*
%$div*
%$body*
%$!tml*
Atributele unei componente compuse
Putem defini un atribut al unei componente compuse prin utilizarea tag-ului
composite&attribute. "tributele cele mai utilizate ale acestui tag sunt:
Invocarea unui bacing bean
Pentru a permite unei componente sa manipuleze date stocate pe server putem invoca un
bac7ing bean prin una dintre urmatoarele modalitati:
Trimitem referinta managed beanului componentei compuse
Folosim direct proprietatile managed beanului
$%F furnizeaza urmatoarele tag-uri pentru validarea valorilor componentelor de intrare. "ceste
taguri pot fi folosite cu tagurile composite&Jalue4older sau
composite&EditableJalue4older. Urmatoarele taguri de validare sunt frecvent folosite:
In cazul e'emplului managed beanul este:
pac<age beans@
import Aava."aces.bean.ManagedBean@
import Aava."aces.bean.8eIuestScoped@
#ManagedBean
#8eIuestScoped
public class MyloginBean >
private String name@
private String pass7ord@
public MyloginBeanBC >
t!is.name ( ))@
t!is.pass7ord ( ))@
?
public MyloginBeanBString name; String pass7ordC >
t!is.name ( name@
t!is.pass7ord ( pass7ord@
?
public String get0ass7ordBC > return pass7ord@ ?
public void set0ass7ordBString ne7JalueC > pass7ord ( ne7Jalue@ ?
public String getNameBC > return name@ ?
public void setNameBString ne7JalueC > name ( ne7Jalue@ ?
public String loginBC >
String msg ( )Numele de utiliHator& ) E getNameBC E ) parola& )
E get0ass7ordBC@
System.out.printlnB)MesaA& )EmsgC@
return msg@
?
?
*omponenta compusa creata in e'emplu accepta un username si o parola. *omponenta
interactioneaza cu un managed bean, care stoc#eaza cele doua valori si trimite datele de la
bean, afisandu-le in pagina 1ogin. 8oi, in e'emplu, nu am afisat pagina, dar am trimis in
server.log mesa-ele preluate de pe using page.
*omponenta compusa este stocata intr-un fisier '#tml. "re o sectiune composite:interface ce
declara etic#ete username, parola si un buton de logare. e asemenea, declara un managed
bean ale carui proprietati au fost folosite pentru interactiunea cu campurile username si
parola.

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

  • 43 Lectie Demo Creatie Vestimentara
    43 Lectie Demo Creatie Vestimentara
    Document21 pagini
    43 Lectie Demo Creatie Vestimentara
    Luccyan
    91% (11)
  • Despre Java
    Despre Java
    Document1 pagină
    Despre Java
    Claudia Stefania
    Încă nu există evaluări
  • Manipularea Evenimentelor
    Manipularea Evenimentelor
    Document7 pagini
    Manipularea Evenimentelor
    Claudia Stefania
    Încă nu există evaluări
  • Pantalonul
    Pantalonul
    Document10 pagini
    Pantalonul
    Geta Dana
    Încă nu există evaluări
  • Ciet Aiet Caiet
    Ciet Aiet Caiet
    Document1 pagină
    Ciet Aiet Caiet
    Claudia Stefania
    Încă nu există evaluări
  • Curs 6
    Curs 6
    Document8 pagini
    Curs 6
    Claudia Stefania
    Încă nu există evaluări
  • Curs 5
    Curs 5
    Document11 pagini
    Curs 5
    Claudia Stefania
    Încă nu există evaluări
  • Manipularea Evenimentelor
    Manipularea Evenimentelor
    Document7 pagini
    Manipularea Evenimentelor
    Claudia Stefania
    Încă nu există evaluări
  • Cal 4
    Cal 4
    Document10 pagini
    Cal 4
    Claudia Stefania
    Încă nu există evaluări
  • Curs 6
    Curs 6
    Document8 pagini
    Curs 6
    Claudia Stefania
    Încă nu există evaluări
  • Data Tables
    Data Tables
    Document5 pagini
    Data Tables
    Claudia Stefania
    Încă nu există evaluări
  • Tema 1
    Tema 1
    Document1 pagină
    Tema 1
    Claudia Stefania
    Încă nu există evaluări
  • Exemplu de Componenta Custom
    Exemplu de Componenta Custom
    Document3 pagini
    Exemplu de Componenta Custom
    Claudia Stefania
    Încă nu există evaluări
  • Curs 6
    Curs 6
    Document8 pagini
    Curs 6
    Claudia Stefania
    Încă nu există evaluări
  • Lectia 4-2011 Java
    Lectia 4-2011 Java
    Document9 pagini
    Lectia 4-2011 Java
    Claudia Stefania
    Încă nu există evaluări
  • Cal 4
    Cal 4
    Document10 pagini
    Cal 4
    Claudia Stefania
    Încă nu există evaluări
  • Curs 4
    Curs 4
    Document6 pagini
    Curs 4
    Claudia Stefania
    Încă nu există evaluări
  • Ajax
    Ajax
    Document7 pagini
    Ajax
    Claudia Stefania
    Încă nu există evaluări
  • Cal 1
    Cal 1
    Document9 pagini
    Cal 1
    Claudia Stefania
    Încă nu există evaluări
  • Cal 2
    Cal 2
    Document8 pagini
    Cal 2
    Claudia Stefania
    Încă nu există evaluări
  • Lectia 4-2011
    Lectia 4-2011
    Document8 pagini
    Lectia 4-2011
    Claudia Stefania
    Încă nu există evaluări
  • Laborator 1
    Laborator 1
    Document3 pagini
    Laborator 1
    Claudia Stefania
    Încă nu există evaluări
  • Lectia 4-2011
    Lectia 4-2011
    Document8 pagini
    Lectia 4-2011
    Claudia Stefania
    Încă nu există evaluări
  • Cal 3
    Cal 3
    Document15 pagini
    Cal 3
    Claudia Stefania
    Încă nu există evaluări
  • Plan
    Plan
    Document1 pagină
    Plan
    Claudia Stefania
    Încă nu există evaluări
  • Plan
    Plan
    Document1 pagină
    Plan
    Claudia Stefania
    Încă nu există evaluări
  • Cartofi Frantuzesti 2
    Cartofi Frantuzesti 2
    Document1 pagină
    Cartofi Frantuzesti 2
    Claudia Stefania
    Încă nu există evaluări
  • Alegerea Sistemului de Gestiune Al Bazei de Date
    Alegerea Sistemului de Gestiune Al Bazei de Date
    Document17 pagini
    Alegerea Sistemului de Gestiune Al Bazei de Date
    Claudia Stefania
    Încă nu există evaluări
  • Meniul Dietei Daneze
    Meniul Dietei Daneze
    Document3 pagini
    Meniul Dietei Daneze
    Anomiss Simona
    Încă nu există evaluări