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

  <properties>
    <author>Craig R. McClanahan</author>
    <author>Robert Leland</author>
    <author>Ted Husted</author>
    <title>Struts Release Notes (current nightly build)</title>
  </properties>

  <body>

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

    <p>This document contains the release notes for
    <strong>Version 1.1 Beta 1</strong> of the Struts Framework,
    and covers changes that have taken place since
    <a href="release-notes-1.0.1.html">Version 1.0.1</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.</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.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_1.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>

  </section>


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

    <p><strong>DEPRECATIONS</strong>:</p>
    <ul>
    <li><code>struts-config.dtd</code> in favor of <code>struts-config_1_1.dtd</code>.</li>
    </ul>

    <p><strong>COMMONS PACKAGES</strong>:
    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, the current development version 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 your classes.  Any
    applications that utilize these classes will need to be modified in the
    same way.  The following Commons packages contain the replacements for the
    corresponding Struts 1.0 classes:</p>
    <ul>
    <li><strong>BeanUtils Package</strong> (org.apache.commons.beanutils) -
        <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>
        (org.apache.commons.collections) -
        <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> -
        (org.apache.commons.digester) -
        <code>org.apache.struts.digester.*</code>.</li>
    </ul>

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

    <p><strong>CONTRIB Directory</strong>:
    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>ValidatorForm - Client and Server-side validation library.</li>
    <li>Tiles - Advanced templating library (see Struts-Tiles.war).</li>
    <li>Service Manager - Add custom services without subclassing controller.</li>
    </ul>

    <p><strong>UNIT TESTING SUPPORT</strong>:  Support for running unit tests
    on Struts components and custom tags is being added, utilizing the
    <a href="http://jakarta.apache.org/cactus/">Jakarta Cactus</a> product.</p>

    <p>The following new features have been added to the basic controller
    framework (package <code>org.apache.struts.action</code>):</p>
    <ul>
    <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>The following new features have been added to the utility classes
    (package <code>org.apache.struts.util</code>):</p>
    <ul>
    <li>LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.</li>
    <li>Add LabelValueBean class. This defines a collection of name/value pairs that can be used with the &lt;html:options&gt; tag, and elsewhere.</li>
    <li>MessageResources: Escape any single quote characters that are included in the specified message string.</li>
    <li>Allow a transaction token to be the only parameter in computeParameters().</li>
    <li>Change RequestUtils to encode ampersands when building a query string.</li>
    </ul>

    <p>The following new features have been added to the
    <em>struts-bean</em> custom tag library (package
    <code>org.apache.struts.taglib.bean</code>):</p>
    <ul>
    <li>Add format, locale and bundle attributes to bean:write to support values formatting according to current
