<?xml version="1.0"?>
<document url="./struts-el.xml">
<properties>
<author>David Karr</author>
<title>Struts EL Extension - Apache Struts</title>
</properties>
<body>
<chapter href="faq" name="Struts EL Extension">

    <section href="Introduction" name="Introduction">

    <p>
        This subproject is an extension of the Struts tag library.  Each JSP custom tag
       in this library is a subclass of an associated tag in the Struts tag library.
       One difference is that this tag library does not use "rtexprvalues", it uses
       the expression evaluation engine in the Jakarta Taglibs implementation of the
       JSP Standard Tag Library (version 1.0) to evaluate attribute values.
    </p>

    <p>
       In addition, some of the Struts tags were not ported to this library, as it was
       determined that their functionality was entirely supplied by the JSTL.  These
       particular Struts tags, and the reason for their non-porting will be described
       in the documentation for this library.
    </p>

    <p>
       In order to fully understand the correct utilization of this library, you must
       understand the use and operation of the Struts tag library, and the use and
       operation of the JavaServer Pages Standard Tag Library (hereafter called the
       "JSTL"), along with the expression language (sometimes called the "EL") used
       for evaluating attribute values.
    </p>

    </section>

       <section href="TagMapping" name="Tag Mapping">

    <p>
       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.
    </p>

    <p>
       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.
    </p>

    <p>
       <strong> Bean Tag Library Tags NOT Implemented in Struts-EL</strong>
    </p>

    <table>
    <tr><th>Struts Tag</th><th>JSTL Tag</th></tr>
    <tr><td>cookie</td><td>c:set, EL</td></tr>
    <tr><td>define</td><td>c:set, EL</td></tr>
    <tr><td>header</td><td>c:set, EL</td></tr>
    <tr><td>include</td><td>c:import</td></tr>
    <tr><td>parameter</td><td>c:set, EL</td></tr>
    <tr><td>write</td><td> c:out</td></tr>
    </table>

    <p>
       <strong>Bean Tag Library Tags NOT Implemented in Struts-EL</strong>
    </p>

    <table>
    <tr><th>Struts Tag</th><th>JSTL Tag</th></tr>
    <tr><td>empty</td><td>c:if, c:when, EL</td></tr>
    <tr><td>equal</td><td>c:if, c:when, EL</td></tr>
    <tr><td>greaterEqual</td><td>c:if, c:when, EL</td></tr>
    <tr><td>greaterThan</td><td>c:if, c:when, EL</td></tr>
    <tr><td>lessEqual</td><td>c:if, c:when, EL</td></tr>
    <tr><td>lessThan</td><td>c:if, c:when, EL</td></tr>
    <tr><td>notEmpty</td><td>c:if, c:when, EL</td></tr>
    <tr><td>notEqual</td><td>c:if, c:when, EL</td></tr>
    </table>

    <p>
       (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.)
    </p>

    <p>
       <strong>Html Tag Library Tags NOT Implemented in Struts-EL</strong>
    </p>

    <p>
       None (all of them were ported).
    </p>

    </section>

    <section href="AttributeMapping" name="Attribute Mapping">

    <p>
       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".
    </p>

    </section>

    <section href="UsageRequirements" name="Usage Requirements">

    <p>
       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.
    </p>

    <p>
       This is because the Struts-EL tag classes are all subclasses of Struts tag
       classes, and their implementation uses classes provided by the JSTL.
    </p>

    </section>

</chapter></body></document>
