<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
  <meta http-equiv="Content-Language" content="en"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

  <title>Announcements 2006</title>

  <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
  <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
  <link href="/css/main.css" rel="stylesheet">
  <link href="/css/custom.css" rel="stylesheet">
  <link href="/highlighter/github-theme.css" rel="stylesheet">

  <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
  <script type="text/javascript" src="/js/community.js"></script>
</head>
<body>

<a href="http://github.com/apache/struts" class="github-ribbon">
  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
</a>

<header>
  <nav>
    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
            Menu
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
        </div>
        <div id="struts-menu" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Home<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/index.html">Welcome</a></li>
                <li><a href="/download.cgi">Download</a></li>
                <li><a href="/releases.html">Releases</a></li>
                <li><a href="/announce-2021.html">Announcements</a></li>
                <li><a href="http://www.apache.org/licenses/">License</a></li>
                <li><a href="https://www.apache.org/foundation/thanks.html">Thanks!</a></li>
                <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Support<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/mail.html">User Mailing List</a></li>
                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
                <li><a href="/security.html">Reporting Security Issues</a></li>
                <li class="divider"></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Migration+Guide">Version Notes</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Security+Bulletins">Security Bulletins</a></li>
                <li class="divider"></li>
                <li><a href="/maven/project-info.html">Maven Project Info</a></li>
                <li><a href="/maven/struts2-core/dependencies.html">Struts Core Dependencies</a></li>
                <li><a href="/maven/struts2-plugins/modules.html">Plugin Dependencies</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Documentation<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/birdseye.html">Birds Eye</a></li>
                <li><a href="/primer.html">Key Technologies</a></li>
                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
                <li class="divider"></li>
                <li><a href="/getting-started/">Getting Started</a></li>
                <li><a href="/security/">Security Guide</a></li>
                <li><a href="/core-developers/">Core Developers Guide</a></li>
                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
                <li><a href="/plugins/">Plugins</a></li>
                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
                <li><a href="/tag-developers/tag-reference.html">Tag reference</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/FAQs">FAQs</a></li>
                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Contributing<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/youatstruts.html">You at Struts</a></li>
                <li><a href="/helping.html">How to Help FAQ</a></li>
                <li><a href="/dev-mail.html">Development Lists</a></li>
                <li><a href="/contributors/">Contributors Guide</a></li>
                <li class="divider"></li>
                <li><a href="/submitting-patches.html">Submitting patches</a></li>
                <li><a href="/builds.html">Source Code and Builds</a></li>
                <li><a href="/coding-standards.html">Coding standards</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Contributors+Guide">Contributors Guide</a></li>
                <li class="divider"></li>
                <li><a href="/release-guidelines.html">Release Guidelines</a></li>
                <li><a href="/bylaws.html">PMC Charter</a></li>
                <li><a href="/volunteers.html">Volunteers</a></li>
                <li><a href="https://gitbox.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
                <li><a href="/updating-website.html">Updating the website</a></li>
              </ul>
            </li>
            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
          </ul>
        </div>
      </div>
    </div>
  </nav>
</header>


<article class="container">
  <section class="col-md-12">
    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/announce-2006.html" title="Edit this page on GitHub">Edit on GitHub</a>
    
    <h1>Announcements - 2006</h1>

<p class="pull-right">
  Skip to: <a href="announce-2005.html">Announcements - 2005</a>
</p>

<h4 id="a20061107">07 Nov 2006 - Struts v2.0.1 BETA Release</h4>

<p>
  The Apache Struts project is pleased to announce the availability of
  the <a href="http://struts.apache.org/download.cgi#struts201">
  Struts 2.0.1 BETA release</a>.
</p>

<p>
  Apache Struts 2 is an elegant, extensible framework, well suited for
  enterprise-ready Java web applications.
  The framework is designed to streamline the full development cycle,
  from building, to deploying, to maintaining applications over time.
</p>

<p>
  Apache Struts 2 was originally known as WebWork 2.
  After working independently for several years,
  the WebWork and Struts communities joined forces to create Struts<sup>2</sup>.
  This new version of Struts is simpler to use and closer to how
  Struts was always meant to be.
</p>

