1 Unified Expression Language Copyright © Lund & Bendsen A/S Unified Expression Language.

Slides:



Advertisements
Lignende præsentationer
Videregående pc-vejledning
Advertisements

Introduktion til HTML Formularer V1 introduktion til formularer Den sidste af HTML strukturmarkørerne er FORM-markøren, der bruges til at lave.
Velkommen til Softwarekonstruktion
1 Facelets Copyright © Lund & Bendsen A/S Introduktion til Facelets.
07 – Kort om OO Introduktion.
Grundejerforeningen Jægervangen
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
SQL 1 DDL og DML.
1 JavaServer Faces Copyright © Lund & Bendsen Dynamikken i JSF.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Intro Forelæsning 2 Linux install-party lør.14.sept kl – man. 14.okt – Kursets omfang :7,5 ECTS Kursussammensætning: forelæsning.
1 Parsing. 2 Mål: Et program til indlæsning og beregning af aritmetiske udtryk Eksempel: Beregn (3*5 + 4/2) - 1 Løs et lettere problem først: Læs en streng.
1 JavaServer Faces Copyright © Lund & Bendsen A/S UI Components II.
Intro Variabler - datatyper. 2. forelæsning Hvad skete sidste gang Hvad er PHP? Kursussammensætning: læse – newsgroup – forelæsning – øvelsestime – aflevering.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Validering af data (Access, del 7)
Webserveren kan afvikle flere applikationer, der hver har deres eget selvstændige ”liv” og hukommelse. Den enkelte applikation består typisk af flere elementer.
Reduktion AM 2009.
FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Intro Projekttyper v/ Lise Louv, Uddannelsesafdelingen Siden sidst: evaluering på opgaver og virtuel kursus. Kursets ugeforløb læse – forelæsning – øvelsestime.
18 – Java Server Faces. 2 NOEA2009Java-kursus – JSF 2 Web-applikationer - 1 Brugere interagerer med en Web-browser Browseren sender forespørgsler til.
Intro Bemærkninger? Præsentation af litteratur: PHP and MySQL Web Development (SAMS) PHP Pocket Reference (O’Reilly) Dictionary of Networking (Sybex)
FEN Prædikater/Seminar 11 Prædikatslogik eller Kvantificerede udtryk Prædikater udvider propositionslogikken på to måder: –Vi tillader variable.
1 JavaServer Faces Copyright © Lund & Bendsen A/S JSF Lifecycle.
XML Rasmus D. Lehrmann DM Indhold Hvad er XML? XML standarder Hvor bruges XML? XML struktur Træ struktur Element & Attribute Syntaks i XML Stylesheets.
Intro til C# apps Kodegennemgang af simpel C# app
AJAX/Otto Knudsen 1 AJAX Motivation Definition. AJAX/Otto Knudsen 2 Motivation En typisk web-applikation er synkron klienten sender en forespørgsel og.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Program Design – 4 Introduktion til PHP. Dagens lektion Hvad er PHP?  - og lidt historie Hvordan virker PHP? Grundlæggende PHP  Variable  Typer  Løkker.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Eksempel på realisering af domænemodel
Webserveren kan afvikle flere applikationer, der hver har deres eget selvstændige ”liv” og hukommelse. Den enkelte applikation består typisk af flere elementer.
Masterpages/Otto Knudsen 1 Navigation på webstedet Kontroller til navigation mellem siderne på webstedet.
Procestræ under afvikling af cp init login shell cp cp src dest.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Paradigmer i Programmering 1. Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative.
Primitive typer. dIntProg, F08Typer.2 Subtyperelation for primitive typer byte ≤ short ≤ int ≤ long ≤ float ≤ double char boolean double d; int i; d =
Grundlæggende XML og XML- baserede teknologier til textmodellering DTD 2. kursusgang (7/ )
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:
Webserveren kan afvikle flere applikationer, der hver har deres eget selvstændige ”liv” og hukommelse. Den enkelte applikation består typisk af flere elementer.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
PD – kursusgang 3 Introduktion til Java Script. Mål Viden om hvordan JavaScripts indlejres i HTML dokumenter Viden om programmering i JavaScript  Erklæring.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
GP4, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 4 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
C#: Data Typer. 2 Nordjyllands Erhvervakademi Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies,
Forelæsning 7.1 – repetition
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
Variabler, klassevariabler, identitet og lighed, collections
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
Fundamentale sprogbegreber Typer. dIntProg, F08Typer.2 Typer Primitive typer –boolean –byte, char, short, int, long, float, double Objekttyper –klassetype.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Web- og serverprogrammering Dette materiale er under Åben Dokumentlicens, se Java Server Pages - dag 2 Java Server.
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Forelæsning Uge 4 – Mandag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 4 – Mandag
Studiepraktik Thomas Bøgholm Mikkel Hansen Jacob Elefsen
Forelæsning Uge 2 – Mandag
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

