<?xml version="1.0"?>
<!--
 * 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.
-->
<faces-config 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-facesconfig_2_0.xsd"
              version="2.0">



    <!-- managed beans of the simple hello world app -->
    <!--
    <managed-bean>
        <managed-bean-name>helloWorldBacking</managed-bean-name>
        <managed-bean-class>
            org.apache.myfaces.springTest.HelloWorldBacking
        </managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    -->
    <!--

    <managed-bean>
        <managed-bean-name>groovyBean</managed-bean-name>
        <managed-bean-class>org.apache.myfaces.groovy.GroovyBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>secondBean</property-name>
            <value>#{springBean}</value>
        </managed-property>
    </managed-bean>
     -->
    
    <!-- navigation rules for helloWorld.jsp -->
    <navigation-rule>
        <from-view-id>/helloWorld.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/page2.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

    <!-- navigation rules for page2.jsp -->
    <navigation-rule>
        <from-view-id>/page2.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>back</from-outcome>
            <to-view-id>/helloWorld.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

     <application>
       <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
    </application>
</faces-config>