~~ $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 Apache Tiles\u0099.

  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 Apache Tiles\u0099, 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}}.
