<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
    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.

-->
<document>

    <properties>
        <title>Introduction</title>
    </properties>

    <body>
        <section name="Navigation Top">
            <a href="installation.html">On to the General Installation Guide&gt;&gt;</a>
        </section>

        <section name="Introduction">
            <subsection name="General Introduction">

                <p>Welcome and hello to MyFaces Extension-Scripting, short Ext-Scripting. Ext-Scripting is an extensions
                    project for MyFaces. It tries to add scripting and rapid prototyping (artifact level hot deployment)
                    capabilities to JSF by adding
                    scripting languages and JSP like recompilation mechanisms.

                    Following link to the a video on YouTube shows you what Ext-Scripting can do for you:
                </p>

                <p>
                    <center>
                        <iframe class="youtube-player" type="text/html" width="800" height="600"
                                src="http://www.youtube.com/embed/g2YvzOloNyI" frameborder="0">
                        </iframe>
                    </center>


                </p>
                <p>
                    As the video shows, you can make changes to almost all JSF artifacts on the fly, and at the next
                    reload the changes are present.
                    The result is a reduction in server restarts and better turn around times. The
                    same rapid prototyping approach which is normally present in scripting languages and scripting
                    language based frameworks.

                    Additionally to that, Ext-Scripting integrates various scripting languages to be used in conjunction
                    with JSF, so that a mixed language approach becomes feasible within the bounds of the framework.
                </p>

            </subsection>

        </section>
        <section name="Documentation">
            <p>
                Ext-Scripting provides extensive documentation. Feel free
                to browse our
                <a href="installation.html">Installation Guide</a>
                or
                <a href="usersguide.html">Users Guide</a>
                for further information.
            </p>
            <p>
                Also
                <a href="download.html">download links</a>
                are provided on the left hand side of this page,
                as well as further information.
            </p>
        </section>

        <section name="Short Overview over Ext-Scripting">
            <subsection name="Supported for Scripting Languages">
                <p>
                    Ext-Scripting currently only supports Groovy Java and Scala (1.0.3+) as dynamic languages.
                    Additional languages will be provided in subsequent releases.
                </p>
            </subsection>
            <subsection name="Support for JSF2 and JSF2 Artifacts and Annotations">
                <p>
                    One of the main goals of Ext-Scripting was to provide JSF2 support out of the box. Most new JSF2
                    artifacts are supported. Ext-Scripting even adds scriptability to the new annotation syntax of JSF2
                    by allowing annotations to be used in a dynamic manner!
                </p>
            </subsection>
            <subsection name="Support for MyFace">
                <p>
                    Extensions scripting supports MyFaces only for now. Following versions are supported.
                </p>
                <ul>
                    <li>1.2.8+ (note support will be dropped soon post 1.0.2)</li>
                    <li>2.0+</li>
                </ul>
                <p>
                    Older versions are not supported due to missing plugin mechanisms which allow Ext-Scripting to work.
                </p>
                <p>
                    The JSF RI and Mojarra as time of writing are not supported due to missing framework hooks needed,
                    but Mojarra supports Groovy out of the box within the core engine. So for the time being only
                    MyFaces can be used. Also Portlets for 1.0.x are not supported, this limitation will be eliminated
                    in future versions. Support for Mojarra maybe will come post 1.0.x.
                </p>
            </subsection>

        </section>

        <section name="Navigation Bottom">
            <a href="installation.html">On to the General Installation Guide&gt;&gt;</a>
        </section>


    </body>
</document>