<?xml version="1.0"?>
<document url="release-notes-1.1.html">

  <properties>
    <title>Struts Release Notes (Version 1.1)</title>
  </properties>

  <body>

  <section name="6.1 Release Notes" href="release_notes"/>
  <section name="Release Notes" href="beta">

    <p>This section contains the release notes for the
    <strong>Version 1.1</strong> build of the Struts Framework, for changes that
    have taken place since
    <a href="release-notes-1.1-rc2.html">Version 1.1 Release Candidate 2</a>
    was issued. For a complete list of changes since the last
    production release, see the <a href="#Introduction">Introduction</a> </p>

  </section>

<section name="Release Candidate/Beta Fixes" href="beta.Changes">

    <p>
        In RC2, the <strong>Commons-DBCP and Commons-Pool dependencies have been removed</strong>.
        These are replaced with a dependency on the
        <a href="http://archive.apache.org/dist/jakarta/struts/old/release/struts-legacy/">Struts-Legacy package</a>,
        containing the GenericDataSource and GenericConnection classes from Struts 1.0.2.
        These are distributed for J2SE 1.3 but may be recompiled for J2SE 1.4.
        Other DataSource implementations may be plugged in (recommended).
    </p>

    <p>
        Other changes since RC1 have been routine fixes and refactorings.
    </p>

    <p>
        <strong>OTHER CHANGES:</strong>
    </p>

    <p>
        <strong>Action package:</strong>
        Deprecated processActionForward() because ActionForward is a subclass of ForwardConfig so there's no reason we can't use processForwardConfig() instead.
        Updated to use processForwardConfig instead of deprecated processActionForward.
        Deprecated the rest of the Action constants in favor of Globals.
        Refactored some of initModuleConfig into a separate method and cleaned up.
        Improved exception handling in ActionServlet and RequestProcessor; generally, we limited the scope of try/catch blocks and caught specific exceptions rather than Throwable.
    </p>

    <p>
        <strong>Documentation:</strong>
        Document the &lt;html:html&gt; tag's locale attribute behaviour of creating a session if needed.
        Added note to validator section regarding the converNull servlet parameter and required validations of java.lang.Integer fields.
        Moved sites and consultants page to Struts Wiki.
        Other minor tweaks.
    </p>

    <p>
        <strong>EL package:</strong>
        Fixed mapping of "onkeypress" attribute.
        Separated "expr" attribute into "expr" and "exprValue", being the original attribute value and the evaluated value.
        Fixed probably long-standing bug in notMatch tag that made it behave identically to the "match" tag (instead of the reverse).

    </p>

    <p>
        <strong>Example applicattions:</strong>
        Added Multi-config files for the example app.
    </p>


    <p>
        <strong>Legacy package:</strong>
        Added package under contrib to host old GenericDataSource and GenericConnection classes.

    </p>
    <p>
        <strong>Taglibs packages:</strong>
        Fixed several import statements.
        Refactored converting a scope name into its integer constant into a new method RequestUtils.getScope(String), and changed the DefineTag, EmptyTag, and TagUtils classes to use the new method.
    </p>

    <p>
        <em>faces taglib.</em> Added early release to contrib area.
    </p>

    <p>
       <em>html taglib.</em>
       Reset the 'processed' flag at the beginning of each usage of the tag. Use a local copy of the 'name' attribute to avoid modifying the attribute value itself.
       Fixed references to static members.
       For FrameTag and HiddenTag, conform TLD with implementations.
       In ErrorsTag, render a platform-independent line ending instead of hard coded "\r\n".
       In JavaScriptValidatorTag, make the line-end generation platform independent so that Cactus tests work properly.
       In FormTag, refactored code into smaller reusable methods.
       In RewriteTag, encode the ampersand character in XHTML mode only, otherwise write the ampersand as is so the URL will work in JavaScript scripts.
       Refactored form bean initialization out of doStartTag() into its own method.
       Refactored doStartTag() 'if' statement to avoid having long nested 'if' logic.
       In ErrorTag, fixed formatting and deprecated unused defaultLocale variable.
       Refactored doStartTag() and doEndTag() into smaller methods.
       Moved xhtml check to RequestUtils instead of duplicating the logic in many different classes.
       Added lookupProperty() method to BaseHandlerTag because both RadioTag and TextareaTag used the same code.
       Refactored TextareaTag into smaller methods.
       In JavaScriptValidatorTag, replaced duplicated code with call to RequestUtils.retrieveUserLocale() and simplified an 'if' statement.
    </p>

    <p>
        <em>logic taglib.</em>
        Set 'iterator' to null in doEndTag() so that we release the iterator reference as early as possible. We cannot do the same for 'collection' since it is a tag attribute, and needs to remain unchanged to comply with the JSP spec.
        Don't create empty cookies array if null, just don't run the loop at all.
        In ForwardTag, remove unnecessary test for null.

    </p>

   <p>
       <em>nested tablibs.</em>
       Improved support for Tomcat 4.1.18.
       Replace EVAL_BODY_AGAIN with EVAL_BODY_TAG so that the code compiles against the JSP 1.1 API.
       Changed the &lt;nested:define&gt; tag's tei class to reference a new custom tei class for the nested tags.
   </p>

    <p>
        <em>tiles taglib.</em>
        Fixed references to static members.
        Deprecated outdated Tiles TextTag.
        For InsertTag, only include page if it's non-null.
        For InserTag, remove page check before including for more investigation.
    </p>

    <p>
        <strong>Test packages:</strong>
        Added several new tests for the bean, html, and logic taglibs to the suite setup at the tail-end of RC1.
        Note: We cannot resolve request.getServerPort() in the Cactus 1.4.x environment, so for now, our tests will only run on Cactus 1.3
    </p>

    <p>
        <strong>Tiles package:</strong>
        Deprecated TilesUtil.applicationClass() in favor of RequestUtils.applicationClass()
    </p>

    <p>
        <strong>Util package:</strong>
        retrieveUserLocale now uses the request.getLocale() method for finding the user's preferred locale.
        If user has not specified this with Accept-Language header, the server default locale is used.
        Change encodeURL() to not use reflection on every call.
        In RequestUtils, simplified separator logic in computeURL().
    </p>

    <p>
        <strong>Validator package:</strong>
        Deprecate logging methods and indicate that commons-logging should be used.
        Logic simplification and minor formatting fixes to Resources class.

    </p>

    <p>
        <strong>build files:</strong>
    </p>

    <ul>
        <li>
            (build.properties.sample) Add an entry for http-unit.
        </li>
        <li>
            Remove dependency on Commons Resources for Struts 1.1 release. (This migration will happen later).
        </li>
        <li>
            Make it possible to build Struts against the Servlet 2.4 and JSP 2.0 APIs, where the JSP classes have been pulled out into their own JAR file (jsp.jar). On an earlier platform, you can leave the "jsp.jar" property unset and thing will continue to operate as they have before.
        </li>

    </ul>


    <p>
        <strong>Bugzilla Problem Report fixes:</strong>
    </p>

    <ul>
        <li>
            Fixed #17312 - retrieveUserLocale throws exception without sessions.
        </li>
        <li>
           Fixed #17254 - If body text is empty and there's no resource key to lookup, display nothing in the option.
        </li>
        <li>
           Fixed #17371- The tag now uses RequestUtils.retrieveUserLocale for looking up the appropriate locale. Using that method protects us from needlessly creating a session.
        </li>
        <li>
           Fixed #17375 - Problem in ELErrorsTag because the "name" attribute of ErrorsTag has a non-null default value.
        </li>
        <li>
          Fixed #17622 - validator-rules.xml issues.
        </li>
        <li>
          Fixed #17299 - Set page variable from dyna map before validating.
        </li>
        <li>
          Fixed #17838 - Help debug specific user errors by showing quotes around the key that is in error (missing or mispelled).
        </li>
        <li>
          Fixed #17833 - validateShort and isAllDigits for negative numbers.
        </li>
        <li>
          Fixed #17328 - Synchronized loadLocale.
        </li>
        <li>
          Fixed #18018 - Changed field-* variables to camel case and no "-".
        </li>
        <li>
          Fixed #16548 - validateMinLength and validateMaxLength are now independent of the required check.
        </li>
        <li>
         Fixed #17389 - Splice in the I18nFactorySet.calculatePostixes from the attachment, rebuild, and ran the unit tests successfully.
        </li>
        <li>
         Fixed #17273 - Removed extra return statement (RequestUtils).
        </li>
        <li>
         Fixed #17592 - Tag should support a "naked" collection that is not a property of a bean.
        </li>
        <li>
         Fixed #17592 - Made "property" attribute of "optionsCollection" tag be not required, to match same change made for #17592 in base tag.
        </li>
        <li>
         Fixed #17562 - Change the InsertTag to let it use PageContext.include() instead of RequestDispatcher.include(). We are no back to the same mechanism used in the 1.1b3 release.
        </li>
        <li>
         Fixed #18186 - Use temp variable instead of overwriting tag attribute variable.
        </li>
        <li>
         Fixed #18394 - Changed error to info log if DefinitionsFactory is not supplied.
        </li>
        <li>
         Fixed #18538 - Changed shortname to "tiles".
        </li>
        <li>
         Fixed #18591 - Braces placement in message().
        </li>
        <li>
         Fixed #18018 - Don't output requiredif field* javascript variables because they're not used and break other validations.
        </li>
        <li>
         Fixed #18794 -Check ServletContext for ModuleConfig instead of request.
        </li>
        <li>
         Fixed #18864 - Changed Class-Path to conform to jar spec.  The previous patch fixing a bug in  WebLogic caused warnings in Resin.
        </li>
        <li>
         Fixed #18991 - Allow messages object passed to add(ActionMessages) to be null.
        </li>
        <li>
         Fixed #19040 -  Added null checks back to ActionServlet.
        </li>
        <li>
         Fixed #19157 - Implement Serializable in NestedReference.
        </li>
        <li>
         Fixed #18869 - Added display-name to web.xml files.
        </li>
        <li>
        Fixed #19223 - Synchronized token methods for PR.  Post 1.1 these methods should be moved to some kind of TokenProcessor class for reusability by other components such as the RequestProcessor (#16743).
        </li>
        <li>
         Fixed #19236 -  Added "action" attribute to "html-el:frame" tag.
        </li>
        <li>
         Fixed #11932 - Factored common code out of message() and present() into a new private method retrieveMessageResources.
        </li>
        <li>
         Fixed #11922 - Moved Action's token methods to this new class to fix synchronization issues and allow Action to be more focused.
        </li>
        <li>
         Fixed #19594 - Fixed minlength javascript for PR.  Also, removed password field checking from validateMask.
        </li>
        <li>
        Fixed #19773 - EmptyTag and added test to exercise-taglib webapp.
        </li>
        <li>
        Fixed #19835 - Add check against -1 to maxSize.
        </li>
        <li>
        Fixed #20034 - Call releaseInternal() in release() so if error occurs between begin/end of tag next user/request will not be working with old parameters.
        </li>
        <li>
        Fixed #20455 - validateRequiredIf() fails on Strings of whitespace.
        </li>
        <li>
        Fixed #20678 - Struts data-souce pingQuery parameter
        </li>
        <li>
        Fixed #20750 - RequestUtils.retrieveMessageResources (really an RC2 bug)
        </li>
        <li>
        Fixed #20835 - &lt;html:rewrite&gt; tag using page attribute bug
        </li>
        <li>
        Fixed #20877 - MessagesTag has incorrect assignment in release()
        </li>
        <li>
        Fixed #20949 - Tag &lt;html:select&gt; doesn't work well on RC2
        </li>
        <li>
        Fixed #21051 - javascript required validator accepts fields containing only whitespace
        </li>
        <li>
        Fixed #21119 - typo in struts-doc-config.xml
        </li>
    </ul>


