<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
 * 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.
-->
<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"
      xmlns:grv="http://myfaces.apache.org/groovy">
<head>
    <title>Hello World</title>
</head>
<body>
<ui:composition template="/template.xhtml">

    <ui:define name="body">
        <h:form id="form">



            <h:panelGroup styleClass="left">
                <h:panelGroup styleClass="stdBox">
                    <h:messages />
                    <h3>Validator Test 1</h3>
                    <h:outputText id="output1" value="Please enter your name"/>
                    <h:inputText id="input1" value="#{helloWorld.name}" required="true">
                        <grv:groovyvalidator/>
                    </h:inputText>
                    <h:commandButton id="button1" value="press me" action="#{helloWorld.send}"/>
                </h:panelGroup>
                <h:panelGroup styleClass="stdBox">
                    <h3>Groovy Component</h3>
                    <grv:testcomponent/>
                    <h:message id="message1" for="input1"/>
                </h:panelGroup>
            </h:panelGroup>
            <h:panelGroup styleClass="right">
                <h:panelGroup styleClass="stdBox">
                    <h3>Bean Tests</h3>
                    <h:outputFormat value="#{testbean.xxx}"/>
                    <br/>
                    <h:outputFormat value="#{javatestbean.sayHello}"/>
                </h:panelGroup>
                <h:panelGroup styleClass="stdBox">
                    <h3>Action Test 1</h3>
                    <h:commandButton value="Press me dynamic" action="#{testbean.doit}"/>
                </h:panelGroup>
            </h:panelGroup>
        </h:form>
    </ui:define>
</ui:composition>
</body>
</html>
