~~ $Id$
~~
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
~~
         -----------
         Java APIs considerations
         -----------

Introduction

  In this part of the migration guide we address the differences of the APIs
  in Struts Tiles and Tiles 2.

  If you are a Tiles extension developer and you want to convert your existing
  extension, see {{{extension.html}Tiles extensions}} migration guide.

Controllers and View Preparers

  In Tiles 2, the concept of a Tiles <<<Controller>>>, i.e. an object that it is
  invoked before rendering a definition, has been replaced with
  <<<ViewPreparer>>>.

  The classes that implement the <<<Controller>>> interface must now implement
  the new <<<ViewPreparer>>> interface, or extend the <<<ViewPreparerSupport>>>
  class.

Tiles <<<ComponentContext>>>

  The <<<ComponentContext>>>, i.e. the Tiles-specific context in which the
  current attribute values are stored, has been renamed to
  <<<AttributeContext>>>.

  The method <<<getAttribute>>> returns an <<Attribute>>, and not an
  <<Attribute Value>>, i.e. a simple object.

   * Previous Migration Pages

     ** {{{index.html}Introduction }}

     ** {{{configuration.html}Tiles configuration files}}.

     ** {{{tags.html}Tiles JSP tags}}

   * Next Migration Pages

     ** {{{extension.html}Tiles extensions}}.
