<!--
    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.
-->
#Navigation Top
 [&lt;&lt;appendix Configuration Entries](./configentries.html)
 
#Appendix: Example Configuration
## General Information
 
 This page gives a detailed example configuration for
 Ext-Scripting for installation
 details please visit the[setup guide](./installation.html).
 
 
## Simple Configuration
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <description>MyProject web.xml</description>
        <!-- ======================================================================================
                Plugin Init Parameter
                First Step to enable Ext-Scripting
             ====================================================================================== -->
        <context-param>
            <description>
                Initializes the plugins for our scripting support
            </description>
            <param-name>org.apache.myfaces.FACES_INIT_PLUGINS</param-name>
            <param-value>org.apache.myfaces.extensions.scripting.servlet.StartupServletContextPluginChainLoader</param-value>
        </context-param>
        <!-- Faces Servlet -->
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <!-- Faces Servlet Mapping -->
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.jsf</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>/faces/*</url-pattern>
        </servlet-mapping>
    </web-app>
            
 
## Full Configuration
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <description>MyProject web.xml</description>
        <!-- ======================================================================================
                Plugin Init Parameter
                First Step to enable Ext-Scripting
             ====================================================================================== -->
        <context-param>
            <description>
                Initializes the plugins for our groovy handlers
            </description>
            <param-name>org.apache.myfaces.FACES_INIT_PLUGINS</param-name>
            <param-value>org.apache.myfaces.extensions.scripting.servlet.StartupServletContextPluginChainLoader</param-value>
        </context-param>
        <!-- ======================================================================================
                Loader path for Groovy files
             ====================================================================================== -->
        <context-param>
            <description>Additional comma separated loader paths to allow direct editing on the sources directory instead
                of the deployment dir
            </description>
            <param-name>org.apache.myfaces.extensions.scripting.groovy.LOADER_PATHS</param-name>
            <param-value>
                /Users/werpu2/development/workspace/extensions-scripting3/examples/myfaces20-example/src/main/webapp/WEB-INF/groovy
            </param-value>
        </context-param>
        <!-- ======================================================================================
                Optional Loader Paths for Java Source Files
             ====================================================================================== -->
        <context-param>
            <description>Additional comma separated loader paths to allow direct editing on the sources directory instead
                of the deployment dir
            </description>
            <param-name>org.apache.myfaces.extensions.scripting.java.LOADER_PATHS</param-name>
            <param-value>
                /Users/werpu2/development/workspace/extensions-scripting3/examples/myfaces20-example/src/main/webapp/WEB-INF/java
            </param-value>
        </context-param>
        <!-- ======================================================================================
                Loader path for Scala files
             ====================================================================================== -->
        <context-param>
            <description>Additional comma separated loader paths to allow direct editing on the sources directory instead
                of the deployment dir
            </description>
            <param-name>org.apache.myfaces.extensions.scripting.scala.LOADER_PATHS</param-name>
            <param-value>
                /Users/werpu2/development/workspace/extensions-scripting3/examples/myfaces20-example/src/main/webapp/WEB-INF/scala
            </param-value>
        </context-param>
        <!-- ======================================================================================
                Optional Loader Paths for resource files
             ====================================================================================== -->
        <context-param>
            <description>resource paths for our custom JSF2 resource resolver</description>
            <param-name>org.apache.myfaces.extensions.scripting.resources.LOADER_PATHS</param-name>
            <param-value>
                /Users/werpu2/development/workspace/extensions-scripting3/examples/myfaces20-example/src/main/webapp
            </param-value>
        </context-param>
        <!-- ======================================================================================
                Optional: Tell Facelets to load the resources from your source dir
             ====================================================================================== -->
        <context-param>
            <description>a redirecting Facelet resource resolver which allows to pick up templates and resources from our
                source dir
            </description>
            <param-name>facelets.RESOURCE_RESOLVER</param-name>
            <param-value>org.apache.myfaces.extensions.scripting.jsf.facelet.ReroutingResourceResolver</param-value>
        </context-param>
        <!-- ======================================================================================
                Optional: Whitelist of root packages where your sources should come from
             ====================================================================================== -->
        <context-param>
            <description>a comma separated whitelist of root packages which are compiled those and nothing else
                will be compiled during all compile stages, all other files stay permanently as they are
            </description>
            <param-name>org.apache.myfaces.extensions.scripting.PGK_WHITELIST</param-name>
            <param-value>org.apache.myfaces.groovyloader.blog,org.apache.myfaces.javaloader.blog</param-value>
        </context-param>
        <!-- ======================================================================================
                Optional Additional Classpath
             ====================================================================================== -->
        <context-param>
            <description>
                Additional Classpaths which will be added to the compilers classpath
            </description>
            <param-name>org.apache.myfaces.extensions.scripting.PGK_ADDITIONAL_CLASSPATH</param-name>
            <param-value>/usr/lib/java/myjar.jar,/usr/lib/java/myjar2.jar</param-value>
        </context-param>
        <context-param>
            <param-name>javax.faces.PROJECT_STAGE</param-name>
            <param-value>Development</param-value>
        </context-param>
        <!-- ========================================================================================
                        Optional: enable only if you have openwebbeans working
        ========================================================================================== -->
        <listener>
            <listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class>
        </listener>
        <!-- Listener, to allow Jetty serving MyFaces apps -->
        <listener>
            <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
        </listener>
        <!-- Faces Servlet -->
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <!-- Faces Servlet Mapping -->
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.jsf</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>/faces/*</url-pattern>
        </servlet-mapping>
    </web-app>
            
 
 
#Navigation Bottom
 [&lt;&lt;appendix Configuration Entries](./configentries.html)
 