<ul>
  <li>
    <em>Build!</em>
    <ul>
      <li>
        <strong>Easy startup</strong> - A Maven archetype, template application, and bootstrap
        tutorial help jumpstart new projects.
      </li>
      <li>
        <strong>Improved Design</strong> - All framework classes are based on interfaces.
        Core interfaces are HTTP independent.
      </li>
      <li>
        <strong>Enhanced Results</strong> - Unlike ActionForwards, Struts<sup>2</sup> Results can
        actually help prepare the response.
      </li>
      <li>
        <strong>Enhanced Tags</strong> - Struts<sup>2</sup> tags don't just output data, but provide
        stylesheet-driven markup, so that we can create consistent pages with less code.
      </li>
      <li>
        <strong>Stateful Checkboxes</strong> - Struts<sup>2</sup> checkboxes do not require special
        handling for false values.
      </li>
      <li>
        <strong>Easy cancel handling</strong> - The Struts<sup>2</sup> Cancel button can go directly to
        a different action.
      </li>
      <li>
        <strong>POJO forms</strong> - No more ActionForms! We can use any JavaBean we like or
        put properties directly on our Action classes. No need to use all String properties!
      </li>
      <li>
        <strong>POJO Actions</strong> - Any class can be used as an Action class. Even the
        interface is optional!
      </li>
      <li>
        <strong>Easy Spring integration</strong> - Struts<sup>2</sup> Actions are Spring-aware. Just
        add Spring beans!
      </li>
      <li>
        <strong>First-class AJAX support</strong> - The AJAX theme gives interactive
        applications a boost.
      </li>
    </ul>
  </li>

  <li>
    <em>Deploy!</em>
    <ul>
      <li>
        <strong>QuickStart</strong> - Configuration files are reloadable so many changes
        can be made on the fly without restarting a web container.
      </li>
      <li>
        <strong>Easy plugins</strong> - Framework extensions can be added by dropping in a JAR.
        No manual configuration required! Bundled plugins add support for JavaServer Faces,
        JasperReports, JFreeChart, Tiles, and more ...
      </li>
      <li>
        <strong>Easy portlets</strong> - Automatic portlet support allows portal and servlet
        deployments with no code changes.
      </li>

    </ul>
  </li>
  <li>
    <em>Maintain!</em>
    <ul>
      <li>
        <strong>Easy-to-test Actions</strong> - Struts<sup>2</sup> Actions are HTTP independent and
        can be tested without resorting to mock objects.
      </li>
      <li>
        <strong>Intelligent Defaults</strong> - Most framework configuration elements have a default
        value that we can set and forget.
      </li>
      <li>
        <strong>Easy-to-customize controller</strong> - Struts 1 lets us customize the request
        processor per module, Struts<sup>2</sup> lets us customize the request handling
        per action, if desired.
      </li>
      <li>
        <strong>Easy-to-tweak tags</strong> - Struts<sup>2</sup> tag markup can be altered by changing
        an underlying stylesheet. Individual tag markup can be changed by
        editing a FreeMarker template. No need to grok the taglib API!
        <em>JSP, FreeMarker, and Velocity tags are fully supported.</em>
      </li>
      <li>
        <strong>Integrating Debugging</strong> - Built-in debugging tools supporting profiling,
        problem reports, and interactive object model queries.
      </li>
    </ul>
  </li>
</ul>
<p>
  For more,
  <a href="http://struts.apache.org/2.x/">
    visit the Apache Struts 2 website.
  </a>
</p>
<hr/>


<h4 id="a20061020.1">20 Oct 2006 - New Struts Committer: David DeWolf</h4>
<p>
  Please join us in welcoming David DeWolf as a new Struts committer.
</p>
<p>
  David is a FTP Server and Portals committer, and has been submitting
  high quality Struts and Tiles patches since April. As a member of the
  JSR-286 Expert Group and
  <a href="http://portals.apache.org/pluto">Apache Pluto</a> project
  David brings invaluable Portals experience to the Struts team.
</p>
<p>
  Welcome, David ... and in Don's words <i>"now you can commit your
  own dam patches!"</i>
</p>
<p>
  PMC vote: 9 +1.
</p>
<hr/>

<h4 id="a20061010">10 Oct 2006 - Struts v2.0.1 Development Build</h4>

<p>
  The Apache Struts project is pleased to announce the availability of
  the <a href="http://struts.apache.org/download.cgi#struts201">
  Struts 2.0.1 development build</a>.
</p>

