Bevezetés a JSF EL 2-be

1. Bemutatkozás

Az Expression Language (EL) egy szkriptnyelv, amelyet sok Java-keretrendszerben alkalmaznak, például a Spring with SpEL és a JBoss a JBoss EL-szel.

Ebben a cikkben a JSF ezen szkriptnyelv - Unified EL - megvalósítására fogunk koncentrálni.

Az EL jelenleg a 3.0 verzióban van, ami egy jelentős frissítés, amely lehetővé teszi a feldolgozó motor önálló módban történő használatát - például a Java SE platformon. A korábbi verziók egy Jakarta EE-kompatibilis alkalmazásszervertől vagy webes tárolótól függtek. Ez a cikk az EL 2.2 verzióját tárgyalja.

2. Azonnali és halasztott értékelés

Az EL elsődleges feladata a JSF-ben a JSF nézet (általában XHTML jelölés) és a java-alapú háttér összekapcsolása. A háttér lehet a felhasználó által létrehozott kezelt bab vagy tároló által kezelt objektumok, például a HTTP munkamenet.

Megnézzük az EL 2.2-et. A JSF-ben az EL két általános formában jelenik meg, az azonnali szintaxis és a halasztott szintaxis.

2.1. Azonnali szintaxis EL

Más néven JSP EL, ez egy szkriptformátum, amely visszatartja a java webalkalmazások fejlesztésének JSP napjait.

A JSP EL kifejezések a dollárjellel kezdődnek ($), majd a bal göndör zárójel ({), majd a tényleges kifejezés követi, és végül a jobb göndör zárójelgel záródik (}):

$ {ELBean.value> 0}

Ez a szintaxis:

  1. Csak egyszer (az elején) értékelik az oldal életciklusában. Ez azt jelenti, hogy az az érték, ami van. A fenti példában szereplő kifejezés olvasása előtt be kell állítani az oldal betöltése előtt.
  2. Csak olvasható hozzáférést biztosít a babértékekhez.
  3. Ennek eredményeként megköveteli a JavaBean elnevezési megállapodás betartását.

A legtöbb alkalmazásban az EL ez a formája nem túl sokoldalú.

2.2. Halasztott végrehajtás EL

A halasztott végrehajtás EL a JSF számára tervezett EL. A JSP EL-hez képest jelentős szintaktikai különbség, hogy "#” a „helyett$“.

# {ELBean.value> 0}

Halasztott EL:

  1. Szinkronban van a JSF életciklusával. Ez azt jelenti, hogy a halasztott EL-ben lévő EL-kifejezést a JSF-oldal megjelenítésének különböző pontjain értékelik (az elején és a végén).
  2. Írási és írási hozzáférést biztosít a babértékekhez. Ez lehetővé teszi, hogy beállítson egy értéket egy JSF háttér-babban (vagy bárhol máshol) az EL használatával.
  3. Lehetővé teszi a programozó számára, hogy tetszőleges módszereket hívjon elő egy objektumon, és az EL verziójától függően argumentumokat adjon át az ilyen módszereknek.

Az Unified EL az a specifikáció, amely egyesíti a halasztott EL-t és a JSP EL-t, lehetővé téve mindkét szintaxist ugyanazon az oldalon.

3. Egységes EL

Az Unified EL lehetővé teszi a kifejezések, az értékkifejezések és a módszerkifejezések két általános ízét.

És egy rövid megjegyzés: a következő szakaszok néhány példát mutatnak be, amelyek mindegyike elérhető az alkalmazásban (lásd a Github linket a végén), navigálva a következő helyre:

//localhost:8080/jsf/el_intro.jsf

3.1. Értékkifejezések

Az értékkifejezés lehetővé teszi számunkra a kezelt babtulajdonságok elolvasását vagy beállítását, attól függően, hogy hol van.

A következő kifejezés egy kezelt babtulajdonságot olvas le az oldalon:

Helló, # {ELBean.firstName}

A következő kifejezés azonban lehetővé teszi számunkra, hogy beállítsunk egy értéket a felhasználói objektumon:

A változónak meg kell felelnie a JavaBean elnevezési konvenciónak, hogy jogosult legyen az ilyen kezelésre. A bab értékének elkötelezettségéhez a mellékelt űrlapot csak el kell menteni.

3.2. Módszer kifejezések

Az Unified EL módszeres kifejezéseket biztosít nyilvános, nem statikus módszerek végrehajtására a JSF oldalon belül. A módszereknek lehetnek visszatérő értékei, vagy nem.

Itt egy rövid példa:

A mentés() a hivatkozott metódust egy megnevezett háttérbabon határozzuk meg ELBean.

Az EL 2.2-től kezdődően argumentumokat adhat át az EL használatával elérhető módszerhez is. Ez lehetővé teheti számunkra, hogy a példánkat így írjuk át:

Amit itt tettünk, az az, hogy létrehoztunk egy oldalkötésű kötési kifejezést a inputText komponenst, és közvetlenül adja át a érték attribútum a módszer kifejezéshez.

Ne feledje, hogy a változót külön jelölés, göndör zárójel vagy menekülési karakter nélkül továbbítják a módszerhez.

3.3. Implicit EL objektumok

