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

  <properties>
    <title>Struts Release Notes (Version 1.0-beta-3)</title>
  </properties>

  <body>

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

    <p>This document contains the release notes for
    <strong>Version 1.0-beta-3</strong> of the Struts Framework,
    and covers changes that have taken place since
    <a href="release-notes-1.0-b2.html">Version 1.0-beta-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 1.0:</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>struts.jar</code> - JAR file that contains the compiled
            Java classes for both version 0.5 and 1.0 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.0 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.  <strong>NOTE</strong> - The struts-form.tld
            file is deprecated; you should use the struts-html.tld file
            instead.</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_0.dtd</code> - The document type descriptor
            (DTD) for the Struts 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 descriptor (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 descriptor (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>For backwards compatibility only, the binary distribution also
    includes the following files that conform to the Struts 0.5 milestone
    release APIs.  Usage of these files and APIs is deprecated, and they
    will be removed from releases after Struts 1.0:</p>
    <ul>
    <li><code>lib/</code> - Directory containing files you will need in
        your own applications.  The individual files of interest are:
        <ul>
        <li><code>struts.jar</code> - JAR file that contains the compiled
            Java classes for both version 0.5 and 1.0 of Struts.  You must
            place this file in the <code>/WEB-INF/lib</code> directory of
            your web application.</li>
        <li><code>struts.tld</code> - The tag library descriptor file for
            the 0.5 version of the Struts tags.  You must place this file
            in the <code>/WEB-INF</code> directory of your web application,
            and reference it with appropriate <code>&lt;taglib&gt;</code>
            directives in your web.xml file.</li>
        </ul></li>
    </ul>

  </section>


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

    <p><strong>DEPRECATIONS</strong> - The entire custom tag library
    that is documented in <code>struts.tld</code> has been deprecated.
    These tags correspond to the Struts 0.5 functionality that is also
    deprecated, and have been replaced (and considerably enhanced) in
    the various individual tag libraries.</p>

    <p><strong>DEPRECATIONS</strong> - The entire custom tag library
    that is documented in <code>struts-form.tld</code> has been deprecated
    because this library has been renamed <code>struts-html.tld</code>
    instead.</p>

    <p><strong>DEPRECATIONS</strong> - Several classes in the
    <code>org.apache.struts.util</code> package have been marked as
    deprecated in their entirety, because they will be replaced by
    versions from the Jakarta Commons project once those packages are
    released.  These deprecated classes will <strong>not</strong> be
    removed until a release after Struts 1.1.  In general, the only
    change required inside user code using these classes will be to
    update the <code>import</code> statement.  The following classes
    are involved:</p>
    <ul>
    <li>ArrayStack</li>
    <li>BeanUtils</li>
    <li>ConvertUtils</li>
    <li>FastArrayList</li>
    <li>FastHashMap</li>
    <li>FastTreeMap</li>
    <li>GenericConnection</li>
    <li>GenericDataSource</li>
    <li>PropertyUtils</li>
    </ul>

    <p>The following new features have been added to the basic controller
    framework (package <code>org.apache.struts.action</code>):</p>

    <p>The following new features have been added to the utility classes
    (package <code>org.apache.struts.util</code>):</p>
    <ul>
    <li><code>GenericDataSource</code> can now be configured with a "ping"
        type command (via the <code>pingCommand</code> and
        <code>pingQuery</code> properties) that will be executed before
        returning a connection from <code>getConnection()</code>.  This
        can be used to detect stale connections due to timeouts or a
        database server restart.  If the ping command fails, the corresponding
        connection will be thrown away, and a new one allocated.</li>
    </ul>


    <p>The following new features have been added to the
    <em>struts-html</em> custom tag library (package
    <code>org.apache.struts.taglib.html</code>):</p>
    <ul>
    <li>It is now possible to use any object in the values and labels
        collections for the <code>&lt;html:options&gt;</code> tag.</li>
    <li>Added the missing <code>tabindex</code> attribute to the
        <code>&lt;html:radio&gt;</code> tag.</li>
    <li>On the <code>&lt;html:img&gt;</code>, <code>&lt;html:link&gt;</code>,
        and <code>&lt;html:rewrite&gt;</code> tags, you can now specify
        arbitrary object values in the <code>Map</code> used to include
        dynamic request attributes, as long as the <code>toString()</code>
        method renders the values appropriately.</li>
    <li>In all cases where "minimized" attributes were being generated
        (<code>checked</code>, <code>disabled</code>, <code>multiple</code>,
        <code>readonly</code>, and <code>selected</code>), the generated
        attribute has a value (such as <code>selected="true"</code>) for
        XML syntax compatibility.</li>
    </ul>

    <p>The following new features have been added to the
    <em>struts-logic</em> custom tag library (package
    <code>org.apache.struts.taglib.logic</code>):</p>

    <p>The following new features have been added to the
    <em>struts-template</em> custom tag library (package
    <code>org.apache.struts.taglib.template</code>):</p>

    <p>The following new features have been added to the Struts Documentation
    application (and corresponding contents on the Struts web site):</p>


  </section>


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

    <p>The following changes and bug fixes have occurred in the configuration
    files related to Struts:</p>
    <ul>
    <li>The DTD for <code>struts-config.xml</code> files had an incorrect
        ENTITY declaration for the <code>Location</code> element.</li>
    <li>The DTD for version 2.3 web application deployment descriptors has
        been updated to the most recent (Proposed Final Draft 2) version.</li>
    </ul>

    <p>The following changes and bug fixes have occurred in the basic
    controller framework (package <code>org.apache.struts.action</code>):</p>


    <p>The following changes and bug fixes have occurred in the utilities
    (package <code>org.apache.struts.util</code>):</p>
    <ul>
    <li>The <code>FastArrayMap()</code>, <code>FastHashMap()</code>, and
        <code>FastTreeMap()</code> classes not correctly implement the
        <code>clone()</code>, <code>equals()</code>, and
        <code>hashCode()</code> methods consistent with the requirements
        of the Java standard Collections APIs.</li>
    <li><code>PropertyUtils</code> can now access public methods defined
        in nested interfaces.</li>
    <li>A misleading error message returned by <code>BeanUtils</code>
        has been corrected.</li>
    <li>Work around a problem compiling the <code>FastXxxxx</code> classes
        with the VAJ compiler, because the superclass already includes a
        private class named <code>Iterator</code>.</li>
    <li>Remove a JDK 1.3 dependency that prevented compiling
        <code>BeanUtils</code> under JDK 1.2.</li>
    <li>Generate "&amp;amp;" instead of "&amp;" in query strings that
        contain more than one name/value pair.</li>
    </ul>

    <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>Restore the ability of the <code>&lt;html:button&gt;</code> tag to
        retrieve the button text from the nested body content (so that it
        can be easily internationalized).</li>
    <li>If the property name used in the <code>labelProperty</code>
        attribute of an <code>&lt;html:options&gt;</code> tag is invalid,
        report the correct property name in the error message.</li>
    </ul>

    <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>


    <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>Fix a reference to an old Struts 0.5 tag in one of the User's Guide
        examples.</li>
    <li>Fix the stylesheet used to transform XML into HTML documentation so
        that nested <code>&lt;body&gt;</code> tags are not created.</li>
    <li>The DTD for Struts configuration files has been refined to highlight
        the fact that you should use <code>&lt;set-property&gt;</code>
        elements to configure your data source implementation.</li>
    </ul>

    <p>The following changes and bug fixes to the Struts Example Application
    have occurred:</p>


    <p>The following changes and bug fixes to the Struts Template Example
    Application have occurred:</p>


  </section>


  </body>

</document>