<p>
  Struts 2 was originally known as WebWork 2. After working independently
  for several years, the WebWork and Struts communities joined forces to
  create Struts 2. This new version of Struts is designed to be simpler to
  use and closer to how Struts was always meant to be. Some key changes are:
</p>

<ul>
  <li>
    <em>Smarter!</em>
    <ul>
      <li>
        <strong>Improved Design</strong> - All Struts 2 classes are based on interfaces.
        Core interfaces are HTTP independent.
      </li>
      <li>
        <strong>Intelligent Defaults</strong> - Most configuration elements have a default
        value that we can set and forget.
      </li>
      <li>
        <strong>Enhanced Results</strong> - Unlike ActionForwards, Struts 2 Results can
        actually help prepare the response.
      </li>
      <li>
        <strong>Enhanced Tags</strong> - Struts 2 tags don't just output data, but provide
        stylesheet-driven markup, so that we can create consistent pages
        with less code.
      </li>
      <li>
        <strong>First-class AJAX support</strong> - The AJAX theme gives interactive
        applications a significant boost.
      </li>
      <li>
        <strong>Stateful Checkboxes</strong> - Struts 2 checkboxes do not require special
        handling for false values.
      </li>
      <li>
        <strong>QuickStart</strong> - Many changes can be made on the fly without restarting
        a web container.
      </li>
    </ul>
  </li>
  <li>
    <em>Easier!</em>
    <ul>
      <li>
        <strong>Easy-to-test Actions</strong> - Struts 2 Actions are HTTP independent and
        can be tested without resorting to mock objects.
      </li>
      <li>
        <strong>Easy-to-customize controller</strong> - Struts 1 lets us customize the request
        processor per module, Struts 2 lets us customize the request handling
        per action, if desired.
      </li>
      <li>
        <strong>Easy-to-tweak tags</strong> - Struts 2 tag markup can be altered by changing
        an underlying stylesheet. Individual tag markup can be changed by
        editing a FreeMarker template. No need to grok the taglib API! Both
        JSP and FreeMarker tags are fully supported.
      </li>
      <li>
        <strong>Easy cancel handling</strong> - The Struts 2 Cancel button can go directly to
        a different action.
      </li>
      <li>
        <strong>Easy Spring integration</strong> - Struts 2 Actions are Spring-aware. Just
        add Spring beans!
      </li>
      <li>
        <strong>Easy plugins</strong> - Struts 2 extensions can be added by dropping in a JAR.
        No manual configuration required!
      </li>
    </ul>
  </li>
  <li>
    <em>POJO-ier!</em>
    <ul>
      <li>
        <strong>POJO forms</strong> - No more ActionForms! We can use any JavaBean we like or
        put properties directly on our Action classes. No need to use all
        String properties!
      </li>
      <li>
        <strong>POJO Actions</strong> - Any class can be used as an Action class. We don't
        even have to implement an interface!
      </li>
    </ul>
  </li>
</ul>
<p>
  For more, <a href="http://struts.apache.org/2.x/index.html">visit the Apache Struts 2 site.</a>
</p>

<hr/>

<h4 id="a20060818.1">18 Aug 2006 - Struts v1.3.5 Beta</h4>

<p>The Apache Struts team is pleased to announce the release of Struts 1.3.5 Beta.</p>

<p>Struts 1.3.5 is available in a full distribution, or as separate library, source, example and
  documentation distributions.</p>

<p><a href="http://struts.apache.org/download.cgi#struts135">
  http://struts.apache.org/download.cgi#struts135</a></p>

<p>It is also available in the central Maven repository under Group ID
  "org.apache.struts".</p>

<p>Major changes since Struts 1.2 include</p>

<ul>
  <li>Composable Request Processor</li>
  <li>Arbitrary configuration properties</li>
  <li>Opt-In Cancel Handling</li>
  <li>Enhanced Global Exception Handlers</li>
  <li>Extends attribute</li>
  <li>"isCommitted" Exception Handling</li>
  <li>Postback Actions</li>
  <li>Wildcard ActionConfig properties</li>
</ul>

<p>Composable Request Processor: For Struts 1.3, we turned the request processor methods into Commands that
  are part of a flexible Chain of Commands.</p>

<p>Arbitrary configuration properties: Most every Struts configuration element now accepts a map of
  key/value pairs. Arbitrary configuration properties let us externalize more of our configurations,
  encouraging reuse.</p>

