<?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.
-->
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<!-- my components examples -->

<faces-config>


    <!-- Managed Beans for sayhello.xhtml -->
    <managed-bean>
        <managed-bean-name>sayHelloBean</managed-bean-name>
        <managed-bean-class>org.myorganization.component.example.SayHelloBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

    <!-- NAVIGATION RULES -->

    <navigation-rule>
        <navigation-case>
            <from-outcome>go_home</from-outcome>
            <to-view-id>/home.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

    <navigation-rule>
        <from-view-id>/validatorDemo.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>display_number</from-outcome>
            <to-view-id>/validatorDemoResult.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    
    <navigation-rule>
        <from-view-id>/converterDemo.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>display_phone</from-outcome>
            <to-view-id>/converterDemoResult.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

</faces-config>
