Uvod u JSF EL 2

1. Uvod

Expression Language (EL) je skriptni jezik koji je usvojen u mnogim Java okvirima, kao što su Spring s SpEL i JBoss s JBoss EL.

U ovom ćemo se članku usredotočiti na JSF-ovu implementaciju ovog skriptnog jezika - Unified EL.

Trenutno je EL u verziji 3.0, velikoj nadogradnji koja omogućuje da se mehanizam za obradu koristi u samostalnom načinu rada - na primjer, na platformi Java SE. Prethodne verzije ovisile su o poslužitelju aplikacija ili web-spremniku koji je u skladu s EE Jakarte. Ovaj članak govori o EL verziji 2.2.

2. Neposredna i odgođena procjena

Primarna funkcija EL-a u JSF-u je povezivanje JSF pogleda (obično XHTML oznake) i pozadinskog okruženja zasnovanog na javi. Pozadinom se mogu upravljati grahom koje upravlja korisnik ili objektima kojima se upravlja kontejnerom poput HTTP sesije.

Pogledat ćemo EL 2.2. EL u JSF-u dolazi u dva opća oblika, neposrednoj sintaksi EL i odgođenoj sintaksi EL.

2.1. Neposredna sintaksa EL

Inače poznat kao JSP EL, ovo je format skriptiranja koji predstavlja zaostatak iz JSP dana razvoja web aplikacija Java.

Izrazi JSP EL počinju znakom dolara ($), a zatim slijedi lijeva kovrčava zagrada ({), zatim slijedi stvarni izraz i na kraju se zatvara desnom kovrčavom zagradom (}):

$ {ELBean.value> 0}

Ova sintaksa:

  1. Procjenjuje se samo jednom (na početku) u životnom ciklusu stranice. To znači da je vrijednost koja jest. Čitanje izraza iz gornjeg primjera mora se postaviti prije učitavanja stranice.
  2. Omogućuje pristup samo za čitanje vrijednostima graha.
  3. Kao rezultat toga, potrebno je poštivanje JavaBean konvencije imenovanja.

Za većinu namjena ovaj oblik EL nije svestran.

2.2. Odgođeno izvršenje EL

Odgođeno izvršenje EL je EL dizajniran za odgovarajući JSF. Glavna sintaktička razlika s JSP EL je ta što je označen s "#” umjesto "$“.

# {ELBean.value> 0}

Odgođeni EL:

  1. Sinkronizira se s životnim ciklusom JSF-a. To znači da se EL izraz u odgođenom EL procjenjuje u različitim točkama prikazivanja JSF stranice (na početku i na kraju).
  2. Omogućuje pristup čitanju i pisanju vrijednosti graha. To omogućuje postavljanje vrijednosti u JSF back-beanu (ili bilo gdje drugdje) pomoću EL.
  3. Omogućuje programeru da pozove proizvoljne metode na objektu i, ovisno o verziji EL, prosljeđuje argumente takvim metodama.

Objedinjeni EL je specifikacija koja objedinjuje odgođeni EL i JSP EL, omogućujući obje sintakse na istoj stranici.

3. Objedinjeni EL

Objedinjeni EL omogućuje dva opća okusa izraza, vrijednosnih izraza i izraza metoda.

I kratka napomena - u sljedećim odjeljcima prikazat će se neki primjeri koji su svi dostupni u aplikaciji (pogledajte vezu Github na kraju) pomicanjem do:

//localhost:8080/jsf/el_intro.jsf

3.1. Izrazi vrijednosti

Izraz vrijednosti omogućuje nam čitanje ili postavljanje svojstva upravljanog graha, ovisno o tome gdje je postavljeno.

Sljedeći izraz čita svojstvo upravljanog graha na stranici:

Pozdrav, # {ELBean.firstName}

Sljedeći izraz, međutim, omogućuje nam postavljanje vrijednosti na korisničkom objektu:

Varijabla mora slijediti JavaBean konvenciju imenovanja da bi ispunjavala uvjete za ovu vrstu tretmana. Da bi se vrijednost graha predala, potrebno je spremiti obrazac koji prilaže.

3.2. Izrazi metoda

Objedinjeni EL pruža izraze metoda za izvršavanje javnih, nestatičkih metoda unutar JSF stranice. Metode mogu ili ne moraju imati povratne vrijednosti.

Evo kratkog primjera:

The uštedjeti() metoda na koju se referira definirana je na pratećem grahu s imenom ELBean.

Počevši od EL 2.2, argumente možete prosljeđivati ​​i metodi kojoj se pristupa pomoću EL. To nam može dopustiti da svoj primjer prepišemo na sljedeći način:

Ono što smo ovdje napravili je stvoriti izraz za povezivanje u opsegu stranice za inputText komponentu i izravno prosljeđuju vrijednost atribut izrazu metode.

Imajte na umu da se varijabla prenosi metodi bez ikakvih posebnih zapisa, kovrčavih zagrada ili izlaznih znakova.

3.3. Implicitni EL objekti