<p>Opt-In Cancel Handling: In Struts 1.3, the Cancel token is only honored if the new property "cancellable"
  is set for the Action Mapping. If the Cancel token is present, but cancellable is not set, then an
  InvalidCancelException is thrown. The InvalidCancelExeption may be caught by a Declarative Exception
  Handler, like any other Exception.</p>

<p>Enhanced Global Exception Handlers: We now support use of global exception handlers in cases when no
  ActionConfig has yet been identified, as in with "preprocessing" commands in a custom request processing
  chain.</p>

<p>Extends attribute: In the Struts configuration file, we can now use the extends attribute to adopt
  default settings from another element, as we already can in the Tiles configuration files.</p>

<p>"isCommitted" Exception Handling: When using Tiles, sometimes the response is already committed when an
  exception occurs. Now, the ExceptionHandler tests response.isCommitted, and, if true, includes the
  configured view path, rather than forwarding to it.</p>

<p>Postback Forms: The action attribute of the Form taglib is now optional. If omitted, the original URI of
  the original request is used.</p>

<p>Wildcard ActionConfig properties: Wildcards can now be used in the properties of an ActionConfig.</p>

<p>The 1.3.x series of the Apache Struts framework has a minumum requirement of the following specification
  versions:</p>

<ul>
  <li>Java Servlet 2.3 and JavaServer Pages (JSP) 1.2</li>
  <li>Java 2 Standard Platform Edition (J2SE) 1.4</li>
</ul>

<p>The release notes are available online at:</p>

<p><a href="http://struts.apache.org/1.x/userGuide/release-notes.html">
  http://struts.apache.org/1.x/userGuide/release-notes.html</a></p>

<p>Notes on upgrading from prior versions can be found on the community-maintained wiki:</p>

<p><a href="http://wiki.apache.org/struts/StrutsUpgradeNotes12to13">
  http://wiki.apache.org/struts/StrutsUpgradeNotes12to13</a></p>

<hr/>

<h4 id="a20060628.1">28 Jun 2006 - Shale to Become Top-Level
  ASF Project</h4>
<p>
  On behalf of the ASF Board and Struts PMC, we are pleased to
  announce that Shale has been accepted as a top-level project of
  the Apache Software Foundation.
</p>
<p>
  As a top-level project, Shale will have its own website, mailing
  lists, repository space, and Project Management Committee. Shale
  will be an automomous ASF project, rather than a subproject of
  Apache Struts.
</p>
<p>
  The Shale framework for JavaServer Faces is nearing its first
  stable release. As a top-level project, it will be easier for
  Shale to attract new developers and expand its growing community.
</p>


<p>
  The initial set of PMC members and committers for Shale is
  Craig McClanahan, James Mitchell, Greg Reddin, Sean Schofield,
  Wendy Smoak, Gary VanMatre, Matthias Wessendorf.
</p>

<p>
  Apache Shale has strong ties to both the Struts and MyFaces
  projects. Most of the Shale PMC members are already involved
  in both projects and plan on continuing to remain involved in
  them, along with Shale.
</p>

<p>
  Apache Shale is a modern web application framework, intended for
  developers adopting JavaServer Faces as a core technology.
</p>

<p>
  Shale began as a proposal for Struts 2.0, but instead became a
  subproject, so as to provide a JSF alternative for Struts
  developers. Recent developments for Struts 2 now make it
  easier for Struts developers to access JSF components from within
  an "action-based" application.
</p>

<p>
  The initial Shale codebase was donated by Craig McClanahan, who
  also donated the original Struts codebase.
</p>

<p>
  [Note: To accomodate Shale, the original framework had been given
  the name "Action". Now that Shale has graduated, the "Action"
  label is being dropped, and Struts is just Struts again.]
</p>

<hr/>

<h4 id="a20060608">08 Jun 2006 - New Struts Committer:
  Antonio Petrelli </h4>
<p>
  Please join us in welcoming Antonio Petrelli as a new Struts
  committer.
</p>
<p>
  Antonio has consistently offered feedback and patches to the
  Standalone Tiles effort and has promoted it several times on
  the user list. In addition he has provided a lot of help on
  the user list to people using Struts Tiles.
