Introduktion til JSF EL 2

1. Introduktion

Expression Language (EL) er et script-sprog, der ses vedtagelse inden for mange Java-rammer, såsom Spring med SpEL og JBoss med JBoss EL.

I denne artikel vil vi fokusere på JSF's implementering af dette scriptingsprog - Unified EL.

EL er i øjeblikket i version 3.0, en større opgradering, der gør det muligt at bruge processormotoren i standalone-tilstand - for eksempel på Java SE-platformen. Tidligere versioner var afhængige af en Jakarta EE-kompatibel applikationsserver eller webcontainer. Denne artikel diskuterer EL version 2.2.

2. Umiddelbar og udsat evaluering

ELs primære funktion i JSF er at forbinde JSF-visningen (normalt XHTML-markering) og den java-baserede back-end. Back-enden kan være brugeroprettede administrerede bønner eller containerstyrede objekter som HTTP-sessionen.

Vi vil se på EL 2.2. EL i JSF findes i to generelle former, øjeblikkelig syntaks EL og udskudt syntaks EL.

2.1. Umiddelbar syntaks EL

Ellers kendt som JSP EL, er dette et scriptformat, der er tilbageholdende fra JSP-dage med Java-webapplikationsudvikling.

JSP EL-udtrykkene starter med dollartegnet ($), efterfulgt af venstre krøllede parentes ({), derefter efterfulgt af det aktuelle udtryk og til sidst lukket med den højre krøllede parentes (}):

$ {ELBean.value> 0}

Denne syntaks:

  1. Evalueres kun en gang (i starten) i en sides livscyklus. Hvad dette betyder er, at den værdi, der er. At blive læst af udtrykket i eksemplet ovenfor skal indstilles, før siden indlæses.
  2. Giver skrivebeskyttet adgang til bønneværdier.
  3. Og som et resultat kræver overholdelse af JavaBean navngivningskonventionen.

Til de fleste anvendelser er denne form for EL ikke særlig alsidig.

2.2. Udskudt udførelse EL

Udskudt udførelse EL er EL designet til korrekt JSF. Det er den største syntaktiske forskel med JSP EL, at den er markeret med en "#” i stedet for en “$“.

# {ELBean.value> 0}

Udskudt EL:

  1. Er synkroniseret med JSF-livscyklussen. Dette betyder, at et EL-udtryk i udskudt EL vurderes på forskellige punkter i gengivelsen af ​​en JSF-side (i begyndelsen og slutningen).
  2. Giver læse- og skriveadgang til bønneværdier. Dette giver en mulighed for at indstille en værdi i en JSF-bagbønne (eller andre steder) ved hjælp af EL.
  3. Tillader en programmør at påberåbe sig vilkårlige metoder på et objekt og, afhængigt af versionen af ​​EL, videregive argumenter til sådanne metoder.

Unified EL er specifikationen, der forener både udskudt EL og JSP EL, hvilket tillader begge syntaks på samme side.

3. Unified EL

Unified EL tillader to generelle varianter af udtryk, værdiudtryk og metodeudtryk.

Og en hurtig note - de følgende sektioner viser nogle eksempler, som alle er tilgængelige i appen (se Github-linket i slutningen) ved at navigere til:

//localhost:8080/jsf/el_intro.jsf

3.1. Værdiudtryk

Et værdiudtryk giver os mulighed for enten at læse eller indstille en administreret bønneegenskab, afhængigt af hvor den er placeret.

Følgende udtryk læser en administreret bønneegenskab på siden:

Hej, # {ELBean.firstName}

Følgende udtryk tillader os dog at indstille en værdi på brugerobjektet:

Variablen skal følge JavaBean navngivningskonvention for at være berettiget til denne form for behandling. For at værdien af ​​bønnen skal begås, skal den vedlagte formular bare gemmes.

3.2. Metodeudtryk

Unified EL giver metodeudtryk til at udføre offentlige, ikke-statiske metoder fra en JSF-side. Metoderne har eller måske ikke returværdier.

Her er et hurtigt eksempel:

Det Gemme() den metode, der henvises til, er defineret på en navngivet bagbønne ELBean.

Fra EL 2.2 kan du også videregive argumenter til den metode, der er adgang til ved hjælp af EL. Dette kan give os mulighed for at omskrive vores eksempel således:

Det, vi har gjort her, er at oprette et bindingsudtryk, der er sideomfanget inputText komponent og passere direkte værdi attribut til metodeudtrykket.

Bemærk, at variablen sendes til metoden uden nogen speciel notation, krøllede seler eller flugttegn.

3.3. Implicitte EL-objekter

