Commons JEXL can evaluate any method that is made available to the
interpreter. The following expression invokes the language()
method on an Opera
bean. The acts
property of Opera
is a List
, and this expression invokes the size( )
method on this List
to obtain the number of acts in the
Opera
:
Common Java Cookbook DocBook XML Content was composed by ${opera.composer} in ${opera.year}. This opera has ${opera.acts.size( )}, and it is performed in ${opera. language( )}
The following code creates and populates an expression and a context, merging the two to create a message:
import org.apache.commons.jexl.Expression; import org.apache.commons.jexl.ExpressionFactory; import org.apache.commons.jexl.JexlContext; import org.apache.commons.jexl.JexlHelper; Opera opera = new Opera( ); opera.setName("The Magic Flute"); opera.setComposer("Mozart"); opera.setYear(1791); opera.acts( new ArrayList(2) ); String expr = "Common Java Cookbook DocBook XML Content was composed by ${opera.composer} in ${opera.year}."; "This opera has ${opera.acts.size( )} acts, and it is performed in " + "${opera.language( )}"; Expression e = ExpressionFactory.createExpression( expr ); JexlContext jc = JexlHelper.createContext( ); jc.getVars( ).put("opera", opera); String message = (String) e.evaluate(jc); System.out.println( message );
The following message is printed to the console:
The Magic Flute was composed by Mozart in 1791. This opera has 2 acts, and it is performed in German.
This code is almost the same as the previous recipe, but you will
notice that the expression contains a direct call to the opera.language( )
method and a call to the
size( )
method on the acts
property of opera
.
Because JEXL is not governed by the Java Community Process (JCP), JEXL is free to extend the feature set of EL. Table 9-2 presents valid JEXL expressions that are actually invalid JSP 2.0 EL expressions.
Table 9-2. Extended capabilities of JEXL expression language
JEXL expression |
Evaluates to |
---|---|
|
Accessing any function on an object, this evaluates to the return value from this function. |
|
JEXL supports string concatenation. This expression evaluates to "Wolfgang Mozart." |
|
In JEXL you can get the size of a string like this. This expression evaluates to 3. |
|
On a map, JEXL will return the number of keys. |
|
Returns the size of a list. |
For more information about Commons JEXL's improvements on JSP 2.0 EL, see the Commons JEXL page (http://commons.apache.org/jexl/).