JSF EL mehanizam omogućuje pristup nekoliko objekata kojima se upravlja kontejnerima. Neki od njih su:

  • # {Aplikacija}: Dostupno i kao # {servletContext}, ovo je objekt koji predstavlja instancu web aplikacije
  • # {applicationScope}: karta varijabli dostupna web aplikaciji
  • #{Kolačić}: karta varijabli HTTP kolačića
  • # {facesContext}: trenutna instanca FacesContext
  • #{bljesak}: JSF Flash opsežni objekt
  • #{Zaglavlje}: karta HTTP zaglavlja u trenutnom zahtjevu
  • # {initParam}: karta varijabli inicijalizacije konteksta web aplikacije
  • # {param}: karta parametara upita HTTP zahtjeva
  • #{zahtjev}: the HTTPServletRequest objekt
  • # {requestScope}: mapa varijabli s opsegom zahtjeva
  • # {sessionScope}: mapa varijabli s opsegom sesije
  • #{sjednica}: the HTTPS sesija objekt
  • # {viewScope}: karta varijabli s prikazom (stranica)

Sljedeći jednostavni primjer navodi sva zaglavlja i vrijednosti zahtjeva pristupanjem zaglavlja implicitni objekt:

# {header.key}# {header.value}

4. Što možete učiniti u EL-u

U svojoj svestranosti, EL se može naći u Java kodu, XHTML oznakama, Javascriptu, pa čak i u JSF konfiguracijskim datotekama poput lica-config.xml datoteka. Ispitajmo neke konkretne slučajeve upotrebe.

4.1. Koristite EL u označavanju stranice

EL se može naći u standardnim HTML oznakama:

4.2. Koristite EL u JavaScript-u

EL će se tumačiti kada se naiđe u Javascriptu ili oznakama:

 var theVar = # {ELBean.firstName};

Ovdje će se kao javascript varijabla postaviti sigurnosna varijabla bean-a.

4.3. Procijenite logičku logiku u EL pomoću operatora

EL podržava prilično napredne operatore usporedbe:

  • ekv operator jednakosti, ekvivalentan "==.”
  • lt manje od operatora, što odgovara "<."
  • le manje ili jednako operatoru, ekvivalentno "<=."
  • gt veći od operatora, ekvivalentno ">."
  • ge veće ili jednako, ekvivalentno ">=.

4.4. Procijenite EL u rezervnom zrnu

Unutar sigurnosnog koda graha može se procijeniti EL izraz pomoću JSF aplikacije. Ovo otvara svijet mogućnosti povezivanja JSF stranice s pozadinskim grahom. Možete dohvatiti implicitne EL objekte ili jednostavno dohvatiti stvarne komponente HTML stranice ili njihovu vrijednost iz pomoćnog graha:

FacesContext ctx = FacesContext.getCurrentInstance (); Aplikacija aplikacija = ctx.getApplication (); Niz firstName = app.evaluateExpressionGet (ctx, "# {firstName.value}", String.class); HtmlInputText firstNameTextBox = app.evaluateExpressionGet (ctx, "# {firstName}", HtmlInputText.class);

To programeru omogućuje veliku fleksibilnost u interakciji sa JSF stranicom.

5. Što ne možete u EL

EL <3.0 ima neka ograničenja. Sljedeći odjeljci raspravljaju o nekima od njih.

5.1. Nema preopterećenja

EL ne podržava upotrebu preopterećenja. Dakle, u pratećem grahu sa sljedećim metodama:

spremanje javne praznine (KorisnikKorisnik); spremanje javne praznine (korisničko ime niza); spremanje javne praznine (Integer uid);

JSF EL neće moći pravilno procijeniti sljedeći izraz

JSF ELRješavač proučit će definiciju klase grahi odaberite prvu metodu koju je vratio java.lang.Class # getMethods (metoda koja vraća metode dostupne u klasi). Redoslijed vraćenih metoda nije zajamčen i to će neizbježno rezultirati nedefiniranim ponašanjem.

5.2. Nema nabrajanja ili stalnih vrijednosti

JSF EL <3.0, ne podržava upotrebu konstantnih vrijednosti ili Enumsa u skripti. Dakle, imati bilo što od sljedećeg

public static final String USER_ERROR_MESS = "Ne, ne možete to učiniti"; enum Dani {Sub, Ned, Ponedjeljak, Utorak, Srijeda, Četvrtak, Pet};

znači da nećete moći učiniti sljedeće

5.3. Nema ugrađene nulske sigurnosti

JSF EL <v3.0 ne pruža implicitno null siguran pristup, što bi nekima moglo biti čudno u vezi s modernim skriptnim mehanizmom.

Pa ako osoba u donjem je izrazu null, cijeli izraz ne uspijeva s neuglednim NPE

Pozdrav gospodine, # {ELBean.person.surname} "

6. Zaključak

Ispitali smo neke od osnova JSF EL, snage i ograničenja.

Ovo je uglavnom svestrani skriptni jezik s određenim prostorom za poboljšanje; to je također ljepilo koje veže JSF pogled, za JSF model i kontroler.

Izvorni kod koji prati ovaj članak dostupan je na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found