<?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 version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xi="http://www.w3.org/2001/XInclude"
    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_1_2.xsd">
  
  <application>
    <!-- Use the Trinidad RenderKit -->
    <default-render-kit-id>
      org.apache.myfaces.trinidad.core
    </default-render-kit-id>
  </application>

  <!-- Global preferences object that proxies to others -->
  <managed-bean>
    <managed-bean-name>helloWorldBacking</managed-bean-name>
    <managed-bean-class>${package}.HelloWorldBacking</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>

  <!-- navigation rules for index.jspx -->
  <navigation-rule>
    <from-view-id>/index.jspx</from-view-id>
    <navigation-case>
      <from-outcome>success</from-outcome>
      <to-view-id>/page2.jspx</to-view-id>
    </navigation-case>
  </navigation-rule>
	
  <!-- navigation rules for page2.jspx -->
  <navigation-rule>
    <from-view-id>/page2.jspx</from-view-id>
    <navigation-case>
      <from-outcome>back</from-outcome>
      <to-view-id>/index.jspx</to-view-id>
    </navigation-case>
  </navigation-rule>

</faces-config>