1 Unified Expression Language Copyright © Lund & Bendsen A/S Unified Expression Language

2 Copyright © Lund & Bendsen A/S Historien bag Unified Expression Language JSF 1.0 og 1.1 havde deres eget Expression Language, kaldet JSF-EL JSTL 1.0 havde sit eget Expression Language, kaldet JSTL-EL. I JSP 2.1 (JSR-245) blev der introduceret et Unified Expression Language, som siden har erstattet både JSF-EL og JSTL-EL. I de senere versioner af både JSF og JSTL er det Unified Expresion Language, der benyttes. I det følgende gennemgår vi Unified Expression Language, som vi fremover blot betegner EL.

3 Unified Expression Language Copyright © Lund & Bendsen A/S Formålet med EL EL er et selvstændigt scripting sprog, dvs. det er ikke Java-baseret EL giver mulighed for at udtrykke dynamiske attribut-værdier og overflødiggør dermed Request Time Expressions, som det kendes fra JSP, fx, som med EL kan udtrykkes: ${customer.address} EL kan tilgå JavaBeans, Collections og Maps og en række implicitte objekter i en web-applikation, fx request og session. EL har alle de kendte aritmetiske operatorer (+, -, *...), logiske operatorer (and, or, not) og sammenligningsoperatorer (==,...) EL giver mulighed for at angive metodekald, fx #{customerBean.delete}

4 Unified Expression Language Copyright © Lund & Bendsen A/S EL-terminologi Et EL-udtryk kan angives på 2 måder: –som et eval expression, dvs. et udtryk, der skal parses og evaluerer til en eller anden værdi – fx #{user.name}, som måske evaluerer til ”Peter Larsen”. –som et literal expression, dvs. et udtryk, der ikke skal parses og evaluerer til sin literale værdi – fx Hej, der evaluerer til ”Hej” Et composite expression er et udtryk der består af 2 eller flere eval expression og literal expressions, fx: Velkommen #{user.name}! Det er dit besøg nr #{user.requests}. Et value expression er et udtryk der ultimativt evaluerer til en String eller en objektreference. Et method expression er et udtryk, der udpeger en metode. Metodens præcise signatur afhænger af sammenhængen. Et eksempel: #{user.validate}, som udpeger en metode i den managed bean, der er bundet under navnet user. Et lvalue-udtryk, er et udtryk, der både kan læses og opdateres (og derfor kunne stå på venstresiden af et værditildelingsudtryk (a=b)), fx #{user.name} Et rvalue-udtryk er et udtryk der kun kan læses og derved kun kan stå på højresiden af en værditildeling, fx udtrykket Hej #{user.name}, som det ikke giver mening at tildele en værdi.

5 Unified Expression Language Copyright © Lund & Bendsen A/S Evalueringstidspunkt EL har 2 forskellige syntakser for udtryk: –#{...} –${...} De to syntakser evalueres på præcis samme måde (dvs. at deres værdi er den samme), men det kan ske på forskellige tidspunkter – alt afhængigt af det framework, der fortolker EL-udtrykkene. I Web-applikationer betyder ${...}, at udtrykket skal fortolkes når JSP-siden eksekveres – kaldet immediate evaluation. Det er fint til udtryk, som det giver mening at evaluere på dette tidspunkt, men til mange konstruktioner i JSF duer det ikke. #{...} fortolkes af web applikationer med såkaldt deferred evaluation, dvs. at udtrykket først fortolkes, når der rent faktisk er brug for værdien, fx når en JSF-knap skal kalde sin actionlistener eller når et input-felt skal rendere sin værdi, som er bundet til udtrykket #{user.name}. Generelt til udtryk, der har med JSF-komponenter at gøre (specielt managed beans) skal man bruge #{}. I JSTL vil man typisk bruge ${}-syntaksen, da JSTL-komponenter er taglibs, der kan evalueres når JSP-siden eksekveres.

