<?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 html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:h="http://java.sun.com/jsf/html">
<head>
<title>Hello World</title>
</head>
<body>
<ui:composition template="/template.xhtml">

	<ui:define name="body">
		<h:form id="form">
			<h:panelGrid id="grid" columns="2">
				<h:outputText id="output1" value="Please enter your name" />
				<h:inputText id="input1" value="#{helloWorldBacking.name}"
					required="true" />
				<h:commandButton id="button1" value="press me"
					action="#{helloWorldBacking.send}" />
				<h:message id="message1" for="input1" />
			</h:panelGrid>
		</h:form>
	</ui:define>
</ui:composition>
</body>
</html>