user locale, format string from attribute or format string from string resources.</li>
    <li>Correct the generated scripting variable type when the &lt;bean:cookie>, &lt;bean:header>, or &lt;bean:parameter> tag is used with the "multiple" attribute.</li>
    <li>Added <code>name</code>, <code>property</code>, and
        <code>scope</code> attributes to the <code>&lt;bean:message&gt;</code>
        tag, so that the message source key can be obtained dynamically from
        a bean or bean property.</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>On the Options tag, if the property specified by the "property" attribute returns null, it now throws an error message that indicates what the real problem is, rather than causing an NPE.</li>
    <li>Added 'style' and 'styleClass' attributes for &lt;html:option&gt; and &lt;html:options&gt; tags.</li>
    <li>Added 'name', 'property' and 'scope' attributes to
        <code>&lt;bean:message&gt;</code> so that
        the message resource key can be obtained dynamically from a bean.</li>
    <li>Added a new <code>&lt;html:messages&gt;</code> tag to iterate through
        a message collection in the new <code>ActionMessages</code> class.</li>
    <li><code>ActionForm</code> will now call <code>reset()</code> if it 
        instantiates the ActionForm bean.</li>
    <li>Added indexed property to the SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea.Tag.</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>
    <ul>
    <li>Added <code>&lt;logic:empty&gt;</code> and
        <code>&lt;logic:notEmpty&gt;</code> tags, which 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>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>
    <ul>
    <li>None.</li>
    </ul>

    <p>The following new features have been added to the Struts Documentation
    application (and corresponding contents on the Struts web site):</p>
    <ul>
    <li>Move Tag Library documentation into User's Guide.</li>
    <li>Added Kickstart FAQ.</li>
    <li>Added Reference copy of 1.0 JavaDoc.</li>
    <li>Revised the example page in the User's Guide (Building View Components) to reflect current practice.</li>
    <li>Revised installation instructions for SilverStream and Resin.</li>
    </ul>

  </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>Remove deprecated support for the old (Struts 0.5) configuration file
  format.</li>
    </ul>
    <p>The following changes and bug fixes have occurred in the basic
    controller framework (package <code>org.apache.struts.action</code>):</p>
    <ul>
    <li>Add InvokeAction and CreateActionForm methods to allow direct chaining of Actions.</li>
    <li>Add ContextHelper to expose framework elements to alternate presentation layers.</li>
    <li>ActionForms and related classes now use a StringBuffer when responding a toString request in order to conserve resources.</li>
    <li>Add standard LookupDispatchAction to help select between internationalized buttons.</li>
    <li>Modify ActionForm class to use ActionServletWrapper rather than expose ActionServlet.</li>
    <li>Add ActionServletWrapper class. Used by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.</li>
    <li>Unconditionally pass the selected mapping as a request attribute under key Action.MAPPING_KEY, even if no form bean is specified.</li>
    <li>Avoid a NullPointerException in corner cases caused by failed initialization of ActionServlet.</li>
    <li>The <code>ActionForm</code> class is 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>Removed deprecated Struts 0.5 methods, and support for the Struts 0.5
        configuration file format.</li>
    <li>The initial order a property/key is added in is now maintained by ActionMessages class.</li>
    </ul>

    <p>The following changes and bug fixes have occurred in the file upload
    package (package <code>org.apache.struts.upload</code>):</p>
    <ul>
    <li>Correct MultiboxTagdoAfterBody() to return SKIP_BODY instead of SKIP_PAGE.</li>
    <li>Fixed lost byte problem in BufferedMultipartInputStream</li>
    <li>Fixed ArrayIndexOutOfBoundsException situations</li>
    <li>Better reporting for premature closing of input streams while reading
multipart requests.</li>
    <li>Additional fix for file corruption problem with uploads and new line characters.</li>
    </ul>

    <p>The following changes and bug fixes have occurred in the utilities
    (package <code>org.apache.struts.util</code>):</p>
    <ul>
    <li>Modify RequestUtils class to use ActionServletWrapper rather than expose ActionServlet.</li>
    <li>Added error message for the getActionErrors and getActionMessages method.</li>
    <li>Added a getActionErrors and getActionMessages methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.</li>
    <li>The logic for creating an ActionErrors or ActionMessages object has been moved to a utility method in RequestUtils. The JspException message is also generated in RequestUtils.</li>
    <li><code>ConvertUtils.convertCharacter()</code> will now detect empty strings and return the default value.</li>
    </ul>

    <p>The following changes and bug fixes have occurred in the
    <em>struts-bean</em> custom tag library (package
    <code>org.apache.struts.taglib.bean</code>):</p>
    <ul>
    <li>The <code>&lt;html:errors&gt;</code> 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>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>Fixed FormTag to exclude query string when identifying action mapping name.</li>
    <li>Added the 'align' attribute to the &lt;html:image> tag.</li>
    <li>Added indexed attribute to ImageTag, RadioTag, and TextAreaTag.</li>
    <li>Added MessagesTag.</li>
    <li>Correctly URLEncode the query string parameter value on ImgTag, even if there is only a single parameter.</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>
    <ul>
    <li>None.</li>
    </ul>

    <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>In the HTML tag documentation, expand to cover using indexed properties with iterate.</li>
    <li>Add installation notes for Jetty.</li>
    <li>In the Tag Developers Guide, add more detail regarding file upload requirements.</li>
    <li>In the Introduction, added references to basic background material.</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>Reorganized to separate 1.0 material from nightly build material.</li>
    <li>Expanded Resources section.</li>
    <li>Various updates regarding other release notes.</li>
    </ul>

    <p>The following changes and bug fixes to the Struts 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>The following changes and bug fixes to the Struts Template Example
    Application have occurred:</p>
    <ul>
    <li>None.</li>
    </ul> 

    <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:select> using &lt;html:options> based on a collection
  saved in the page context.</li>
    </ul> 

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

</section>  

    </body>

</document>