A JSF EL motor hozzáférést biztosít több konténer által kezelt objektumhoz. Néhány közülük:

  • #{Alkalmazás}: Ezenkívül elérhető # {servletContext}, ez az objektum reprezentálja a webalkalmazás-példányt
  • # {applicationScope}: az egész weben elérhető webes változók térképe
  • #{Aprósütemény}: a HTTP Cookie változók térképe
  • # {facesContext}: a jelenlegi példánya FacesContext
  • #{vaku}: a JSF Flash hatóköre
  • #{fejléc}: az aktuális kérésben szereplő HTTP-fejlécek térképe
  • # {initParam}: a webalkalmazás kontextus inicializálási változóinak térképe
  • # {param}: a HTTP kérés lekérdezési paramétereinek térképe
  • #{kérés}: a HTTPServletRequest tárgy
  • # {requestScope}: a változók kérés hatókörű térképe
  • # {sessionScope}: a változók munkamenetre kiterjedő térképe
  • #{ülés}: a HTTPS session tárgy
  • # {viewScope}: a változók nézet (oldal) hatóköre

Az alábbi egyszerű példa felsorolja az összes kérés fejlécét és értékét a fejlécek implicit tárgy:

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

4. Mit tehet EL-ben

Sokoldalúságában az EL Java kódban, XHTML jelölésekben, Javascriptben és még JSF konfigurációs fájlokban is megjelenhet, mint például faces-config.xml fájl. Vizsgáljuk meg néhány konkrét felhasználási esetet.

4.1. Használja az EL elemet az Oldaljelölésben

Az EL szabványos HTML-címkékben jeleníthető meg:

4.2. Használja az EL-t a JavaScript-ben

Az EL értelmezésre kerül, ha Javascriptben vagy címkékben találkoznak vele:

 var theVar = # {ELBean.firstName};

Itt egy háttérbab változót állítunk be javascript változóvá.

4.3. Értékelje a logikai logikát az EL-ben az operátorok használatával

Az EL meglehetősen fejlett összehasonlító operátorokat támogat:

  • egyenértékű egyenlőség operátor, egyenértékű==.”
  • lt kevesebb, mint operátor, egyenértékű a „<” értékkel.
  • le kisebb vagy egyenlő a kezelővel, egyenértékű a „<=” értékkel.
  • gt nagyobb, mint a kezelő, egyenértékű a „>” értékkel.
  • ge nagyobb vagy egyenlő, egyenértékű>=.

4.4. Értékelje az EL-t egy háttérbabban

A támogató komponens kódból ki lehet értékelni egy EL kifejezést a JSF alkalmazás segítségével. Ez megnyitja a lehetőségek világát, összekapcsolva a JSF oldalt a háttérbabbal. Kihívhatja az implicit EL-objektumokat, vagy könnyen visszakeresheti a HTML oldal tényleges összetevőit vagy azok értékét a háttérbabból:

FacesContext ctx = FacesContext.getCurrentInstance (); Alkalmazásalkalmazás = ctx.getApplication (); String firstName = app.evaluateExpressionGet (ctx, "# {firstName.value}", String.class); HtmlInputText firstNameTextBox = app.evaluateExpressionGet (ctx, "# {firstName}", HtmlInputText.class);

Ez nagy rugalmasságot biztosít a fejlesztő számára a JSF-oldalakkal való interakcióban.

5. Amit nem tehet meg EL-ben

Az EL <3.0-nak vannak bizonyos korlátai. A következő szakaszok néhányat tárgyalnak.

5.1. Nincs túlterhelés

Az EL nem támogatja a túlterhelés alkalmazását. Tehát egy háttérbabban a következő módszerekkel:

public void save (Felhasználó a felhasználó); public void save (String felhasználónév); public void save (Integer uid);

A JSF EL nem fogja tudni megfelelően értékelni a következő kifejezést

A JSF ELResolver be fogja vizsgálni az osztály definícióját bab, és válassza ki az első által visszaadott módszert java.lang.Class # getMethods (olyan módszer, amely az osztályban elérhető módszereket adja vissza). A visszaküldött módszerek sorrendje nem garantált, és ez elkerülhetetlenül meghatározatlan viselkedést eredményez.

5.2. Nincsenek számlák vagy állandó értékek

A JSF EL <3.0, nem támogatja az állandó értékek vagy az Enums használatát a szkriptben. Tehát, ha rendelkezik az alábbiak bármelyikével

public static final String USER_ERROR_MESS = "Nem, ezt nem lehet megtenni"; enum napok {szombat, vasárnap, hétfõ, kedd, szerda, csütörtök, péntek};

azt jelenti, hogy nem lesz képes a következőkre

5.3. Nincs beépített semmiféle biztonság

A JSF EL <v3.0 nem nyújt implicit null biztonságos hozzáférést, amelyet egyesek furcsának találhatnak egy modern parancsfájlmotorral kapcsolatban.

Tehát, ha személy az alábbi kifejezés null, az egész kifejezés sikertelen egy csúnya NPE esetén

Helló úr, # {ELBean.person.surname} "

6. Következtetés

Megvizsgáltuk a JSF EL néhány alapját, erősségeit és korlátait.

Ez nagyrészt sokoldalú szkriptnyelv, némi fejlesztési lehetőséggel; ez a ragasztó is megköti a JSF nézetet a JSF modellhez és a vezérlőhöz.

A cikkhez tartozó forráskód elérhető a GitHub oldalon.