</p>
<p>
  Welcome, Antonio, it's great to see that Tiles is falling
  into place :)
</p>
<p>
  PMC vote: 7 +1
</p>
<hr/>

<h4 id="a20060603.3">03 Jun 2006 - New Struts Committer:
  Bob Lee</h4>
<p>
  Please join us in welcoming Bob Lee as a new Struts committer.
</p>
<p>
  Some of us have known Bob for several years through his Struts,
  WebWork, and Dynaop work, or in person from a conference.
  At this last JavaOne, he met other PMC members: Craig, Martin,
  Gary, and Wendy -- and Bob is well known to the WebWork folks.
</p>
<p>
  Bob's current focus is to develop a kinder, gentler API for
  Struts 2, having already submitted several patches and
  <a href="http://wiki.apache.org/struts/RoughSpots">
    constructively engaged the community</a>
  while handling criticisms well. He has committed several
  patches for WebWork and Xwork, started the Dynaop project,
  and has been peripherally involved in the Struts community
  for many years.
</p>
<p>
  Welcome, Bob ... Our only worry is that we haven't yet seen
  the Crazy part of Crazy Bob.
</p>
<p>
  PMC vote: 8 +1 (binding), 4 +1 (non-binding).
</p>
<hr/>

<h4 id="a20060603.2">03 Jun 2006 - New Struts Committer: Michael
  Jouravlev</h4>
<p>
  Please join us in welcoming Michael Jouravlev as a new Struts
  committer.
</p>
<p>
  Michael has been an active member of our community for a very
  long time. His posts to user@ and dev@ are consistently
  helpful. Michael often participates in development
  discussions, including the Action2 discussions. He has
  <a href="http://tinyurl.com/ls7ga">
    submitted code and patches and collaborated on changes</a>
  that were accepted to the code base.
</p>
<p>
  Michael has also make many contributions to the wiki,
  including reorganizing the area so that it is more useful to
  others.
</p>
<p>
  Welcome, Michael ... Just don't start downsizing the fonts :)
</p>
<p>
  PMC vote: 7 +1.
</p>
<hr/>

<h4 id="a20060603.1">03 Jun 2006 - New Struts Committer: Paul
  Benedict</h4>
<p>
  Please join us in welcoming Paul Benedict as a new Struts
  committer.
</p>
<p>
  Paul has been an earnest and helpful member of our community
  for well over a year now. He has submitted patches and ideas,
  andvmany useful posts to the user list. Paul was particularly
  active in the
  <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=38374">
    discussion</a>
  that lead to the addition of the "Opt-in Cancel" feature,
</p>
<p>
  In this and other discussions, Paul has demonstrated an
  ability to collaborate with others and create a better
  solution than the one originally proposed.
</p>
<p>
  Welcome, Paul ... Hey, we're always looking for release
  managers!
</p>
<p>
  PMC vote: 3 +1.
</p>
<hr/>

<h4 id="a20050328">23 Mar 2006 - Struts Shale Framework 1.0.2 Alpha</h4>
<p>
  The Struts team is pleased to announce the release of Struts Shale 1.0.2 Alpha.
</p>
<ul>
  <li>
    <a href="http://struts.apache.org/releases.html">
      http://struts.apache.org/releases.html</a>
  </li>
</ul>
<p>
  The Struts Shale Framework is a set of loosely coupled services,
  fundamentally based on JavaServer Faces, which may be combined as
  needed to meet particular application requirements.
</p>
<p>
  Compared to version 1.0.0 (version 1.0.1 was retired due to packaging
  issues), this version includes a substantial number of bugfixes and
  enhancements -- details are in the Release Notes -- and the following
  major new features:
</p>

<ul>
  <li>
    Shale Remoting is a complete overhaul of the remoting support in
    1.0.0, providing support for application or component developers who
    need to implement the server side behavior for AJAX callbacks. It is
    packaged as a small (40k) JAR that has no dependencies on the rest of
    Shale.
  </li>
  <li>
    Tiger Extensions is an optional add-on layer for those running on
    Java SE 5 (code named "Tiger"). The extensions let you use Java
    annotations to declare managed beans or register JSF components,
    without needing entries in a faces-config.xml file.
  </li>
  <li>
    A new "blank" starter application to get you up and running with a
    new project quickly.
  </li>
  <li>
    A new "mailreader" demo application that duplicates the
    functionality of the Struts 1.x version of this app, so you can
  </li>
  <li>
    A new "SQL Browser" demo application that illustrates use of the
    Tiger Extensions, as well as the ability to modify JSF component trees
    on the fly.
  </li>
