Inhalt Abbildung PDF Source SCWCD
 |<    <     >    >|  Generated by CoCoDiL

9 Die Expression Language

9.1 Zugriff auf implizite Variablen

Given a scenario, write EL code that accesses the following implicit variables including: pageScope, requestScope, sessionScope, and applicationScope, param and paramValues, header and headerValues, cookie, initParam and pageContext.

Mit der Expression Language hat man Zugriff auf eine Reihe von implizierten Objekten, die in der folgenden Tabelle zusammengefasst sind.

NameBedeutung
pageContextDie Instanz der PageContext Klasse ,für die aktuelle Seite
pageScopeEine Collection (java.util.Map) aller page scope Variablen
requestScopeEine Collection (java.util.Map) aller request scope Variablen
sessionScopeEine Collection (java.util.Map) aller session scope Variablen
applicationScopeEine Collection (java.util.Map) aller application scope Variablen
paramEine Collection (java.util.Map) aller Parameterwerte einer Anfrage.${param.name} entspricht aServletRequest.getParameter(name)
paramValuesEine Collection (java.util.Map) aller Parameterwerte einer Anfrage als String Array. ${paramValue.name} entspricht aServletRequest.getParameterValues(name)
headerEine Collection (java.utilMap) aller Header Werte einer Anfrage.
headerValuesEine Collection (java.utilMap) aller Header Werte einer Anfrage als String Array
cookieEine Collection (java.utilMap) von Cookie-Namen zu einzelnen Cookie Werten
initParamEine Collection (java.utilMap) aller Initialisierungsparameter

Beispiele:

Bei einem Ausdruck ${einString} wird erstmal geschaut ob einString ein implizites Objekt ist. In diesem Falle wird dieses zurückgegeben. Ansonsten wird mit der Funktion PageContext.findAttribute(einString) der Paramter einString in den Scopes gesucht. Es werden nacheinander die Scopes page,request,session und application durchsucht bis das Attribut einString gefunden wird. Es wird der Wert des Attributs einString zurückgegeben, oder falls es diesen nicht gibt, wird der Wert null zurückgegeben. Sollte es ein Attribut innerhalb eines Scopes wie ein implizites Objekt heissen, so wird das implizite Objekt zurückgegeben.

9.2 Zugriff auf Bean Properties und Collection Elemente

Given a scenario, write EL code that uses the following operators: property access (the '.' operator), collection access (the '[]' operator).

Mit dem Punkt Operator '.' wird auf die Properties eines Beans zugreifen.

Auch ist es sehr einfach, auf eine Map zuzugreifen:

Ausdrücke mit der Syntax '${identifier[subexpression]}' werden folgendermassen ausgewertet:

Identifier typeExample useMethod invoked
JavaBean${colorBean.red} <br> ${colorBean["red"]} <br> ${colorBean['red']}colorBean.getRed()
Array${colorArray[2]} <br> ${colorArray["2"]}Array.get(colorArray, 2)
List${colorList[2]} <br> ${colorList["2"]}colorList.get(2)
Map${colorMap[red]}colorMap.get(pageContext.findAttribute("red"))
${colorMap["red"]} <br> ${colorMap.red}colorMap.get("red")

9.3 Operatoren

Given a scenario, write EL code that uses the following operators: aritmetic operators, relational operators, and logical operators.

9.3.1 Arithmetische Operatoren

Es existieren die gewohnten arithmetischen Operatoren: '+', '-', '*', '/', '%'. Für die Division kann man ausser '/' auch div benutzen. Für Modulo kann man ausser '%' auch mod benutzen.

6 + 7 = ${6+7}
8 x 9 = ${8*9}

Bei einer Division durch 0, wird keine Exception geworfen sondern der String 'Infinity' zurückgegeben.

9.3.2 Relationale Operatoren

Die relationalen Operatoren sind in folgender Tabelle zusammengefasst:

Symbol versionText Version
==eq
!=ne
<lt
>gt
>=ge
<=e

Hier sind einige Beispiele:

9.3.2.1 Logische Operatoren

Die logischen Operatoren entsprechen denen von Java. Für jeden operator gibt es auch eine textuelle Variante:

Symbolversion Text Version
&&and
IIor
!not

Da es in EL kein null Wert gibt, wurde der empty Operator eingefügt.

Beispiel

Dieser Operator wird true fall:

Der Operator wird folgendermassen aufgerufen:

empty variableName

9.4 Funktionen nutzen und definieren

Given a scenario, write EL code that uses a function; write code for an EL function; and configure the EL function in a tag library descriptor.

Die Expression Language lässt sich um eigene Funktionen erweitern. Eine Funktion besteht aus einem Präfix, dem Funktionsnamen und ggf. einigen Parametern.

Es muss eine taglib Direktive existieren, die dem Prefix (ns) eine TagLibDescripiton Datei zuordnet.

z.B:

In dieser TLD Datei wird die Schnittstelle der Funktionen definiert.


Abb. 9.1: Definieren einer eigenen EL Funktion

Die Java Klasse muss in der tld-Datei voll qualifiziert angegeben werden. Die eigentliche Funktion ist eine statische Funktion der angegebenen Java Klasse.

Die Bedeutung von function-extension und extension-element ist mir selbst noch unklar, wird aber wahrscheinlich für die Zertifizierung nicht benötigt.

Hier ein Beispiel einer selbstgeschriebenen concat-Funktion

Tritt beim Ausführen der Funktion eine Exception auf, so wird diese Exception in eine ELException gewrapped, und diese ELException wird geworfen.

Inhalt Abbildung PDF Source SCWCD
 |<    <     >    >|  Generated by CoCoDiL