JSF EL-motoren giver adgang til flere containeradministrerede objekter. Nogle af dem er:

  • #{Ansøgning}: Fås også som # {servletContext}, dette er objektet, der repræsenterer webapplikationsforekomsten
  • # {applicationScope}: et kort over variabler, der er tilgængelige over hele webapplikationen
  • # {Cookie}: et kort over HTTP-cookievariablerne
  • # {ansigterContext}: den aktuelle forekomst af AnsigterKontekst
  • #{blitz}: JSF Flash-scoped-objektet
  • #{header}: et kort over HTTP-overskrifter i den aktuelle anmodning
  • # {initParam}: et kort over kontekstinitialiseringsvariablerne for webapplikationen
  • # {param}: et kort over HTTP-anmodningsparametre
  • #{anmodning}: det HTTPServletRequest objekt
  • # {requestScope}: et kort med variabler, der er anmodet om
  • # {sessionScope}: et session-scoped kort over variabler
  • #{session}: det HTTPSession objekt
  • # {viewScope}: et oversigtsoversigt (side-) over variabler

Følgende enkle eksempel viser alle anmodningsoverskrifter og værdier ved at få adgang til overskrifter implicit objekt:

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

4. Hvad du kan gøre i EL

I sin alsidighed kan EL vises i Java-kode, XHTML-markering, Javascript og endda i JSF-konfigurationsfiler som ansigter-config.xml fil. Lad os undersøge nogle konkrete brugssager.

4.1. Brug EL i sidemarkering

EL kan vises i standard HTML-tags:

4.2. Brug EL i JavaScript

EL fortolkes, når de opstår i Javascript eller tags:

 var theVar = # {ELBean.firstName};

En baggrundsbønne-variabel vil blive indstillet som en javascript-variabel her.

4.3. Evaluer boolsk logik i EL ved hjælp af operatører

EL understøtter ret avancerede sammenligningsoperatører:

  • ækv ligestillingsoperatør, svarende til “==.”
  • lt mindre end operatør, svarende til “<.”
  • le mindre end eller lig med operator, svarende til "<=."
  • gt større end operatøren, svarende til ">."
  • ge større end eller lig, svarende til “>=.

4.4. Evaluer EL i en bagbønne

Inden for baggrundsbønnekoden kan man evaluere et EL-udtryk ved hjælp af JSF-applikationen. Dette åbner en verden af ​​muligheder ved at forbinde JSF-siden med bagbønnen. Du kan nemt hente implicitte EL-objekter eller nemt hente faktiske HTML-sidekomponenter eller deres værdi fra bagbønnen:

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

Dette giver udvikleren stor fleksibilitet i at interagere med en JSF-side.

5. Hvad du ikke kan gøre i EL

EL <3.0 har nogle begrænsninger. De følgende afsnit diskuterer nogle af dem.

5.1. Ingen overbelastning

EL understøtter ikke brugen af ​​overbelastning. Så i en bagbønne med følgende metoder:

offentlig ugyldig gem (bruger brugeren); offentlig ugyldig gemme (streng brugernavn); offentlig ugyldig gemme (heltal uid);

JSF EL kan ikke korrekt evaluere følgende udtryk korrekt

JSF ELResolver vil introspektere klassedefinitionen af bønne, og vælg den første metode, der returneres af java.lang.Class # getMethods (en metode, der returnerer de tilgængelige metoder i en klasse). Rækkefølgen af ​​de returnerede metoder er ikke garanteret, og dette vil uundgåeligt resultere i udefineret adfærd.

5.2. Ingen enums eller konstante værdier

JSF EL <3.0 understøtter ikke brugen af ​​konstante værdier eller Enums i scriptet. Så med et af følgende

public static final String USER_ERROR_MESS = "Nej, det kan du ikke"; enum dage {lør, søn, man, ti, ons, tor, fre};

betyder, at du ikke kan gøre følgende

5.3. Ingen indbygget nul sikkerhed

JSF EL <v3.0 giver ikke implicit nul sikker adgang, som nogle måske finder underligt ved en moderne scriptmotor.

Så hvis person i nedenstående udtryk er null, hele udtrykket mislykkes med en grim NPE

Hej hr. # {ELBean.person.sname} "

6. Konklusion

Vi har undersøgt nogle af de grundlæggende i JSF EL, styrker og begrænsninger.

Dette er stort set et alsidigt manuskriptsprog med noget plads til forbedring; det er også limen, der binder JSF-visningen til JSF-modellen og controlleren.

Kildekoden, der ledsager denne artikel, er tilgængelig på GitHub.


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