6 Unified Expression Language Copyright © Lund & Bendsen A/S Eksempler på EL Vi vælger at vise eksempler på begge syntakser (#{}, ${}) og oftest vil man kunne erstatte den ene syntaks med den anden. #{12}Returnerer værdien 12, deferred evaluation ${12}Returnerer værdien 12, immediate evaluation #{LoginBean.username}binder til username-egenskaben i den Bean, der er erklæret med navnet ’LoginBean’. Alternativt kan LoginBean være et Map og værdien gemt under nøglen username læses/opdateres da. #{LoginBean[’username’]}Samme som ovenstående #{aList[0]}Returnerer objektet på 1. plads i en liste #{aList[0].person.name}Svarer til: aList.get(0).getPerson().getName() #{LoginBean.username==’x’}Returnerer true, hvis username er ”x”

7 Unified Expression Language Copyright © Lund & Bendsen A/S Eksempler på EL #{LoginBean.loginAttempts==4}Returnerer true, hvis loginAttempts er 4 #{(5+5) > (20/2)}Returnerer false Hej #{LoginBean.username}Returnerer ”Hej ” + username #{ (1==1) ? ’sand’ : ’falsk’ }Svarer til Javas ’ternary if’. Returnerer altid ’sand’. #{LoginBean.login}Returnerer værdien af login()-metodekaldet #{empty(colors)} Returnerer true, hvis samlingen (fx en liste) colors er tom #{((empty(colors) && profile.color>0) ? ’fejl’ : profile.color)} returnerer ’fejl’, hvis samlingen colors er tom OG profile.color er større end 0 og ellers returneres profile.color

8 Unified Expression Language Copyright © Lund & Bendsen A/S Literaler LiteraltypeEksempel på literalEksempel på EL booleanstrue, false${msg.error==false} heltal-1,1,2,3${1} floating point1, 3.14, 1.2e4, 1.2E4${ e2 + 1E2} null-literalennull${user==null} strenge’hej’, ”hej”, ’\”’\ er escape-karakter: \’, \”, fx ${'Her er et gåseøje: \"'} Eksempel på brug i JSTL:

9 Unified Expression Language Copyright © Lund & Bendsen A/S Operatorer OperatorEksempelEksempel med EL unary minus-${-1} addition+${ e2 + 1E2}, returnerer 0 hvis A eller B er null subtraktion-${ e2 - 1E2}, returnerer 0 hvis A eller B er null multiplikation*${2*2}, returnerer 0 hvis A eller B er null division/ eller div ${2/2}, ${2 div 2}, returnerer 0 hvis A eller B er null modulo% eller mod ${100 % 30}, ${100 mod 30},, returnerer 0 hvis A eller B er null empty ${empty(customer.orders)} – tester om en samling er tom. Operatorerne klarer selv konvertering. For de dyadiske operatorer (dem med 2 operander) gælder, at såfremt begge operander er heltal er resultatet en long. Ellers er det en double.. div og mod er indført for at forhindre at JSP-sider udtrykt i XML-syntaks fører til mal-formede XML-dokumenter

10 Unified Expression Language Copyright © Lund & Bendsen A/S Sammenligning, logik TypeEksempelEksempel i EL lighed==, eq ${1+1 == 2}, ${1+1 eq 2} ulighed!=, ne ${1-1 != 1}, ${1-1 ne 2} mindre end<, lt ${1 < 2}, ${1 lt 2} større end>, gt ${1 > 2}, ${1 gt 2} mindre end, lig <=, le ${1 <= 2}, ${1 le 2} større end, lig >=, ge ${1 >= 2}, ${1 ge 2} og&&, and${1+1 == 2 && 2<3}, ${1+1 == 2 and 2<3} eller||, or${1+1 == 2 || 2>3}, ${1+1 == 2 || 2>3} negering!, not${!(1+1 == 2 && 2<3), ${not(1+1 == 2 and 2<3)} Parenteser () kan brugs til at ændre præcedens ganske som det kendes fra Java.

11 Unified Expression Language Copyright © Lund & Bendsen A/S Indeces ’[’ og ’]’ kan bruges til at tilgå objekter i Collections eller arrays. Eksempel på ELTilsvarende Java-kode ${customer.orders[0].text}customer.getOrders().get(0).getText() ${customerlist[1].orders[2].text}customerlist.get(1).getOrders().get(2).getText()

12 Unified Expression Language Copyright © Lund & Bendsen A/S Operatorpræcedens Highest to lowest, left-to-right. 1. [ ]. 2. () 3. - (unary) not ! empty 4. * / div % mod (binary) 6. = lt gt le ge 7. == != eq ne 8. && and 9. || or

13 Unified Expression Language Copyright © Lund & Bendsen A/S Implicit variabelEksempelTilsvarende Java-kode applicationScope#{applicationScope.LoginBean.login- Attempts} getServletContext().getAttribute(”LoginBean” ).getLoginAttempts() cookie#{cookie.sessionID} request.getCookies() //Cookie[] – find cookie //med navn sessionID facesContext#{facesContext} FacesContext.getCurrentInstance() header#{header[’referer’]} request.getHeaders(”referer”) headerValues#{headerValues[’Accept-encoding’][0]} request.getHeaderValues(...)[0] initParam#{initParam.webmaster} getServletContext().getInitParameter(”webm aster”) param#{param.jsessionid]} request.getParameter(”jsessionid”) EL definerer en række implicitte variable, dvs. variable, der altid er til rådighed. Implicitte variable (1/2)

14 Unified Expression Language Copyright © Lund & Bendsen A/S Implicit variabelEksempelTilsvarende kode i servlet-API’et paramValues#{paramValues.phone[0]} request.getParameterValues()[0] requestScope#{requestScope.LoginBean.loginAtte mpts} request.getAttribute(”LoginBean”).getLoginAt tempts() sessionScope#{sessionScope.LoginBean.loginAtte mpts} request.getSession(). getAttribute(”LoginBean”).getLoginAttempts() view#{view.locale} FacesContext.getCurrentInstance().getView Root().getLocale() Implicitte variable (2/2)

15 Unified Expression Language Copyright © Lund & Bendsen A/S Variabelnavne og scopes Når udtrykket ${customer.name} evalueres, søges de 4 scopes igennem efter attributten med navnet ’customer’. Søgerækkefølgen er: page, request, session, application, så det er muligt at ’overskygge’ variable. Såfremt variablen ikke findes i noget scope returneres null. dot-notationen bruges på samme måde som i Java, dvs. at ${person.parent.parent.name} svarer til person.getParent().getParent().getName().

16 Unified Expression Language Copyright © Lund & Bendsen A/S Scoped Variable vs. Scripting Variable EL kan kun arbejde på Scoped Variable – ikke Scripting Variable Scoped Variable er Objekter, der er bundet i page, request, session eller application-scope, fx med request.setAttribute(”customer”, new Customer(...)); Scripting Variable er variable oprettet af Tags og de implicitte objekter i JSP (request, response, session, exception, page, application etc.) EL har dog egne implicitte objekter, fx requestScope og sessionScope

17 Unified Expression Language Copyright © Lund & Bendsen A/S Scoped Variable vs. Scripting Variable Umiddelbart virker det som om fx JSTL-tags opretter Scripting Variable Imidlertid bliver alle variable oprettet som Scoped Variable, dvs de bliver tilføjet til et af de 4 scopes (page, request, session, application) under et navn og det er dette navn, man reelt refererer til row er ikke en scripting variabel – det er et objekt bundet under navnet ”row” i et scope

18 Unified Expression Language Copyright © Lund & Bendsen A/S Yderligere info Se JSP 2.1 specifikationen (JSR-245) kapitel 2 for en uddybende gennemgang af EL-sproget.