Struts EL is an extension of the Struts Taglib component that uses JSTL (the JavaServer Pages Standard Tag Library) as a foundation technology. Each JSP custom tag in this library is a JSTL-aware subclass of a corresponding tag in Struts Taglib. Since JSTL is a prerequisite, only those tags without a JSTL corrollary were ported to Struts EL.
Since this component utilizes JSTL, the JSTL expression language ("EL"), and Struts Taglib, an understanding of all three is a prerequisite.
Unlike the Struts Taglib component, Struts EL does not use runtime scriptlet expressions ("rtexprvalues"), EL uses the expression evaluation engine in the Jakarta Taglibs implementation of JSTL (version 1.0) to evaluate attribute values.
The base Struts Taglib contains tags which rely on the
evaluation of "rtexprvalue"s to render dynamic
attribute values. For instance, to print a message from a
properties
file based on a resource key, you would use the
bean:write
tag, perhaps like this:
<bean:message key='<%= stringvar %>'/>
This assumes that
stringvar
exists as a JSP scripting
variable. If you're using the
Struts-EL
library, the
reference looks very similar, but slightly different, like
this:
<bean-el:message key="${stringvar}"/>
In implementing the Struts-EL library, every Struts tag that provides a feature that is not covered by the JSTL (1.0) library is mapped into the Struts-EL library. This section reviews which Struts tags are NOT implemented in the Struts-EL library, and which JSTL tags provide that feature. (See the reference for the tags that are implemented.)
Many of the non-porting decisions were based on the fact that the JSTL expression language itself provides the same functionality. In those cases, in addition to a possible JSTL tag name, the symbol "EL" will be listed.
Struts Tag | JSTL Tag |
---|---|
cookie | c:set, EL |
define | c:set, EL |
header | c:set, EL |
include | c:import |
parameter | c:set, EL |
write | c:out |
Struts Tag | JSTL Tag |
---|---|
empty | c:if, c:when, EL |
equal | c:if, c:when, EL |
greaterEqual | c:if, c:when, EL |
greaterThan | c:if, c:when, EL |
lessEqual | c:if, c:when, EL |
lessThan | c:if, c:when, EL |
notEmpty | c:if, c:when, EL |
notEqual | c:if, c:when, EL |
(Note that the "iterate" tag was originally ported, even with the presence of the "c:forEach" tag, as the "indexed tag" functionality was not supported when using "c:forEach" instead of "logic:iterate". This has since been rectified, such that the "indexed tag" functionality checks for being contained in a "c:forEach" tag, in addition to the "logic:iterate" tag. However, the ported "iterate" tag has not been removed from Struts-EL, for backward compatibility.)
At this point of the implementation, there is only one change (to two similar tags) to the set of attributes between the Struts tags, and the Struts-EL tags. The "logic:match" and "logic:notMatch" tags have an additional attribute named "expr", which can take any value, and will be used as the value to compare against, in addition to the choices of "cookie", "header", "name"/"property", and "parameter".
The Struts-EL tag library requires the use of the Struts tag library, and the Java Server Pages Standard Tag Library. It is not necessary for JSP pages using the Struts-EL tag library to also use the Struts tags or the JSTL tags, but the Struts and JSTL tag libraries need to be part of the application utilizing the Struts-EL tag library.
This is because the Struts-EL tag classes are all subclasses of Struts tag classes, and their implementation uses classes provided by the JSTL.