</ul>
<p>
  Although this is considered an alpha release, various developer APIs
  should be considered at a more stable (in terms of assurances of
  backwards compatibility in future releases) point than might otherwise
  be expected. Please see the following web page for more details:
</p>
<ul>
  <li>
    <a href="http://struts.apache.org/struts-shale/api-stability.html">
      http://struts.apache.org/struts-shale/api-stability.html</a>
  </li>
</ul>
<hr/>

<h4 id="a20050322">22 Mar 2006 - Struts 1.2.9 (General
  Availability)</h4>
<p>
  The Struts team is pleased to announce the release of Struts
  1.2.9 for General Availability. This release is primarily to
  <a href="http://www.frsirt.com/english/advisories/2006/1205">fix three security issues</a>
  which have been identified and supersedes the earlier 1.2.8 version as
  the latest official release of Struts from The Apache Software
  Foundation.
</p>
<p>
  For more information on the security issues and solutions
  please see the
  <a href="http://struts.apache.org/1.2.9/userGuide/release-notes.html">
    Release Notes</a>
  and the
  <a href="http://wiki.apache.org/struts/StrutsUpgrade">
    Upgrade Notes</a>
</p>
<p>
  The binary, source and library distributions are available
  from the Struts
  download page:
  <a href="http://struts.apache.org/download.cgi">
    http://struts.apache.org/download.cgi</a>
</p>
<hr/>

<h4 id="a20060125.1">25 Jan 2006 - Struts Scripting 1.0.1
  Released</h4>
<p>
  The Struts team is pleased to announce the release of Struts
  Scripting
  1.0.1 for General Availability. This is the first stable
  release of
  Struts Scripting (formerly Struts BSF). It allows Struts
  Actions to be
  written in the scripting language of one's choice rather than
  as Java
  classes. It uses the Bean Scripting Framework to allow scripts
  to be
  written in any language BSF supports like Perl, Python, Ruby,
  JavaScript, Groovy, and even VBScript.
</p>
<p>
  The binary and source distributions are available from the
  Struts
  download page:
  <a href="http://struts.apache.org/download.cgi">
    http://struts.apache.org/download.cgi</a>
</p>
<p>
  You can find out more information about Struts Scripting at
  <a href="http://struts.apache.org/struts-scripting/">
    http://struts.apache.org/struts-scripting/</a>
  .
</p>
<hr/>


<h4 id="a20060117.1">17 Jan 2006 - New Struts Committers: Jason
  Carreira
  and Patrick Lightbody</h4>
<p>
  Please join me in welcoming Jason Carreira and Patrick
  Lightbody as new
  Struts committers. Jason and Patrick are the core WebWork 2
  developers
  and they are joining us in an important step in the merger
  process. I, and
  many other Struts committers, have personally met and talked
  at length with
  both Patrick and Jason on several occasions and find them
  dedicated,
  skilled, and team players. Their dedication to WebWork 2 over
  the years is
  a testament to their perseverance, commitment to their
  community, and
  technical skill. We look forward to their contributions as
  committers.
</p>

<p>
  Welcome Jason and Patrick!
</p>
<p>
  PMC vote: 8 +1
</p>

<p class="pull-right">
  Skip to: <a href="announce-2005.html">Announcements - 2005</a>
</p>

<p class="pull-left">
  <strong>Next:</strong>
  <a href="kickstart.html">Kickstart FAQ</a>
</p>

  </section>
</article>


<footer class="container">
  <div class="col-md-12">
    Copyright &copy; 2000-2018 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
    All Rights Reserved.
  </div>
  <div class="col-md-12">
    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
    trademarks of The Apache Software Foundation.
  </div>
  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
</footer>

<script>!function (d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (!d.getElementById(id)) {
    js = d.createElement(s);
    js.id = id;
    js.src = "//platform.twitter.com/widgets.js";
    fjs.parentNode.insertBefore(js, fjs);
  }
}(document, "script", "twitter-wjs");</script>
<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>

<div id="fb-root"></div>

<script>(function (d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s);
  js.id = id;
  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>


</body>
</html>