</section>

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

    <p>The remainder of this document contains the release notes for
    <strong>1.1 Release Candidate 2</strong> build of the Struts Framework,
    and covers changes that have taken place since
    <a href="release-notes-1.0.2.html">Version 1.0.2</a>
    was released.  The following sections cover
    <a href="#New">New Features</a> and <a href="#Changes">Changes</a>
    to Struts.</p>

  </section>


  <section name="What's Included?" href="Included">

    <p>The binary distribution of this release includes the following
    files relevant to Struts:</p>
    <ul>
    <li><code>INSTALL</code> - Brief installation instructions.  See
        the <code>Struts Documentation Application</code>, or online at
        <a href="http://jakarta.apache.org/struts/">http://jakarta.apache.org/struts/</a>,
        for more information.</li>
    <li><code>LICENSE</code> - The Apache Software Foundation license that
        defines the terms under which you can use Struts (and other software
        licensed by Apache).</li>
    <li><code>README</code> - A brief introduction to Struts.</li>
    <li><code>lib/</code> - Directory containing files you will need in
        your own applications.  The individual files of interest are:
        <ul>
        <li><code>commons-*.jar</code> - Release packages from the
            <a href="http://jakarta.apache.org/commons/">Jakarta Commons
            Project</a> that Struts relies on.  You are welcome to use these
            classes in your own applications.  These JAR files should be
            copied into the <code>/WEB-INF/lib</code> directory of
            your web application. See below for the version of each
            Commons library that is included.</li>
        <li><code>struts.jar</code> - JAR file that contains the compiled
            Java classes of Struts.  You must
            place this file in the <code>/WEB-INF/lib</code> directory of
            your web application.</li>
        <li><code>struts-xxxxx.tld</code> - The tag library descriptor files
            for the Struts 1.1 tag libraries (bean, html, logic, and
            template).  You must place these files in the <code>/WEB-INF</code>
            directory of your web application, and reference them with
            appropriate <code>&lt;taglib&gt;</code> directives in your
            web.xml file.</li>
        <li><code>jdbc2_0-stdext.jar</code> - The JDBC 2.0 Optional Package
            API classes (package <code>javax.sql</code>).  You will need to
            include this file in the <code>/WEB-INF/lib</code> directory
            of your application, if it is not already made visible to web
            applications by your servlet container.</li>
        <li><code>struts-config_1_1.dtd</code> - The Document Type Definition
            (DTD) for the Struts 1.1 configuration file (which is typically named
            <code>/WEB-INF/struts-config.xml</code>).  Your configuration file
            will be validated against an internal copy of this DTD -- this
            copy is available for reference purposes only.</li>
        <li><code>struts-config_1_0.dtd</code> - The Document Type Definition
            (DTD) for the Struts 1.0 configuration file (which is typically named
            <code>/WEB-INF/struts-config.xml</code>).  Your configuration file
            will be validated against an internal copy of this DTD -- this
            copy is available for reference purposes only.</li>
        <li><code>web-app_2_2.dtd</code> - The Document Type Definition (DTD)
            for web.xml files conforming to the Servlet 2.2 specification.
            This copy is for reference purposes only.</li>
        <li><code>web-app_2_3.dtd</code> - The Document Type Definition (DTD)
            for web.xml files conforming to the Servlet 2.3 specification.
            This copy is for reference purposes only.</li>
        </ul></li>
    <li><code>webapps/</code> - Web Application Archive (WAR) files for the
        web applications that are included with Struts.</li>
    </ul>

    <p>The following Jakarta Commons libraries are included with this release
    of Struts:</p>
    <ul>
    <li>Commons BeanUtils 1.6.1</li>
    <li>Commons Collections 2.1</li>
    <li>Commons Digester 1.5</li>
    <li>Commons FileUpload 1.0</li>
    <li>Commons Lang 1.0.1</li>
    <li>Commons Logging 1.0.3</li>
    <li>Commons Validator 1.0.2</li>
    </ul>

  </section>

  <section name="What's New?" href="New">

    <p>Following are highlights of the new features. In the next section, we
    provide links to the JavaDocs for the affected classes.</p>

    <p><strong>New Configuration DTD</strong></p>
    <p> The Struts Configuration 1.0 DTD has been deprecated in favor of the
    <code><a href="http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">struts-config_1_1.dtd</a></code>.
    In the Struts 1.1 release, existing Struts configuration files can be
    loaded using either DTD version.
    </p>

    <p><strong>New Dependencies on Commons packages</strong></p>
    <p>Several components of Struts 1.0 have been found to be useful in
    general Java development (and not just useful for building Struts-based
    web applications), and have been migrated into the
    <a href="http://jakarta.apache.org/commons/">Jakarta Commons Project</a>.
    As a result, this release of Struts has been modified
    to rely on the Commons packages containing these classes, rather than the
    Struts internal versions.  In nearly every case, this involved changing
    only the <code>import</code> statements at the top of the classes.  Any
    of your applications that utilize these classes will need to be modified in
    the same way.  </p>
    <p>The following Commons packages contain the replacements for the
    corresponding Struts 1.0 classes:</p>
    <ul>
    <li><strong>BeanUtils Package</strong>
        [<a href="http://jakarta.apache.org/commons/beanutils.html"><code>org.apache.commons.beanutils</code></a>] -
        <code>org.apache.struts.utils.BeanUtils</code>,
        <code>org.apache.struts.utils.ConvertUtils</code>, and
        <code>org.apache.struts.utils.PropertyUtils</code>.</li>
    <li><strong>Collections Package</strong>
        [<a href="http://jakarta.apache.org/commons/collections.html"><code>org.apache.commons.collections</code></a>]  -
        <code>org.apache.struts.util.ArrayStack</code>,
        <code>org.apache.struts.util.FastArrayList</code>,
        <code>org.apache.struts.util.FastHashMap</code>,
        <code>org.apache.struts.util.FastTreeMap</code>.</li>
    <li><strong>Digester Package</strong> -
        [<a href="http://jakarta.apache.org/commons/digester.html"><code>org.apache.commons.digester</code></a>] -
        <code>org.apache.struts.digester.*</code>.</li>
    </ul>
    <p>The following Commons packages are also now used by various components
    of the Struts framework:</p>
    <ul>
    <li><strong>FileUpload Package</strong>
    [<a href="http://jakarta.apache.org/commons/fileupload/"><code>org.apache.commons.fileupload</code></a>]</li>
    <li><strong>Logging Package</strong>
    [<a href="http://jakarta.apache.org/commons/logging.html"><code>org.apache.commons.logging</code></a>]</li>
    <li><strong>Validator Package</strong>
    [<a href="http://jakarta.apache.org/commons/validator/"><code>org.apache.commons.validator</code></a>]</li>
    </ul>


    <p><strong>NOTE! XML Parser Prerequisite Updated</strong></p>

    <p>Struts now depends on an XML parser that conforms to the JAXP/1.1
    (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1
    reference implementation, and Xerces 1.3.1.</p>

    <p><strong>SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated</strong></p>
    <p>To build Struts from source Ant 1.4 or later is now required. This
    does not affect developers that use Struts from the binary distribution.</p>

    <p><strong>Struts Validator Integration</strong></p>
    <p>The new Commons Validator is now integrated with Struts and exposed
    through the new Validator package.</p>

    <p><strong>Tiles - An advanced templating taglib</strong></p>
    <p>The Tiles JSP assembly framework has been integrated with Struts.</p>

    <p><strong>Nested - An very cool taglib extension</strong></p>
    <p>The Nested taglib is bundled with Struts and enhances the functionality
     of the existing Struts tags.</p>

    <p><strong>New Example Applications</strong></p>
    <p>New example applications for the Validator and Tiles are now part
    of the Struts distribution.</p>

    <p><strong>New Contrib directory for optional components</strong></p>
    <p>A new directory (<code>contrib</code>) in the CVS source repository has
    been added to accumulate Struts add-on extensions that are generally
    useful but have not yet been integrated into the standard code base.</p>

    <ul>
    <li>Scaffold - An extension of the Commons Scaffold toolkit of reusable
    classes for building web applications.</li>
    <li>Struts-EL - The optional Struts-EL taglib makes it easy to use Struts
    with JSTL. (Container with Servlet 2.3 support required.)</li>
    </ul>

    <p>The source for these components is available in the Struts source
    distribution. Binary distributions may also be made available in the Struts
    download area. As optional components, these products have their own
    release cycles.</p>

    <p><strong>Action Package Additions</strong></p>
    <p>The following new features have been added to the basic controller
    framework [<code>org.apache.struts.action</code>]:</p>
    <ul>
    <li>The ActionServlet now provides support for modular Struts applications and
    sports several new extension points.</li>
    <li>The new <code>ActionMessages</code> class will support a superset of
        the capabilities of <code>ActionErrors</code>, and will be useful as
        a collection of general purpose messages, not just errors.</li>
    </ul>

    <p><strong>Upload Package Additions</strong></p>
    <p>The following new features have been added to the file upload classes
    [<code>org.apache.struts.upload</code>]:</p>
    <ul>
    <li><code>CommonsMultipartRequestHandler:</code> New class that implements
        file upload using the Jakarta Commons FileUpload package. This is now
        the default file upload implementation for Struts.</li>
    </ul>

    <p><strong>Util Package Additions</strong></p>
    <p>The following new features have been added to the utility classes
    [<code>org.apache.struts.util</code>]:</p>
    <ul>
    <li><code>LocalStrings:</code> Correct message regarding replaceable parameter so that it does not append an extraneous character.</li>
    <li><code>LabelValueBean:</code> New class that defines a collection of name/value pairs that can be used with the &lt;html:options&gt; and &lt;html:optionsCollection&gt; tags, and elsewhere.</li>
    <li><code>MessageResources:</code> Escape any single quote characters that are included in the specified message string.</li>
    <li><code>computeParameters:</code> Allow a transaction token to be the only parameter.</li>
    <li><code>RequestUtils:</code> Change to encode ampersands when building a query string.</li>
    </ul>

    <p><strong>Bean Taglib Package Additions</strong></p>
    <p>The following new features have been added to the
    <em>struts-bean</em> custom tag library
    [<code>org.apache.struts.taglib.bean</code>]:</p>
    <ul>
    <li><code>&lt;bean:write></code>: Add format, locale and bundle attributes to support formatting values according to current
    user locale, format string from attribute or format string from string resources.</li>
    <li><code>&lt;bean:cookie>, &lt;bean:header>, or &lt;bean:parameter>:</code> Correct the generated scripting variable type when tag is used with the "multiple" attribute.</li>
    <li><code>&lt;bean:message&gt;:</code> Added <code>name</code>, <code>property</code>, and  <code>scope</code> attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.</li>
    </ul>

    <p><strong>HTML Taglib Package Additions</strong></p>
    <p>The following new features have been added to the
    <em>struts-html</em> custom tag library [<code>org.apache.struts.taglib.html</code>]:</p>
    <ul>
    <li><code>&lt;html:link&gt;:</code> Added 'action' attribute.</li>
    <li><code>&lt;html:options&gt;:</code> If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.</li>
    <li><code>&lt;html:option&gt; and &lt;html:options&gt;:</code> Added 'style' and 'styleClass' attributes.</li>
    <li><code>&lt;html:optionsCollection&gt;:</code> New tag providing a cleaner way of populating HTML options from a collection.</li>
    <li><code>&lt;bean:message&gt;:</code> Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.</li>
    <li><code>&lt;html:messages&gt;:</code> New tag to iterate through a message collection in the new <code>ActionMessages</code> class.</li>
    <li><code>ActionForm:</code> Tag will now call <code>reset()</code> if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an <code>ActionForm</code> subclass. </li>
    <li><code>&lt;html:image>:</code> Added the 'align' attribute.</li>
    <li><code>&lt;html:img>:</code> Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').</li>
    <li><code>SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags:</code> Added indexed property. </li>
    </ul>

    <p><strong>Logic Taglib Package Additions</strong></p>
    <p>The following new features have been added to the
    <em>struts-logic</em> custom tag library [<code>org.apache.struts.taglib.logic</code>]:</p>
    <ul>
    <li><code>&lt;logic:empty&gt;</code> and
        <code>&lt;logic:notEmpty&gt;</code>: New tags that are similar to
        <code>&lt;logic:present&gt;</code> and
        <code>&lt;logic:notPresent&gt;</code> except for the treatment of
        empty strings.</li>
    </ul>

    <p><strong>Template Taglib Package Additions</strong></p>
    <p>The following new features have been added to the
    <em>struts-template</em> custom tag library
    [<code>org.apache.struts.taglib.template</code>]:</p>
    <ul>
    <li>None.</li>
    </ul>

    <p><strong>Documentation Additions</strong></p>
    <p>The following new features have been added to the Struts Documentation
    application (and corresponding contents on the Struts web site):</p>
    <ul>
    <li>Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.</li>
    <li>FAQ/HowTos: New documentation category organizes our FAQs and example-driven howTos.
    New HowTos include "Building Applications", "Using SSL", and using Struts with Eclipse or NetBeans.</li>
    <li>User Guide Preface: New section to overview the enabling technologies behind Struts.</li>
    <li>Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.</li>
    <li>HTML tag documentation: expanded to cover using indexed properties with iterate.</li>
    <li>Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.</li>
    <li>Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.</li>
    <li>Kickstart FAQ: The questions most likely to be asked when selecting Struts.</li>
    <li>1.0.2 JavaDoc: Added archival copy to web site for future reference.</li>
    <li>The UserGuide "Building" pages: General revisions to reflect new features and current practices.</li>
    <li>Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.</li>
    <li>JavaDocs: New <code>@since Struts 1.1</code> tag to indicate new packages, classes, and members added after the Struts 1.0.x version</li>
    </ul>

  </section>

  <section name="Operational Changes and Bug Fixes" href="Changes">

    <p><strong>Struts Configuration Changes</strong></p>
    <p>The following changes and bug fixes have occurred in the configuration
    files related to Struts:</p>
    <ul>
    <li>Deprecated (Struts 0.5) configuration file format: Remove support.</li>
    <li>Deprecated (Struts 0.5) methods: Remove from codebase.</li>
    </ul>
    <p><strong>Added Config Package</strong></p>
    <ul>
    <li>ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.</li>
    <li>ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.</li>
    <li>Added package to provide more flexibility in configuring the controller and to provide support for modular applications</li>
    </ul>
    <p><strong>Action Package Changes</strong></p>
    <p>The following changes and bug fixes have occurred in the basic
    controller framework (package <code>org.apache.struts.action</code>):</p>
    <ul>
    <li>All constants in the Action class: Deprecated in favor of equivalents in new Globals class.</li>
    <li>ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.</li>
    <li>ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).</li>
    <li>ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package. </li>
    <li>ActionForms and related classes: Now use a StringBuffer when responding to a toString request in order to conserve resources.</li>
    <li>LookupDispatchAction: Added standard Action to help select between internationalized buttons.</li>
    <li>ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.</li>
    <li>ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.</li>
    <li>Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.</li>
    <li>ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.</li>
    <li>ActionForm class: Now truly serializable, because
        the two non-serializable instance variables (servlet and
        multipartRequestHandler) have been made transient.  However, if you
        actually do serialize and deserialize such instances, it is your
        responsibility to reset these two properties.</li>
    <li>ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.</li>
    <li>processActionForward(): Deprecated in favor of processForwardConfig</li>
    </ul>

    <p><strong>Upload Package Changes</strong></p>
    <p>The following changes and bug fixes have occurred in the file upload
    package (package <code>org.apache.struts.upload</code>) [part of the Upload webapp]:</p>
    <ul>
    <li>CommonsMultipartRequestHandler: New implementation of file upload based
        on the Jakarta Commons FileUpload package. This new implementation is
        now the default.</li>
    <li>BufferedMultipartInputStream: Fixed lost byte problem.</li>
    <li>ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.</li>
    <li>Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.</li>
    <li>New line characters: Additional fix for file corruption problem with uploads and new line characters.</li>
    </ul>

    <p><strong>Utility Package Changes</strong></p>
    <p>The following changes and bug fixes have occurred in the utilities
    (package <code>org.apache.struts.util</code>):</p>
    <ul>
    <li>RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.</li>
    <li>GenericDataSource: Deprecated and modified to act as a thin wrapper around
    [<code>org.apache.commons.dbpc.BasicDataSource</code>].
    Replaced by direct use of BasicDataSource or other compatible component.</li>
    <li>RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.</li>
    <li>Added error message for the getActionErrors and getActionMessages method.</li>
    <li>getActionErrors and getActionMessages: Added methods to generate the correct corresponding
    object based on the object retrieved from request scope based on the key passed in.</li>
    <li>ActionErrors or ActionMessages: The logic for creating one of these objects has been moved
    to a utility method in RequestUtils.</li>
    <li>JspException message: Now generated in RequestUtils.</li>
    <li>ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.</li>
    </ul>

    <p><strong>Bean Taglib Package Changes</strong></p>
    <p>The following changes and bug fixes have occurred in the
    <em>struts-bean</em> custom tag library
    [<code>org.apache.struts.taglib.bean</code>]:</p>
    <ul>
    <li>&lt;html:errors&gt;: When the property tag is
    specified, errors are no longer printed if the specified property
    has no errors. Previously errors were always printed ! Future
    enhancements would include additional attributes to always turn
    off the header or footer. </li>
    <li>Made the remaining helper methods "protected" rather than
    "private".</li>
    </ul>

    <p><strong>HTML Taglib Package Changes</strong></p>
    <p>The following changes and bug fixes have occurred in the
    <em>struts-html</em> custom tag library (package
    <code>org.apache.struts.taglib.html</code>):</p>
    <ul>
    <li>FormTag: Fixed to exclude query string when identifying action mapping name.</li>
    <li>ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.</li>
    <li>MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.</li>
    <li>Errortag: defaultLocale method is deprecated as it is unused.</li>
    </ul>

    <p><strong>Logic Taglib Package Changes</strong></p>
    <p>The following changes and bug fixes have occurred in the
    <em>struts-logic</em> custom tag library (package
    <code>org.apache.struts.taglib.logic</code>):</p>
    <ul>
    <li>None.</li>
    </ul>

    <p><strong>Documentation Application Changes</strong></p>
    <p>The following changes and bug fixes to the Struts Documentation
    application (and corresponding contents on the Struts web site) have
    occurred:</p>
    <ul>
    <li>Reorganized Resources into separate pages..</li>
    <li>In the Tag Developers Guide, add more detail regarding file upload requirements.</li>
    <li>In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.</li>
    <li>In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.</li>
    <li>Tag library documentation: Moved under User's Guide.</li>
    <li>Reorganized to separate 1.0 material from nightly build material.</li>
    </ul>

    <p><strong>MailReader Example Application Changes</strong></p>
    <p>The following changes and bug fixes to the Struts MailReader Example Application
    have occurred:</p>
    <ul>
    <li>Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.</li>
    <li>Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.</li>
    <li>Remove references to saving database data from "tour" document, since this functionality was removed.</li>
    </ul>

    <p><strong>Template Example Application Changes</strong></p>
    <p>The following changes and bug fixes to the Struts Template Example
    Application have occurred:</p>
    <ul>
    <li>None.</li>
    </ul>

    <p><strong>Exercise Taglib Example Application Changes</strong></p>
    <p>The following changes and bug fixes to the Struts Exercise Taglib Example
    Application have occurred:</p>
    <ul>
    <li>Added test case for &lt;html:link&gt; using "action" attribute. </li>
    <li>Added test cases for &lt;html:select&gt; using &lt;html:options&gt; and
        &lt;html:optionsCollection&gt; based on a collection saved in the page context.</li>
    </ul>

  </section>

  <section name="What's different?" href="diff">

    <p>This section provides links to the Struts JavaDoc for any classes that have
    been added or deprecated since the Struts 1.0 release.
    </p>

    <p><strong>Previously deprecated classes and packages removed in Struts 1.1</strong></p>
    <ul>
    <li>Removed:
      <code>org.apache.struts.utils.BeanUtils</code>,
      <code>org.apache.struts.utils.ConvertUtils</code>, and
      <code>org.apache.struts.utils.PropertyUtils</code> - replaced by
      <a href ="http://jakarta.apache.org/commons/beanutils.html"><code>org.apache.commons.beanutils</code></a>
    </li>
    <li>Removed:
     <code>org.apache.struts.util.ArrayStack</code>,
     <code>org.apache.struts.util.FastArrayList</code>,
     <code>org.apache.struts.util.FastHashMap</code>,
     <code>org.apache.struts.util.FastTreeMap</code> - replaced by
     <a href ="http://jakarta.apache.org/commons/collections.html"><code>org.apache.commons.collections</code></a>
    </li>
    <li>Removed: <code>org.apache.struts.digester.*</code> - replaced by
    <a href ="http://jakarta.apache.org/commons/digester.html"><code>org.apache.commons.digester</code></a>
    </li>
    <li>Removed: The <code>struts-config.dtd</code> - Replaced by <a href="http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"><code>struts-config_1_1.dtd</code></a>.</li>
    <li>Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.</li>
    <li>Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.</li>
    </ul>

    <p><strong>Packages added in Struts 1.1</strong></p>

    <ul>
    <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/config/package-summary.html">config</a></li>
    <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/nested/package-summary.html">taglib.nested</a></li>
    <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/nested/bean/package-summary.html">taglib.nested.bean</a></li>
    <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/nested/html/package-summary.html">taglib.nested.html</a></li>
    <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/nested/logic/package-summary.html">taglib.nested.logic</a></li>
    <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/validator/package-summary.html">validator</a></li>
    </ul>

    <p><strong>Classes added in Struts 1.1</strong></p>
    <p>action</p>
    <ul>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/ActionMessage.html"> ActionMessage</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/ActionMessages.html"> ActionMessages</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/DynaActionForm.html"> DynaActionForm</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/DynaActionFormClass.html"> DynaActionFormClass</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/ExceptionHandler.html"> ExceptionHandler</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/RequestProcessor.html"> RequestProcessor</a></li>
    </ul>
    <p>actions</p>
    <ul>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/actions/LookupDispatchAction.html"> LookupDispatchAction</a></li>
    </ul>
    <p>taglib.html</p>
    <ul>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/html/FrameTag.html"> FrameTag</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/html/JavascriptValidatorTag.html"> JavascriptValidatorTag</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/html/MessagesTag.html">MessagesTag</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/html/OptionsCollectionTag.html"> OptionsCollectionTag</a></li>
    </ul>
    <p>taglib.logic</p>
    <ul>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/logic/EmptyTag.html"> EmptyTag</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/logic/MessagesNotPresentTag.html"> MessagesNotPresentTag</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/logic/MessagesPresentTag.html"> MessagesPresentTag</a></li>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/logic/NotEmptyTag.html"> NotEmptyTag</a></li>
    </ul>
    <p>upload</p>
    <ul>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/upload/CommonsMultipartRequestHandler.html"> CommonsMultipartRequestHandler</a></li>
    </ul>
    <p>util</p>
    <ul>
      <li><a href="http://jakarta.apache.org/struts/api/org/apache/struts/util/LabelValueBean.html"> LabelValueBean</a></li>
    </ul>
    <p><strong>Classes with members added in Struts 1.1</strong></p>
    <p><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/Action.html">action.Action</a></p>
    <ul>
      <li>ACTION_SERVLET_KEY</li>
      <li>APPLICATION_KEY</li>
      <li>MESSAGE_KEY</li>
      <li>PLUG_INS_KEY</li>
      <li>REQUEST_PROCESSOR_KEY</li>
      <li>execute</li>
      <li>getResources(javax.servlet.http.HttpServletRequest)</li>
      <li>saveMessages</li>
    </ul>
    <p><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/ActionServlet.html">action.A</a><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/ActionServlet.html">ctionServlet</a></p>
    <ul>
      <li>configDigester</li>
      <li>convertHack</li>
      <li>log</li>
      <li>processor</li>
      <li>getInternal</li>
      <li>destroyApplications</li>
      <li>destroyConfigDigester</li>
      <li>getApplicationConfig</li>
      <li>getRequestProcessor</li>
      <li>initApplicationConfig</li>
      <li>initApplicationDataSources</li>
      <li>initApplicationPlugIns</li>
      <li>initApplicationMessageResources</li>
      <li>initConfigDigester</li>
      <li>methods created for backward-compatiblity only
        <ul>
          <li>defaultControllerConfig</li>
          <li>defaultFormBeansConfig</li>
          <li>defaultForwardsConfig</li>
          <li>defaultMappingsConfig</li>
          <li>defaultMessageResourcesConfig</li>
        </ul>
      </li>
    </ul>
    <p><a href="http://jakarta.apache.org/struts/api/org/apache/struts/taglib/html/BaseHandlerTag.html">taglib.html.BaseHandlerTag</a></p>
    <ul>
      <li>indexed</li>
      <li>setIndexed</li>
      <li>getIndexed</li>
    </ul>
    <p><strong>Classes deprecated between Struts 1.0 and Struts 1.1</strong></p>
    <p>action</p>
    <ul>
      <li>ActionException</li>
      <li>ActionFormBeans</li>
      <li>ActionForwards</li>
      <li>ActionMappings</li>
    </ul>
    <p><strong>Classes with members deprecated between Struts 1.0 and Struts 1.1</strong></p>
    <p><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/Action.html">action.Action</a></p>

    <ul>
      <li>FORM_BEANS_KEY</li>
      <li>FORWARDS_KEY</li>
      <li>MAPPINGS_KEY</li>
      <li>getResources()</li>
      <li>perform</li>
    </ul>
    <p><a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/ActionServlet.html">ActionServlet</a></p>
    <ul>
      <li>findDataSource</li>
      <li>findFormBean</li>
      <li>findForward</li>
      <li>findMapping</li>
      <li>initDataSources</li>
      <li>methods created for backward-compatiblity only
        <ul>
          <li>defaultControllerConfig</li>
          <li>defaultFormBeansConfig</li>
          <li>defaultForwardsConfig</li>
          <li>defaultMappingsConfig</li>
          <li>defaultMessageResourcesConfig</li>
        </ul>
      </li>
    </ul>

</section>

<section>
    <p class="right">
    Next: <a href="installation.html">Installation</a>
    </p>
</section>


    </body>

</document>
