<!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:t="http://myfaces.apache.org/tomahawk" xmlns:grv="http://myfaces.apache.org/groovy">
<head>
    <title>Hello World</title>
</head>
<body>
<ui:composition template="/template.xhtml">

    <ui:define name="body">
        <h:messages />
        <h:form id="form">
            <h:panelGrid id="grid" columns="1">
                <h:outputText id="title1" styleClass="title" value="#{blogView.title}"/>
                <h:outputText id="title11" styleClass="title1" value="#{blogView.title1}"/>
                <!--
                entry.firstName = firstName
                entry.lastName = lastName
                entry.topic = topic
                entry.content = content
            -->
                <h:outputText value="First Name"/>
                <h:inputText value="#{blogView.firstName}"/>
                <h:outputText value="Last Name"/>
                <h:inputText value="#{blogView.lastName}"/>
                <h:outputText value="Topic of entry"/>
                <h:inputText value="#{blogView.topic}"/>
                <h:outputText value="Content"/>
                <h:inputText value="#{blogView.content}"/>


                <h:commandLink action="#{blogView.addEntry}" value="Add Blog">
                     <f:ajax execute="@this" render="content"/>
                </h:commandLink>
            </h:panelGrid>
            <h:panelGrid columns="1">
                <h:outputText value="Blog Entries"/>
                <ui:repeat value="#{blogService.blogEntries}" var="item">
                    <h:outputText value="#{item.topic}"/>
                    <h:outputText value="#{item.content}"/>
                    <br/>
                </ui:repeat>
            </h:panelGrid>

        </h:form>
    </ui:define>
</ui:composition>
</body>
</html>
