EL-2.2 is part of JSR-245 MR2 (JSP-2.2) and therefor not included in Tomcat6 nor Jetty6. This will be part of Tomcat7 and Jetty7, but with a few manual steps, you can use EL-2.2 even in current containers.
Currently, the best Implementation we use is the one available from the glassfish project. An Apache implementation is ongoing and is currently available as a SNAPSHOT build, however we recommend to use el-api.jar and el-impl.jar from glassfish until it is final.
To make the 2 required jars available for your project, you can simply use maven:
<!-- EL 2 --> <dependency> <groupId>javax.el</groupId> <artifactId>el-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <profiles> <profile> <id>jetty</id> <build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>${jetty-version}</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>javax.el</groupId> <artifactId>el-api</artifactId> <version>2.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>el-impl</artifactId> <scope>runtime</scope> <version>2.2</version> </dependency> </dependencies> </profile> </profiles |
The above code uses Sun's EL 2.2 implementation from Glassfish. If you want to use Apache's implementation, you have to use the following dependencies from the Apache SNAPSHOT repository:
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-el-api</artifactId> <version>7.0.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper-el</artifactId> <version>7.0.0-SNAPSHOT</version> </dependency> |
However keep in mind that this implementation is only a SNAPSHOT build and thus you might run into some problems with it.
In addition you have to configure the right expression factory implementation in the web.xml. For Sun's EL 2.2 implementation this is com.sun.el.ExpressionFactoryImpl
and for Apache's implementation this is org.apache.el.ExpressionFactoryImpl
. The following snippet shows the web.xml configuration for Sun's impl.
<context-param> <param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name> <param-value>com.sun.el.ExpressionFactoryImpl</param-value> </context-param> |
Tomcat6 has to be prepared, otherwise it will crash with a Exception on container startup: