Úvod do JSF EL 2

1. Úvod

Expression Language (EL), je skriptovací jazyk, ktorý sa osvedčil v mnohých rámcoch Java, ako napríklad Spring with SpEL a JBoss with JBoss EL.

V tomto článku sa zameriame na implementáciu JSF tohto skriptovacieho jazyka - Unified EL.

EL je v súčasnosti vo verzii 3.0, čo je veľká aktualizácia, ktorá umožňuje používať procesor v samostatnom režime - napríklad na platforme Java SE. Predchádzajúce verzie boli závislé od aplikačného servera alebo webového kontajnera kompatibilného s Jakarta EE. Tento článok pojednáva o verzii EL 2.2.

2. Okamžité a odložené vyhodnotenie

Primárnou funkciou EL v JSF je prepojenie zobrazenia JSF (zvyčajne XHTML markup) a back-endu založeného na jave. Back-end môžu byť používateľom vytvorené spravované objekty typu bean alebo objekty spravované kontajnerom, napríklad relácia HTTP.

Pozrime sa na EL 2.2. EL v JSF má dve všeobecné formy, okamžitú syntax EL a odloženú syntax EL.

2.1. Okamžitá syntax EL

Inak známy ako JSP EL, ide o skriptovací formát, ktorý je pozostatkom z doby JSP vývoja webových aplikácií Java.

Výrazy JSP EL začínajú znakom dolára ($), potom nasleduje ľavá zložená zátvorka ({), potom nasleduje skutočný výraz a nakoniec sa uzavrie pravou zloženou zátvorkou (}):

$ {ELBean.value> 0}

Táto syntax:

  1. Hodnotí sa iba raz (na začiatku) v životnom cykle stránky. To znamená, že hodnota je. Čítanie pomocou výrazu v príklade vyššie musí byť nastavené pred načítaním stránky.
  2. Poskytuje prístup iba k hodnotám fazule.
  3. A ako výsledok, vyžaduje dodržiavanie konvencie pomenovania JavaBean.

Pre väčšinu použití nie je táto forma EL veľmi univerzálna.

2.2. Odložené vykonávanie EL

EL s odloženým vykonaním je EL určený pre správny JSF. Je to hlavný syntaktický rozdiel oproti JSP EL v tom, že je označený „#” namiesto „$“.

# {ELBean.value> 0}

Odložené EL:

  1. Je synchronizovaný s životným cyklom JSF. To znamená, že výraz EL v odloženom EL sa vyhodnotí v rôznych bodoch vykreslenia stránky JSF (na začiatku a na konci).
  2. Poskytuje prístup na čítanie a zápis na hodnoty fazule. Toto umožňuje nastaviť hodnotu v podpornom fonde JSF (alebo kdekoľvek inde) pomocou EL.
  3. Umožňuje programátorovi vyvolať ľubovoľné metódy na objekte a v závislosti od verzie EL odovzdá argumenty takýmto metódam.

Unified EL je špecifikácia, ktorá zjednocuje odložené EL aj JSP EL a umožňuje obidve syntaxe na tej istej stránke.

3. Zjednotené EL

Unified EL umožňuje dve všeobecné príchute výrazov, hodnotové výrazy a výrazy metód.

A krátka poznámka - v nasledujúcich častiach sa dozviete niekoľko príkladov, ktoré sú všetky dostupné v aplikácii (pozri odkaz Github na konci) po prechode na:

//localhost:8080/jsf/el_intro.jsf

3.1. Hodnotové výrazy

Výraz hodnoty nám umožňuje prečítať alebo nastaviť vlastnosť spravovanej fazule v závislosti od toho, kde je umiestnená.

Nasledujúci výraz načíta spravovanú fazuľovú vlastnosť na stránku:

Dobrý deň, # {ELBean.firstName}

Nasledujúci výraz nám však umožňuje nastaviť hodnotu na objekte používateľa:

Aby bola premenná vhodná pre tento druh liečby, musí zodpovedať konvencii pomenovania JavaBean. Aby mohla byť hodnota fazule potvrdená, je potrebné uložiť priložený formulár.

3.2. Výrazy metód

Unified EL poskytuje výrazy metód na vykonávanie verejných, nestatických metód zo stránky JSF. Metódy môžu, ale nemusia mať návratové hodnoty.

Tu je rýchly príklad:

The uložiť () uvedená metóda je definovaná na podpornej fazuli s názvom ELBean.

Počnúc EL 2.2 môžete tiež odovzdávať argumenty metóde, ku ktorej je pristupované pomocou EL. To nám umožňuje prepísať náš príklad takto:

To, čo sme tu urobili, je vytvorenie väzbového výrazu s rozsahom pre stránku pre inputText komponent a priamo odovzdať hodnotu atribút výrazu metódy.

Upozorňujeme, že premenná sa odovzdáva metóde bez zvláštneho zápisu, zložených zátvoriek alebo únikových znakov.

3.3. Implicitné objekty EL

