Expression Language
5 years, 3 months ago

EL to język który powstał jako alternetywa dla tych, którzy na stronach JSP nie potrafią lub nie lubią pisać w Javie. Generalnie możemy uniknąć stosowania elementów skryptowych na stronach JSP poprzez wykorzystanie akcji standardowych. Stosowanie akcji posiada jednak pewne ograniczenia - np. nie można odwoływać się do elementów zagnieżdżonych w komponentach. EL daje nam takie możliwości. Aby posługiwać się językiem EL, musimy jednak wymazać z pamięci wszystkie reguły jakie obowiązują w Javie. Język EL to po prostu zupełnie inna składnia. 

Wszystkie wyrażenia EL obowiązuje jedna podstawowa reguła - poprzedzamy je znakiem dolara i umieszczamy w nawiasach klamrowych:

${person.name}

Pierwsza użyta w wyrażeniu EL zmienna to dowolny atrybut umieszczony w dowolnym z czterech zasięgów (aby dowiedzieć się więcej na temat zasięgów na stronie JSP przejdź do artykułu Atrybuty i parametry aplikacji J2EE), lista albo tablica atrybutów, lub obiekt domyślny języka EL. Obiektem domyślnym EL zawsze jest jakaś mapa albo komponent:

  • pageScope – mapa atrybutów zasięgu page
  • requestScope - mapa atrybutów zasięgu żądania
  • sessionScope - mapa atrybutów zasięgu sesji
  • applicationScope - mapa atrybutów zasięgu aplikacji
  • param - mapa parametrów żądania
  • paramValues - mapa parametrów żądania, stosujemy na wypadek gdy mamy kilka parametrów żądania o tej samej nazwie
  • header - mapa nagłówków żądania
  • headerValues - mapa nagłówków żądania, stosujemy na wypadek gdy mamy kilka parametrów żądania o tej samej nazwie
  • cookie – mapa ciasteczek
  • initParam – mapa parametrów inicjalizacji kontekstu (aplikacji)
  • pageContext – możemy traktować jako komponent. Jest to obiekt typu PageContext (reprezentujący zasięg strony), który jest komponentem JavaBean

Jeśli chcemy się odwołać do właściwości komponentu lub elementu mapy, listy bądź tablicy, to powinniśmy użyć operatora "." lub "[]":

operator kropki: 

Pozwala na odwołanie się do właściwości komponentu lub elementu mapy. Innymi słowy element na lewo od kropki zawsze musi być komponentem lub mapą, a na prawo od kropki - kluczem mapy lub właściwością komponentu np.:

${requestScope.person.name}

W tym wypadku element requestScope jest mapą atrybutów zasięgu żądania zaś element person jest kluczem tej mapy i zarazem komponentem JavaBean o nazwie "person".

Dodatkowo wartość na prawo od kropki zawsze musi być poprawnym identyfikatorem Javy, czyli np. nie może to być liczba i wyrażenie ${mapaUtworow.1} nie zadziała.

operator "[]":

operator "[]" działa tak samo jak operator kropki, ale dodatkowo umożliwia korzystanie z list i tablic oraz pozwala na korzystanie z łańcuchów, które nie są poprawnymi identyfikatorami Javy. Np. wyrażenie

${person.name}

jest równoważne wyrażeniu

${person["name"]}

Jeśli jednak chcemy odwołać się do elementu mapy o kluczu "1" to nie możemy skorzystać z wyrażenia

${mapaUtworow.1}

i musimy użyć

${mapaUtworow["1"]}

Jeśli chcemy skorzystać z listy lub tablicy, to również musimy skorzystać z operatora "[]":

${listaUtworow[0]}

W przypadku list i tablic podanie wartości 0 jest równoważne podaniu wartości "0":

${listaUtworow[0]} === ${listaUtworow["0"]}

Jeśli w nawiasach klamrowych podamy wartość String ale bez cudzysłowów, to kontener spróbuje przekształcić podaną nazwę na wartość atrybutu o tej nazwie, np.:

request.setAttribute("Atrybut", "0");
${listaUtworow[Atrybut]} ==> ${listaUtworow["0"]} ==> ${listaUtworow[0]}

Inne operwtory EL: 

  • + - dodawanie, np. ${lietaUtworow[2+2]}
  • - odejmowanie, np. ${lietaUtworow[3-2]}
  • * - mnożenie, np. ${lietaUtworow[3*2]}
  • /  lub div - dzielenie, np. ${lietaUtworow[6 div 2]}
  • % lub mod - modulo, np. ${lietaUtworow[6 mod 2]}
  • && lub and - operator logiczny and
  • || lub or - operator logiczny or, np. ${true or false}
  • ! lub not - operator logiczny and, np. ${true and false}
  • == lub eq - operator relacyjny == , np. ${2==2}
  • != lub ne - operator relacyjny !=, np. ${2!=2}
  • < lub lt - operator relacyjny <, np. ${3 lt 2}
  • > lub gt - operator relacyjny >, np. ${2 gt 2}
  • <= lub le - operator relacyjny <=, np. ${2 le 2}
  • >= lub ge - operator relacyjny >=, np. ${2 ge 2}

Uwagi:

Język EL pomaga nam unikać błędów na stronach poprzez interpretację wartości NULL - w argumencie interpretuje wartość NULL jak zero, natomiast w wyrażeniach logicznych jak false, np. wyrażenie:

${null && true}

Zwróci wartość false. Jeśli zaś będziemy zwrócić na wyjście wartość atrybutu, która będzie równa NULL, to kontener nie zgłosi wyjątku a na wyjście po prostu trafi pusty text.

Przykład wykorzystania języka EL:

Chcemy pobrać więcej informacji z żądania HTTP, np. metodę protokołu HTTP. Nie możemy skorzystać z elementu requestScope, ponieważ zawiera on jedynie atrybuty zasięgu żądania. Nie możemy też skorzystać z elementu header, ponieważ zawiera on nagłówki protokołu a nie jego motodę. Czego więc możemy użyć? Możemy się odwołać do elementu domyślnego pageContext i zawartego w nim elementu request:

${pageContext.request.method}

Inny przykład:

Chcemy odczytać wartość parametru inicjalizacji kontekstu o nazwie "emailAddress":

${initParam.emailAddress}

 

Joanna Dzikowska
Comments
20
RSS Google+ Facebook Twitter LinkedIn
Lucid Mailer
Effective email marketing: newsletters, bulletins,
mailing campaigns
Lucid CRM
Customer relationship management, internal communication, individual sale
Lucid Sale
Sales assistant with custom-made
e-commerce platforms
Lucid Assistance
Post-Sales support for customers and troubleshooting solutions
Lucid Panel
Software for remote administration of
dedicated servers
Copyright © 2002-2012 Spacja.com