Direkt zur Navigation | Direkt zum Inhalt



Expression Language 2.2 mit Maven und Tomcat

Expression Language 2.2 mit Maven und Tomcat

Beim Einsatz von JSF 2.0 bin ich diese Woche auf ein kleines Problem gestoßen – der Aufruf von Methoden mit Parametern war mit der Expression Language nicht möglich. Seit der Version 2 der Expression Language wurde dieses Feature zur Verfügung gestellt. Da diese Version allerdings kein Teil der JSF 2.0 API ist, waren für den Einsatz im Tomcat noch ein paar kleinere Anpassungen nötig.

Dependencies
Zuerst muss die Expression Language API sowie die dazugehörige Implementierung aus dem Maven Repository von java.net in das Projekt eingebunden werden.

<dependency>
  <groupId>javax.el</groupId>
  <artifactId>el-api</artifactId>
  <version>2.2</version>
</dependency>

<dependency>
  <groupId>org.glassfish.web</groupId>
  <artifactId>el-impl</artifactId>
  <version>2.2</version>
</dependency>
<repository>
  <id>maven2-repository.dev.java.net</id>
  <name>Java.net Repository for Maven</name>
  <url>http://download.java.net/maven/2</url>
</repository>

Verwendung der neuen Expression Language
Um die neue Version der Expression Language zu verwenden, muss die ExpressionFactory anschließend in der web.xml registriert werden.

<context-param>
  <param-name>com.sun.faces.expressionFactory</param-name>
  <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>

Und damit lassen sich nun auch Parameter an Methoden per Expression Language übergeben.

Kommentare

Mike T.
Freitag, 25.02.2011 (22:43)

Wenn es blos so einfach wäre, leider klappt es bei mir mit dem Tomcat6 nicht so ganz, die Fehlermeldung scheint einem jedoch ins Gesicht zu lügen:

com.sun.faces.config.ConfigurationException: It appears the JSP version of the container is older than 2.1 and unable to locate the EL RI expression factory, com.sun.el.ExpressionFactoryImpl. If not using JSP or the EL RI, make sure the context initialization parameter, com.sun.faces.expressionFactory, is properly set.

ganz recht, ich will JSP garnicht verwenden, und habe in der web.xml die richtige factory referenziert:

com.sun.faces.expressionFactory
com.sun.el.ExpressionFactoryImpl

Trotzdem vielen dank for den Artikel, bei den meisten Leuten wird es wohl funktionieren.

Markus L.
Dienstag, 31.05.2011 (10:10)

@Mike T.: Ich weiß ich bin etwas spät, aber es sollte helfen jasper-el.jar aus dem tomcat lib Ordner zu entfernen und mit den beiden glassfish/sun jars zu ersetzen. Für MyFaces lautet der Eintrag in der web.xml übrigens

org.apache.myfaces.EXPRESSION_FACTORY
com.sun.el.ExpressionFactoryImpl

Alternative Implementierung einer ExpressionLanguage gibt es außerdem von JBoss. Leider wird das scheinbar nicht fortgeführt und steht momentan bei Version 2.0.2.CR1

Arbeitet man mit OpenWebBeans und MyFaces gibt es ausserdem eine tolle Möglichkeit CDI Resolver am Ende der EL-Resolver Chain zu setzen, um unnötige CDI „Lookups“ zu reduzieren. Jakob postet darüber hier: http://www.jakobk.com/2010/08/custom-elresolver-ordering-in-myfaces/

Neues Kommentar