Stroj JSF EL poskytuje prístup k niekoľkým objektom spravovaným kontajnerom. Niektoré z nich sú:

  • # {Application}: K dispozícii aj ako # {servletContext}, toto je objekt predstavujúci inštanciu webovej aplikácie
  • # {applicationScope}: mapa premenných prístupná pre celú webovú aplikáciu
  • # {Cookie}: mapa premenných súborov cookie HTTP
  • # {FacesContext}: súčasná inštancia FacesContext
  • # {flash}: objekt s obmedzením vo formáte JSF Flash
  • # {header}: mapa hlavičiek HTTP v aktuálnej požiadavke
  • # {initParam}: mapa premenných inicializácie kontextu webovej aplikácie
  • # {param}: mapa parametrov dotazu požiadavky HTTP
  • # {request}: the HTTPServletRequest objekt
  • # {requestScope}: mapa premenných s rozsahom podľa požiadaviek
  • # {sessionScope}: mapa premenných s rozsahom relácie
  • # {session}: the HTTPSession objekt
  • # {viewScope}: pohľad (stránka) na podrobnú mapu premenných

Nasledujúci jednoduchý príklad uvádza zoznam všetkých hlavičiek a hodnôt žiadosti po prístupe k hlavičky implicitný objekt:

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

4. Čo môžete robiť v EL

Vo svojej univerzálnosti môže byť EL uvedený v kóde Java, značení XHTML, Javascript a dokonca aj v konfiguračných súboroch JSF, ako napríklad Faces-config.xml spis. Pozrime sa na niektoré konkrétne prípady použitia.

4.1. Použite EL v značení stránky

EL možno uviesť v štandardných značkách HTML:

4.2. Použite EL v JavaScripte

EL sa bude interpretovať, keď sa vyskytne v Javascripti alebo značkách:

 var theVar = # {ELBean.firstName};

Premenná backean bean sa tu nastaví ako premenná javascript.

4.3. Vyhodnoťte logickú logiku v EL pomocou operátorov

EL podporuje pomerne pokročilých operátorov porovnávania:

  • ekv operátor rovnosti, ekvivalent „==.”
  • lt menej ako operátor, čo zodpovedá „<.“
  • le menšie alebo rovné operátorovi, čo zodpovedá „<=.“
  • gt väčší ako operátor, čo zodpovedá „>.“
  • ge väčší alebo rovný, ekvivalent „>=.

4.4. Vyhodnoťte EL v fazuli

V rámci kódu podpornej fazule je možné vyhodnotiť výraz EL pomocou aplikácie JSF. To otvára svet možností pri prepojení stránky JSF s podpornou fazuľou. Môžete načítať implicitné objekty EL alebo skutočné komponenty stránky HTML alebo ich hodnotu ľahko z podpornej fazule:

FacesContext ctx = FacesContext.getCurrentInstance (); Aplikácia app = ctx.getApplication (); Reťazec firstName = app.evaluateExpressionGet (ctx, "# {firstName.value}", String.class); HtmlInputText firstNameTextBox = app.evaluateExpressionGet (ctx, "# {firstName}", HtmlInputText.class);

To umožňuje vývojárom veľkú flexibilitu pri interakcii so stránkou JSF.

5. Čo nemôžete robiť v EL

EL <3.0 má určité obmedzenia. Nasledujúce časti pojednávajú o niektorých z nich.

5.1. Žiadne preťaženie

EL nepodporuje použitie preťaženia. Takže v fazuli s nasledujúcimi metódami:

public void save (Používateľ theUser); public void save (meno používateľa reťazca); public void save (Integer uid);

JSF EL nebude schopný správne vyhodnotiť nasledujúci výraz

JSF ELResolver introspektuje definíciu triedy fazuľaa vyberte prvý spôsob vrátený java.lang.Class # getMethods (metóda, ktorá vracia metódy dostupné v triede). Poradie vrátených metód nie je zaručené a nevyhnutne to bude mať za následok nedefinované správanie.

5.2. Žiadne výčty ani konštantné hodnoty

JSF EL <3.0, nepodporuje použitie konštantných hodnôt alebo výčtov v skripte. Máte teda niektorú z nasledujúcich možností

public static final String USER_ERROR_MESS = "Nie, nemôžete to urobiť"; enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

znamená, že nebudete môcť robiť nasledovné

5.3. Žiadne vstavané nulové zabezpečenie

JSF EL <v3.0 neposkytuje implicitný nulový bezpečný prístup, čo sa niektorým môže zdať na modernom skriptovacom stroji zvláštne.

Takže ak osoba v nižšie uvedenom výraze je hodnota null, celý výraz zlyhá s nevzhľadným NPE

Dobrý deň, pán, # {ELBean.person.surname} "

6. Záver

Preskúmali sme niektoré zo základných prvkov JSF EL, silné stránky a obmedzenia.

Toto je do značnej miery všestranný skriptovací jazyk s určitým priestorom na vylepšenie; je to tiež lepidlo, ktoré viaže pohľad JSF na model a radič JSF.

Zdrojový kód, ktorý je priložený k tomuto článku, je k dispozícii na GitHub.


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