You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by bu...@apache.org on 2014/11/22 19:19:55 UTC

svn commit: r930122 - in /websites/production/tapestry/content: cache/main.pageCache creating-the-skeleton-application.html exploring-the-project.html loading-the-project-into-eclipse.html tapestry-tutorial.html

Author: buildbot
Date: Sat Nov 22 18:19:55 2014
New Revision: 930122

Log:
Production update by buildbot for tapestry

Modified:
    websites/production/tapestry/content/cache/main.pageCache
    websites/production/tapestry/content/creating-the-skeleton-application.html
    websites/production/tapestry/content/exploring-the-project.html
    websites/production/tapestry/content/loading-the-project-into-eclipse.html
    websites/production/tapestry/content/tapestry-tutorial.html

Modified: websites/production/tapestry/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/creating-the-skeleton-application.html
==============================================================================
--- websites/production/tapestry/content/creating-the-skeleton-application.html (original)
+++ websites/production/tapestry/content/creating-the-skeleton-application.html Sat Nov 22 18:19:55 2014
@@ -74,7 +74,7 @@ table.ScrollbarTable td.ScrollbarParent 
 table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
 table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
 
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="dependencies-tools-and-plugins.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="dependencies-tools-and-plugins.html">Dependencies, Tools and Plugins</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="loading-the-project-into-eclipse.html">Loading the Project Into Eclipse</a></td><td colspan="1" rowspan
 ="1" class="ScrollbarNextIcon"><a shape="rect" href="loading-the-project-into-eclipse.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div><p>Before we can get down to the fun, we have to create an empty application. Tapestry uses a feature of Maven to do this: <strong>archetypes</strong> (a too-clever way of saying "project templates").</p><p>For the tutorial, we're using a fresh install of Eclipse and an empty workspace at <code>/users/joeuser/workspace</code>. You may need to adjust a few things for other operating systems or local paths.</p><h2 id="CreatingTheSkeletonApplication-UsingtheQuickstartArchetype">Using the Quickstart Archetype</h2><p>From Eclipse, we'll use a Maven archetype to create a skeleton Tapestry project.</p>    <div class="aui-message hint shadowed information-macro">
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="dependencies-tools-and-plugins.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="dependencies-tools-and-plugins.html">Dependencies, Tools and Plugins</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="exploring-the-project.html">Exploring the Project</a></td><td colspan="1" rowspan="1" class="ScrollbarN
 extIcon"><a shape="rect" href="exploring-the-project.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div><p>Before we can get down to the fun, we have to create an empty application. Tapestry uses a feature of Maven to do this: <strong>archetypes</strong> (a too-clever way of saying "project templates").</p><p>For the tutorial, we're using a fresh install of Eclipse and an empty workspace at <code>/users/joeuser/workspace</code>. You may need to adjust a few things for other operating systems or local paths.</p><h2 id="CreatingTheSkeletonApplication-UsingtheQuickstartArchetype">Using the Quickstart Archetype</h2><p>From Eclipse, we'll use a Maven archetype to create a skeleton Tapestry project.</p>    <div class="aui-message hint shadowed information-macro">
                     <p class="title">Maven Behind a Firewall</p>
                             <span class="aui-icon icon-hint">Icon</span>
                 <div class="message-content">
@@ -97,7 +97,13 @@ table.ScrollbarTable td.ScrollbarNextIco
 </div></div><p>Of course, adjust the <code>localRepository</code> element to match the correct path for your computer.</p>
                     </div>
     </div>
-<p>Okay, let's get started creating our new project.</p><p>In Eclipse, go to <strong>File &gt; New &gt;</strong> <strong>Project... &gt; Maven &gt; Maven Project</strong></p><p><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/23340356/select-a-wizard.png?version=1&amp;modificationDate=1416675284654&amp;api=v2" data-image-src="/confluence/download/attachments/23340356/select-a-wizard.png?version=1&amp;modificationDate=1416675284654&amp;api=v2"></p><p>Then click <strong>Next</strong>, <strong>Next</strong> (again), and then on the <strong>Select an Archetype</strong> page click the <strong>Configure</strong> button on the Catalog line. The <strong>Archetype</strong> preferences dialog should appear. Click the <strong>Add Remote Catalog...</strong> button:</p><p><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/23340356/add-archetype-catalog.png?version=1&amp;modificationDate=14166753
 54423&amp;api=v2" data-image-src="/confluence/download/attachments/23340356/add-archetype-catalog.png?version=1&amp;modificationDate=1416675354423&amp;api=v2"></p><p>As shown above, enter <span class="nolink"><span class="nolink">"http://tapestry.apache.org"</span></span> in the Catalog File field, and "Apache Tapestry" in the Description field.</p><p>Click <strong>OK</strong>, then<strong> OK</strong> again.</p><p>On the Select an Archetype dialog, select the newly-added Apache Tapestry catalog, then select the "quickstart" artifact from the list and click <strong>Next</strong>.</p><p><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/23340356/select-archetype.png?version=1&amp;modificationDate=1416675447884&amp;api=v2" data-image-src="/confluence/download/attachments/23340356/select-archetype.png?version=1&amp;modificationDate=1416675447884&amp;api=v2"></p><p>Fill in the Group Id, Artifact Id, Version and Package&#160; as follows:<
 /p><p><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/23340356/specify-archetype-parameters.png?version=1&amp;modificationDate=1416675494780&amp;api=v2" data-image-src="/confluence/download/attachments/23340356/specify-archetype-parameters.png?version=1&amp;modificationDate=1416675494780&amp;api=v2"></p><p>then click Finish.</p>    <div class="aui-message hint shadowed information-macro">
+<p>Okay, let's get started creating our new project.</p><p>In Eclipse, go to <strong>File &gt; New &gt;</strong> <strong>Project... &gt; Maven &gt; Maven Project</strong></p><p><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/23340356/select-a-wizard.png?version=1&amp;modificationDate=1416675284654&amp;api=v2" data-image-src="/confluence/download/attachments/23340356/select-a-wizard.png?version=1&amp;modificationDate=1416675284654&amp;api=v2"></p><p>Then click <strong>Next</strong>, <strong>Next</strong> (again), and then on the <strong>Select an Archetype</strong> page click the <strong>Configure</strong> button on the Catalog line. The <strong>Archetype</strong> preferences dialog should appear. Click the <strong>Add Remote Catalog...</strong> button:</p><p><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/23340356/add-archetype-catalog.png?version=1&amp;modificationDate=14166753
 54423&amp;api=v2" data-image-src="/confluence/download/attachments/23340356/add-archetype-catalog.png?version=1&amp;modificationDate=1416675354423&amp;api=v2"></p><p>As shown above, enter <span class="nolink"><span class="nolink">"http://tapestry.apache.org"</span></span> in the Catalog File field, and "Apache Tapestry" in the Description field.</p>    <div class="aui-message hint shadowed information-macro">
+                            <span class="aui-icon icon-hint">Icon</span>
+                <div class="message-content">
+                            <p>If you want to try an unreleased (alpha or beta) version of Tapestry, use <span class="nolink">https://repository.apache.org/content/repositories/staging</span> archetype catalog file instead.</p>
+                    </div>
+    </div>
+<p>Click <strong>OK</strong>, then<strong> OK</strong> again.</p><p>On the Select an Archetype dialog, select the newly-added Apache Tapestry catalog, then select the "quickstart" artifact from the list and click <strong>Next</strong>.</p><p><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/23340356/select-archetype.png?version=1&amp;modificationDate=1416675447884&amp;api=v2" data-image-src="/confluence/download/attachments/23340356/select-archetype.png?version=1&amp;modificationDate=1416675447884&amp;api=v2"></p><p>Fill in the Group Id, Artifact Id, Version and Package&#160; as follows:</p><p><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/23340356/specify-archetype-parameters.png?version=1&amp;modificationDate=1416675494780&amp;api=v2" data-image-src="/confluence/download/attachments/23340356/specify-archetype-parameters.png?version=1&amp;modificationDate=1416675494780&amp;api=v
 2"></p><p>then click Finish.</p>    <div class="aui-message hint shadowed information-macro">
                             <span class="aui-icon icon-hint">Icon</span>
                 <div class="message-content">
                             <p>The first time you use Maven, project creation may take several minutes as Maven downloads hundreds of JAR dependencies. These downloaded files are cached locally and will not need to be downloaded again, but you do have to be patient on first use.</p>
@@ -123,13 +129,7 @@ Application 'app' (version 1.0-SNAPSHOT-
 2011-11-22 11:46:45.636::INFO:  Started SelectChannelConnector@0.0.0.0:8080
 [INFO] Started Jetty Server
 </pre>
-</div></div><p>&#160;</p><p>You can now open a web browser to <a shape="rect" class="external-link" href="http://localhost:8080/tutorial1/" >http://localhost:8080/tutorial1/</a> to see the running application:</p><p>&#160;</p><p><img class="confluence-embedded-image confluence-content-image-border image-left" height="525" width="700" src="https://cwiki.apache.org/confluence/download/attachments/23340356/startpage.png?version=6&amp;modificationDate=1416272937000&amp;api=v2" data-image-src="/confluence/download/attachments/23340356/startpage.png?version=6&amp;modificationDate=1416272937000&amp;api=v2"></p><p>&#160;</p><div style="clear: both"></div><p style="text-align: left;">The date and time in the middle of the page proves that this is a live application.</p><p>This is a complete little application; it doesn't do much, but it demonstrate how to create a number of pages sharing a common layout, and demonstrates some simple navigation and link handling. You can see that it has three
  different pages that share a common layout. (<span style="line-height: 1.4285715;"><em>Layout</em> is a loose term meaning common look and feel and navigation across many or all of the pages of an application. Often an application will include a Layout component to provide that commonness.)</span></p>    <div class="aui-message problem shadowed information-macro">
-                            <span class="aui-icon icon-problem">Icon</span>
-                <div class="message-content">
-                            <p>You should hit Control-C in the Terminal window to close down Jetty before continuing with the tutorial.</p>
-                    </div>
-    </div>
-<style type="text/css">/*<![CDATA[*/
+</div></div><p>&#160;</p><p>You can now open a web browser to <a shape="rect" class="external-link" href="http://localhost:8080/tutorial1/" >http://localhost:8080/tutorial1/</a> to see the running application:</p><p>&#160;</p><p><img class="confluence-embedded-image confluence-content-image-border image-left" height="525" width="700" src="https://cwiki.apache.org/confluence/download/attachments/23340356/startpage.png?version=6&amp;modificationDate=1416272937000&amp;api=v2" data-image-src="/confluence/download/attachments/23340356/startpage.png?version=6&amp;modificationDate=1416272937000&amp;api=v2"></p><p>&#160;</p><div style="clear: both"></div><p style="text-align: left;">The date and time in the middle of the page proves that this is a live application.</p><p>This is a complete little application; it doesn't do much, but it demonstrate how to create a number of pages sharing a common layout, and demonstrates some simple navigation and link handling. You can see that it has three
  different pages that share a common layout. (<span style="line-height: 1.4285715;"><em>Layout</em> is a loose term meaning common look and feel and navigation across many or all of the pages of an application. Often an application will include a Layout component to provide that commonness.)</span></p><p>&#160;</p><style type="text/css">/*<![CDATA[*/
 table.ScrollbarTable  {border: none;padding: 3px;width: 100%;padding: 3px;margin: 0px;background-color: #f0f0f0}
 table.ScrollbarTable td.ScrollbarPrevIcon {text-align: center;width: 16px;border: none;}
 table.ScrollbarTable td.ScrollbarPrevName {text-align: left;border: none;}
@@ -137,12 +137,7 @@ table.ScrollbarTable td.ScrollbarParent 
 table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
 table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
 
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="dependencies-tools-and-plugins.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="dependencies-tools-and-plugins.html">Dependencies, Tools and Plugins</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="loading-the-project-into-eclipse.html">Loading the Project Into Eclipse</a></td><td colspan="1" rowspan
 ="1" class="ScrollbarNextIcon"><a shape="rect" href="loading-the-project-into-eclipse.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div>    <div class="aui-message hint shadowed information-macro">
-                            <span class="aui-icon icon-hint">Icon</span>
-                <div class="message-content">
-                            <p>If you want to try an unreleased (alpha or beta) version of Tapestry, use <span class="nolink">https://repository.apache.org/content/repositories/staging</span> archetype catalog URL instead.</p>
-                    </div>
-    </div></div>
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="dependencies-tools-and-plugins.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="dependencies-tools-and-plugins.html">Dependencies, Tools and Plugins</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="exploring-the-project.html">Exploring the Project</a></td><td colspan="1" rowspan="1" class="ScrollbarN
 extIcon"><a shape="rect" href="exploring-the-project.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div><p>&#160;</p><p>&#160;</p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/exploring-the-project.html
==============================================================================
--- websites/production/tapestry/content/exploring-the-project.html (original)
+++ websites/production/tapestry/content/exploring-the-project.html Sat Nov 22 18:19:55 2014
@@ -48,19 +48,13 @@
 </div></div>
 
 <div id="top">
-<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em">
-<p>
-<span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
-</p><form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html">
+<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
+<form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html">
   <input type="text" name="q">
   <input type="submit" value="Search">
 </form>
 
-</div>
-
-<div class="emblem" style="float:left"><a shape="rect" href="index.html"><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/21791252/tapestry_s.png?version=3&amp;modificationDate=1293093635000&amp;api=v2" data-image-src="/confluence/download/attachments/21791252/tapestry_s.png?version=3&amp;modificationDate=1293093635000&amp;api=v2"></a></div>
-<div class="title" style="float:left; margin: 0 0 0 3em">
-<h1 id="SmallBanner-PageTitle">Exploring the Project</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Exploring the Project</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -80,7 +74,7 @@ table.ScrollbarTable td.ScrollbarParent 
 table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
 table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
 
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="loading-the-project-into-eclipse.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="loading-the-project-into-eclipse.html">Loading the Project Into Eclipse</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="implementing-the-hi-lo-guessing-game.html">Implementing the Hi-Lo Guessing Game</a></td><td colspa
 n="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="implementing-the-hi-lo-guessing-game.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div><p>The layout of the project follows the sensible standards promoted by Maven:</p><ul><li>Java source files under <code>src/main/java</code></li><li>Web application files under <code>src/main/webapp</code> (including <code>src/main/webapp/WEB-INF</code>)</li><li>Java test sources under <code>src/test/java</code></li><li>Non-code resources (including Tapestry page and component templates) under <code>src/main/resources</code> and <code>src/test/resources</code></li></ul><p>Let's look at what Maven has created from the archetype, starting with the web.xml configuration file:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>src/main/webapp/WEB-INF
 /web.xml</b></div><div class="codeContent panelContent pdl">
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="creating-the-skeleton-application.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="creating-the-skeleton-application.html">Creating The Skeleton Application</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="implementing-the-hi-lo-guessing-game.html">Implementing the Hi-Lo Guessing Game</a></td><td col
 span="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="implementing-the-hi-lo-guessing-game.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div><p>The layout of the project follows the sensible standards promoted by Maven:</p><ul><li>Java source files under <code>src/main/java</code></li><li>Web application files under <code>src/main/webapp</code> (including <code>src/main/webapp/WEB-INF</code>)</li><li>Java test sources under <code>src/test/java</code></li><li>Non-code resources (including Tapestry page and component templates) under <code>src/main/resources</code> and <code>src/test/resources</code></li></ul><p>Let's look at what Maven has created from the archetype, starting with the web.xml configuration file:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>src/main/webapp/WEB-
 INF/web.xml</b></div><div class="codeContent panelContent pdl">
 <script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
 &lt;!DOCTYPE web-app
         PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;
@@ -172,7 +166,7 @@ public class Index
     }
 }
 ]]></script>
-</div></div><p>There's a bit going on in this listing, as the Index page attempts to demonstrate a bunch of different ideas in Tapestry. Even so, the class is essentially pretty simple: Tapestry pages and components have no base classes to extend, no interfaces to implement, and are just a very pure POJO (Plain Old Java Object) ... with some special naming conventions and annotations for fields and methods.</p><p>You do have to meet the Tapestry framework partway:</p><ul><li>You need to put the Java class in the expected package, here com.example.tutorial.pages</li><li>The class must be public</li><li>You need to make sure there's a public, no-arguments constructor (here, the Java compiler has silently provided one for us)</li><li>All non-static fields must be <strong>private</strong></li></ul><p>As we saw when running the application, the page displays the current date and time, as well as a couple of extra links. The <code>currentTime</code> property is where that value comes from
 ; shortly we'll see how that value is referenced in the template, so it can be extracted from the page and output.</p><p>Tapestry always matches a page class to a template; neither is functional without the other. In fact, components within a page are treated the same way (except that components do not always have templates).</p><p>You will often hear about the <a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Model_view_controller" >Model-View-Controller pattern</a> (MVC). In Tapestry, the page class acts as both the Model (the source of data) and the controller (the logic that responds to user interaction). The template is the View in MVC. As a model, the page exposes JavaBeans properties that can be referenced in the template.</p><p>Let's look at how the component template builds on the Java class to provide the full user interface.</p><h1 id="ExploringtheProject-ComponentTemplate">Component Template</h1><p>Tapestry pages are the combination of a POJO Java 
 class with a Tapestry component template. The template has the same name as the Java class, but has the extension <code>.tml</code>. Since the Java class here is com.example.tutorial.pages.Index, the template file will be located at src/main/resource/com/example/tutorial/pages/Index.tml. Ultimately, both the Java class and the component template file will be stored in the same folder within the deployed WAR file.</p><p>Tapestry component templates are well-formed XML documents. This means that you can use any available XML editor. Templates may even have a DOCTYPE or an XML schema to validate the structure of the template page</p><p></p><p></p><p></p><p></p><p>&lt;style type='text/css'&gt;
+</div></div><p>There's a bit going on in this listing, as the Index page attempts to demonstrate a bunch of different ideas in Tapestry. Even so, the class is essentially pretty simple: Tapestry pages and components have no base classes to extend, no interfaces to implement, and are just a very pure POJO (Plain Old Java Object) ... with some special naming conventions and annotations for fields and methods.</p><p>You do have to meet the Tapestry framework partway:</p><ul><li>You need to put the Java class in the expected package, here com.example.tutorial.pages</li><li>The class must be public</li><li>You need to make sure there's a public, no-arguments constructor (here, the Java compiler has silently provided one for us)</li><li>All non-static fields must be <strong>private</strong></li></ul><p>As we saw when running the application, the page displays the current date and time, as well as a couple of extra links. The <code>currentTime</code> property is where that value comes from
 ; shortly we'll see how that value is referenced in the template, so it can be extracted from the page and output.</p><p>Tapestry always matches a page class to a template; neither is functional without the other. In fact, components within a page are treated the same way (except that components do not always have templates).</p><p>You will often hear about the <a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Model_view_controller" >Model-View-Controller pattern</a> (MVC). In Tapestry, the page class acts as both the Model (the source of data) and the controller (the logic that responds to user interaction). The template is the View in MVC. As a model, the page exposes JavaBeans properties that can be referenced in the template.</p><p>Let's look at how the component template builds on the Java class to provide the full user interface.</p><h1 id="ExploringtheProject-ComponentTemplate">Component Template</h1><p>Tapestry pages are the combination of a POJO Java 
 class with a Tapestry component template. The template has the same name as the Java class, but has the extension <code>.tml</code>. Since the Java class here is com.example.tutorial.pages.Index, the template file will be located at src/main/resource/com/example/tutorial/pages/Index.tml. Ultimately, both the Java class and the component template file will be stored in the same folder within the deployed WAR file.</p><p>Tapestry component templates are well-formed XML documents. This means that you can use any available XML editor. Templates may even have a DOCTYPE or an XML schema to validate the structure of the template page</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p>&lt;style type='text/css'&gt;
 .FootnoteMarker, .FootnoteNum a {
   background: transparent url(/confluence/download/resources/com.adaptavist.confluence.footnoteMacros:footnote/gfx/footnote.png) no-repeat top right;
   padding: 1px 2px 0px 1px;
@@ -244,7 +238,7 @@ var footnoteMarkerHighlight = function(i
             1
     </a>
 </sup>
-</p><p></p><p></p><p></p><p></p><p>.</p><p>&#160;</p><p>For the most part, a Tapestry component template looks like ordinary XHTML:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>src/main/resources/com/example/tutorial/pages/Index.tml</b></div><div class="codeContent panelContent pdl">
+<p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>.</p><p>&#160;</p><p>For the most part, a Tapestry component template looks like ordinary XHTML:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>src/main/resources/com/example/tutorial/pages/Index.tml</b></div><div class="codeContent panelContent pdl">
 <script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;html t:type=&quot;layout&quot; title=&quot;tutorial1 Index&quot;
       t:sidebarTitle=&quot;Framework Version&quot;
       xmlns:t=&quot;http://tapestry.apache.org/schema/tapestry_5_3.xsd&quot;
@@ -294,13 +288,13 @@ var footnoteMarkerHighlight = function(i
                             <p>You do have to name your component template file, Index.tml, with the <strong>exact same case</strong> as the component class name, Index. If you get the case wrong, it may work on some operating systems (such as Mac OS X, Windows) and not on others (Linux, and most others). This can be really vexing, as it is common to develop on Windows and deploy on Linux or Solaris, so be careful about case in this one area.</p>
                     </div>
     </div>
-<p>The goal in Tapestry is for component templates, such as Index.tml, to look as much as possible like ordinary, static HTML files</p><p></p><p></p><p></p><p></p><p>
+<p>The goal in Tapestry is for component templates, such as Index.tml, to look as much as possible like ordinary, static HTML files</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p>
 <sup id="FootnoteMarker2">
     <a shape="rect" class="FootnoteMarker" name="FootnoteMarker2" href="#Footnote2" onclick="footnoteHighlight(&quot;2&quot;,true);" alt="Footnote: Click here to display the footnote" title="Footnote: Click here to display the footnote">
             2
     </a>
 </sup>
-</p><p></p><p></p><p></p><p></p><p>. In fact, the expectation is that in many cases, the templates will start as static HTML files, created by a web developer, and then be <em>instrumented</em> to act as live Tapestry pages.</p><p>&#160;</p><p>Tapestry hides non-standard elements and attributes inside XML namespaces. By convention, the prefix "t:" is used for the primary namespace, but that is not a requirement, any prefix you want to use is fine.</p><p>This short template demonstrates quite a few features of Tapestry.</p>    <div class="aui-message problem shadowed information-macro">
+<p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>. In fact, the expectation is that in many cases, the templates will start as static HTML files, created by a web developer, and then be <em>instrumented</em> to act as live Tapestry pages.</p><p>&#160;</p><p>Tapestry hides non-standard elements and attributes inside XML namespaces. By convention, the prefix "t:" is used for the primary namespace, but that is not a requirement, any prefix you want to use is fine.</p><p>This short template demonstrates quite a few features of Tapestry.</p>    <div class="aui-message problem shadowed information-macro">
                             <span class="aui-icon icon-problem">Icon</span>
                 <div class="message-content">
                             <p>Part of the concept of the quickstart archetype is to demonstrate a bunch of different features, approaches and common patterns used in Tapestry, thus we're hitting you with a lot all at once.</p>
@@ -319,37 +313,37 @@ var footnoteMarkerHighlight = function(i
                             <p>If you are coming to Tapestry 5 from Tapestry 4 or earlier, expansions are a concise replacement for the Insert component.</p>
                     </div>
     </div>
-<p>The value inside the curly braces is a <em>property expression</em>. Tapestry uses its own property expression language that is expressive, fast, and type-safe</p><p></p><p></p><p></p><p></p><p>
+<p>The value inside the curly braces is a <em>property expression</em>. Tapestry uses its own property expression language that is expressive, fast, and type-safe</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p>
 <sup id="FootnoteMarker3">
     <a shape="rect" class="FootnoteMarker" name="FootnoteMarker3" href="#Footnote3" onclick="footnoteHighlight(&quot;3&quot;,true);" alt="Footnote: Click here to display the footnote" title="Footnote: Click here to display the footnote">
             3
     </a>
 </sup>
-</p><p></p><p></p><p></p><p></p><p>. More advanced property expressions can traverse multiple properties (for example, <code>user.address.city</code>), or even invoke public methods. Here the expansion simply reads the <code>currentTime</code> property of the page.</p><p>&#160;</p><p>Tapestry follows the rules defined by Sun's JavaBeans specification: a property name of <code>currentTime</code> maps to two methods: <code>getCurrentTime()</code> and <code>setCurrentTime()</code>. If you omit one or the other of these methods, the property is either read only (as here), or write only</p><p></p><p></p><p></p><p></p><p>
+<p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>. More advanced property expressions can traverse multiple properties (for example, <code>user.address.city</code>), or even invoke public methods. Here the expansion simply reads the <code>currentTime</code> property of the page.</p><p>&#160;</p><p>Tapestry follows the rules defined by Sun's JavaBeans specification: a property name of <code>currentTime</code> maps to two methods: <code>getCurrentTime()</code> and <code>setCurrentTime()</code>. If you omit one or the other of these methods, the property is either read only (as here), or write only</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p>
 <sup id="FootnoteMarker4">
     <a shape="rect" class="FootnoteMarker" name="FootnoteMarker4" href="#Footnote4" onclick="footnoteHighlight(&quot;4&quot;,true);" alt="Footnote: Click here to display the footnote" title="Footnote: Click here to display the footnote">
             4
     </a>
 </sup>
-</p><p></p><p></p><p></p><p></p><p>.</p><p>&#160;</p><p>Tapestry does go one step further: it ignores case when matching properties inside the expansion to properties of the page. In the template we could say ${currenttime} or ${CurrentTime} or any variation, and Tapestry will <em>still</em> invoke the <code>getCurrentTime()</code> method.</p><p>Note that in Tapestry it is not necessary to configure what object holds the <code>currentTime</code> property; a template and a page are always used in combination with each other; expressions are always rooted in the page instance, in this case, an instance of the Index class.</p><p>The Index.tml template includes a second expansion:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>.</p><p>&#160;</p><p>Tapestry does go one step further: it ignores case when matching properties inside the expansion to properties of the page. In the template we could say ${currenttime} or ${CurrentTime} or any variation, and Tapestry will <em>still</em> invoke the <code>getCurrentTime()</code> method.</p><p>Note that in Tapestry it is not necessary to configure what object holds the <code>currentTime</code> property; a template and a page are always used in combination with each other; expressions are always rooted in the page instance, in this case, an instance of the Index class.</p><p>The Index.tml template includes a second expansion:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[    &lt;p&gt;${message:greeting}&lt;/p&gt;
 ]]></script>
-</div></div><p>Here <code>greeting</code> is not a property of the page; its actually a localized message key. Every Tapestry page and component is allowed to have its own message catalog</p><p></p><p></p><p></p><p></p><p>
+</div></div><p>Here <code>greeting</code> is not a property of the page; its actually a localized message key. Every Tapestry page and component is allowed to have its own message catalog</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p>
 <sup id="FootnoteMarker5">
     <a shape="rect" class="FootnoteMarker" name="FootnoteMarker5" href="#Footnote5" onclick="footnoteHighlight(&quot;5&quot;,true);" alt="Footnote: Click here to display the footnote" title="Footnote: Click here to display the footnote">
             5
     </a>
 </sup>
-</p><p></p><p></p><p></p><p></p><p>.</p><p>&#160;</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>src/main/resources/com/example/tutorial/pages/Index.properties</b></div><div class="codeContent panelContent pdl">
+<p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>.</p><p>&#160;</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>src/main/resources/com/example/tutorial/pages/Index.properties</b></div><div class="codeContent panelContent pdl">
 <script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[greeting=Welcome to Tapestry 5!  We hope that this project template will get you going in style.
 ]]></script>
-</div></div><p>Message catalogs are useful for storing repeating strings outside of code or templates, though their primary purpose is related to localization of the application (which will be described in more detail in a later chapter). Messages that may be used across multiple pages can be stored in the application's global message catalog, src/main/webapp/WEB-INF/app.properties, instead.</p><p>This "message:" prefix is not some special case; there are actually quite a few of these <em>binding prefixes</em> built into Tapestry, each having a specific purpose. In fact, omitting a binding prefix in an expansion is exactly the same as using the "prop:" binding prefix, which means to treat the binding as a property expression.</p><p>Expansions are useful for extracting a piece of information and rendering it out to the client as a string, but the real heavy lifting of Tapestry occurs inside components.</p><h1 id="ExploringtheProject-ComponentsInsideTemplates">Components Inside Templa
 tes</h1><p>Components can be represented inside a component template in two ways</p><p></p><p></p><p></p><p></p><p>
+</div></div><p>Message catalogs are useful for storing repeating strings outside of code or templates, though their primary purpose is related to localization of the application (which will be described in more detail in a later chapter). Messages that may be used across multiple pages can be stored in the application's global message catalog, src/main/webapp/WEB-INF/app.properties, instead.</p><p>This "message:" prefix is not some special case; there are actually quite a few of these <em>binding prefixes</em> built into Tapestry, each having a specific purpose. In fact, omitting a binding prefix in an expansion is exactly the same as using the "prop:" binding prefix, which means to treat the binding as a property expression.</p><p>Expansions are useful for extracting a piece of information and rendering it out to the client as a string, but the real heavy lifting of Tapestry occurs inside components.</p><h1 id="ExploringtheProject-ComponentsInsideTemplates">Components Inside Templa
 tes</h1><p>Components can be represented inside a component template in two ways</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p>
 <sup id="FootnoteMarker6">
     <a shape="rect" class="FootnoteMarker" name="FootnoteMarker6" href="#Footnote6" onclick="footnoteHighlight(&quot;6&quot;,true);" alt="Footnote: Click here to display the footnote" title="Footnote: Click here to display the footnote">
             6
     </a>
 </sup>
-</p><p></p><p></p><p></p><p></p><p>:</p><p>&#160;</p><ul><li>As an ordinary element, but with a t:type attribute to define the type of component.</li></ul><ul><li>As an element in the Tapestry namespace, in which case the element name determines the type.</li></ul><p>Here we've used an &lt;html&gt; element to represent the application's Layout component.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>:</p><p>&#160;</p><ul><li>As an ordinary element, but with a t:type attribute to define the type of component.</li></ul><ul><li>As an element in the Tapestry namespace, in which case the element name determines the type.</li></ul><p>Here we've used an &lt;html&gt; element to represent the application's Layout component.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;html t:type=&quot;layout&quot; ...&gt; 
   ...
 &lt;/html&gt;
@@ -366,13 +360,13 @@ var footnoteMarkerHighlight = function(i
 
 
 
-<span class="gliffy-container" id="gliffy-container-24346949-7418" data-fullwidth="913" data-ceoid="24188263" data-edit="${diagramEditLink.getLinkUrl()}" data-full="/confluence/plugins/gliffy/viewer.action?inline=false&amp;attachmentId=24346949&amp;attachmentVersion=2&amp;lastPage=%2Fpages%2Fviewpage.action%3FpageId%3D24188263" data-filename="Templates and Parameters">
+<span class="gliffy-container" id="gliffy-container-24346949-7996" data-fullwidth="913" data-ceoid="24188263" data-edit="${diagramEditLink.getLinkUrl()}" data-full="/confluence/plugins/gliffy/viewer.action?inline=false&amp;attachmentId=24346949&amp;attachmentVersion=2&amp;lastPage=%2Fpages%2Fviewpage.action%3FpageId%3D24188263" data-filename="Templates and Parameters">
 
-    <map id="gliffy-map-24346949-1405" name="gliffy-map-24346949-1405"></map>
+    <map id="gliffy-map-24346949-6882" name="gliffy-map-24346949-6882"></map>
 
-    <img class="gliffy-image gliffy-image-border" id="gliffy-image-24346949-7418" width="304" height="300" data-full-width="913" data-full-height="901" src="https://cwiki.apache.org/confluence/download/attachments/24188263/Templates%20and%20Parameters.png?version=2&amp;modificationDate=1371888025000&amp;api=v2" alt="Templates and Parameters" usemap="#gliffy-map-24346949-1405">
+    <img class="gliffy-image gliffy-image-border" id="gliffy-image-24346949-7996" width="304" height="300" data-full-width="913" data-full-height="901" src="https://cwiki.apache.org/confluence/download/attachments/24188263/Templates%20and%20Parameters.png?version=2&amp;modificationDate=1371888025000&amp;api=v2" alt="Templates and Parameters" usemap="#gliffy-map-24346949-6882">
 
-    <map class="gliffy-dynamic" id="gliffy-dynamic-map-24346949-7418" name="gliffy-dynamic-map-24346949-7418"></map>
+    <map class="gliffy-dynamic" id="gliffy-dynamic-map-24346949-7996" name="gliffy-dynamic-map-24346949-7996"></map>
 </span>
 
 
@@ -399,7 +393,7 @@ var footnoteMarkerHighlight = function(i
                             <p>This level of detail reflects that the application has been configured to run in <em>development mode</em> instead of <em>production mode</em>. In production mode, the exception report would simply be the top level exception message. However, most production applications go further and customize how Tapestry handles and reports exceptions.</p>
                     </div>
     </div>
-<p>There was a bunch of other stuff on this page, related to links and Ajax and other things, that we'll ignore for the moment.</p><hr><p>&#160;</p><p></p><p></p><p></p><p></p><p></p><p><table class="Footnotes" style="width: 100%; border:none;" cellspacing="0" cellpadding="0" summary="This table contains one or more notes for references made elsewhere on the page."><caption class="accessibility">Footnotes</caption><thead class="accessibility"><tr class="accessibility"><th colspan="1" rowspan="1" class="accessibility" id="footnote-th1">Reference</th><th colspan="1" rowspan="1" class="accessibility" id="footnote-th2">Notes</th></tr></thead><tbody><tr name="Footnote1"><td colspan="1" rowspan="1" valign="top" class="FootnoteNum" headings="footnote-th1">
+<p>There was a bunch of other stuff on this page, related to links and Ajax and other things, that we'll ignore for the moment.</p><hr><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p><table class="Footnotes" style="width: 100%; border:none;" cellspacing="0" cellpadding="0" summary="This table contains one or more notes for references made elsewhere on the page."><caption class="accessibility">Footnotes</caption><thead class="accessibility"><tr class="accessibility"><th colspan="1" rowspan="1" class="accessibility" id="footnote-th1">Reference</th><th colspan="1" rowspan="1" class="accessibility" id="footnote-th2">Notes</th></tr></thead><tbody><tr name="Footnote1"><td colspan="1" rowspan="1" valign="top" class="FootnoteNum" headings="footnote-th1">
         <a shape="rect" id="FootnoteNum1" href="#FootnoteMarker1" onclick="footnoteMarkerHighlight(&quot;1&quot;);" onmouseover="footnoteHighlight(&quot;1&quot;,false);" alt="Footnote: Click to return to reference in text" title="Footnote: Click to return to reference in text">
             1
         </a>
@@ -436,7 +430,7 @@ var footnoteMarkerHighlight = function(i
         </a>
       </td><td colspan="1" rowspan="1" valign="top" class="Footnote" id="Footnote6" width="100%" headings="footnote-th2">
           Ok, there's a third way as well, which will be discussed in good time.
-      </td></tr></tbody></table></p><p></p><p></p><p></p><p></p><style type="text/css">/*<![CDATA[*/
+      </td></tr></tbody></table></p><p>&#160;</p><p>&#160;</p><p>&#160;</p><style type="text/css">/*<![CDATA[*/
 table.ScrollbarTable  {border: none;padding: 3px;width: 100%;padding: 3px;margin: 0px;background-color: #f0f0f0}
 table.ScrollbarTable td.ScrollbarPrevIcon {text-align: center;width: 16px;border: none;}
 table.ScrollbarTable td.ScrollbarPrevName {text-align: left;border: none;}
@@ -444,7 +438,7 @@ table.ScrollbarTable td.ScrollbarParent 
 table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
 table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
 
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="loading-the-project-into-eclipse.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="loading-the-project-into-eclipse.html">Loading the Project Into Eclipse</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="implementing-the-hi-lo-guessing-game.html">Implementing the Hi-Lo Guessing Game</a></td><td colspa
 n="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="implementing-the-hi-lo-guessing-game.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div></div>
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="creating-the-skeleton-application.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="creating-the-skeleton-application.html">Creating The Skeleton Application</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="implementing-the-hi-lo-guessing-game.html">Implementing the Hi-Lo Guessing Game</a></td><td col
 span="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="implementing-the-hi-lo-guessing-game.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/loading-the-project-into-eclipse.html
==============================================================================
--- websites/production/tapestry/content/loading-the-project-into-eclipse.html (original)
+++ websites/production/tapestry/content/loading-the-project-into-eclipse.html Sat Nov 22 18:19:55 2014
@@ -26,16 +26,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
-  <script type="text/javascript">
-  SyntaxHighlighter.defaults['toolbar'] = false;
-  SyntaxHighlighter.all();
-  </script>
 
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
 
@@ -61,92 +51,12 @@
 <div class="clearer"></div>
 
   <div id="breadcrumbs">
-        <a href="index.html">Apache Tapestry</a>&nbsp;&gt;&nbsp;<a href="documentation.html">Documentation</a>&nbsp;&gt;&nbsp;<a href="tapestry-tutorial.html">Tapestry Tutorial</a>&nbsp;&gt;&nbsp;<a href="loading-the-project-into-eclipse.html">Loading the Project Into Eclipse</a>
+        <a href="index.html">Apache Tapestry</a>&nbsp;&gt;&nbsp;<a href="index.html">Index</a>&nbsp;&gt;&nbsp;<a href="redirects.html">Redirects</a>&nbsp;&gt;&nbsp;<a href="loading-the-project-into-eclipse.html">Loading the Project Into Eclipse</a>
     <a class="edit" title="Edit this page (requires approval -- just ask on the mailing list)" href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=24188253">edit</a>
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><style type="text/css">/*<![CDATA[*/
-table.ScrollbarTable  {border: none;padding: 3px;width: 100%;padding: 3px;margin: 0px;background-color: #f0f0f0}
-table.ScrollbarTable td.ScrollbarPrevIcon {text-align: center;width: 16px;border: none;}
-table.ScrollbarTable td.ScrollbarPrevName {text-align: left;border: none;}
-table.ScrollbarTable td.ScrollbarParent {text-align: center;border: none;}
-table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
-table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
-
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="creating-the-skeleton-application.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="creating-the-skeleton-application.html">Creating The Skeleton Application</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="exploring-the-project.html">Exploring the Project</a></td><td colspan="1" rowspan="1" class="Sc
 rollbarNextIcon"><a shape="rect" href="exploring-the-project.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div><p>The first step is to ask Maven to generate the Eclipse control files (<code>.classpath</code> and <code>.project</code>) for us:</p><div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
-<pre>$ mvn eclipse:eclipse -DdownloadSources=true
-[INFO] Scanning for projects...
-Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.1.1/maven-war-plugin-2.1.1.pom
-Downloaded: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.1.1/maven-war-plugin-2.1.1.pom (7 KB at 7.1 KB/sec)
-Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.1.1/maven-war-plugin-2.1.1.jar
-Downloaded: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.1.1/maven-war-plugin-2.1.1.jar (76 KB at 83.4 KB/sec)
-Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-eclipse-plugin/maven-metadata.xml
-Downloaded: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-eclipse-plugin/maven-metadata.xml (680 B at 1.9 KB/sec)
-Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-eclipse-plugin/2.8/maven-eclipse-plugin-2.8.pom
-Downloaded: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-eclipse-plugin/2.8/maven-eclipse-plugin-2.8.pom (12 KB at 22.9 KB/sec)
-Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/17/maven-plugins-17.pom
-Downloaded: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-plugins/17/maven-plugins-17.pom (13 KB at 25.6 KB/sec)
-Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-eclipse-plugin/2.8/maven-eclipse-plugin-2.8.jar
-Downloaded: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-eclipse-plugin/2.8/maven-eclipse-plugin-2.8.jar (202 KB at 237.8 KB/sec)
-[INFO]                                                                         
-[INFO] ------------------------------------------------------------------------
-[INFO] Building tutorial1 Tapestry 5 Application 1.0-SNAPSHOT
-[INFO] ------------------------------------------------------------------------
-[INFO] 
-[INFO] &gt;&gt;&gt; maven-eclipse-plugin:2.8:eclipse (default-cli) @ tutorial1 &gt;&gt;&gt;
-[INFO] 
-[INFO] &lt;&lt;&lt; maven-eclipse-plugin:2.8:eclipse (default-cli) @ tutorial1 &lt;&lt;&lt;
-[INFO] 
-[INFO] --- maven-eclipse-plugin:2.8:eclipse (default-cli) @ tutorial1 ---
-Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-7/plexus-archiver-1.0-alpha-7.pom
-Downloaded: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0-alpha-7/plexus-archiver-1.0-alpha-7.pom (2 KB at 2.3 KB/sec)
-Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom
-Downloaded: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom (2 KB at 3.7 KB/sec)
-Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.2/plexus-utils-1.2.pom
-Downloaded: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.2/plexus-utils-1.2.pom (767 B at 1.5 KB/sec)
-
-(...hundreds of lines omitted here...)
-
-Downloading: https://repository.apache.org/content/groups/staging/com/google/inject/guice/2.0/guice-2.0-sources.jar
-Downloading: http://repo1.maven.org/maven2/com/google/inject/guice/2.0/guice-2.0-sources.jar
-Downloading: https://repository.apache.org/content/groups/staging/org/apache/tapestry/tapestry-yuicompressor/5.3/tapestry-yuicompressor-5.3-sources.jar
-Downloaded: https://repository.apache.org/content/groups/staging/org/apache/tapestry/tapestry-yuicompressor/5.3/tapestry-yuicompressor-5.3-sources.jar (7 KB at 25.8 KB/sec)
-Downloading: https://repository.apache.org/content/groups/staging/rhino/js/1.6R7/js-1.6R7-sources.jar
-Downloading: http://repo1.maven.org/maven2/rhino/js/1.6R7/js-1.6R7-sources.jar
-[INFO] Wrote settings to /Users/hlship/Documents/workspace/tutorial1/.settings/org.eclipse.jdt.core.prefs
-[INFO] Wrote Eclipse project for "tutorial1" to /Users/hlship/Documents/workspace/tutorial1.
-[INFO] 
-       Sources for some artifacts are not available.
-       List of artifacts without a source archive:
-         o org.beanshell:bsh:2.0b4
-         o xalan:serializer:2.7.1
-         o org.apache.tomcat:catalina:6.0.30
-         o org.apache.tomcat:servlet-api:6.0.30
-         o org.apache.tomcat:juli:6.0.30
-         o org.apache.tomcat:annotations-api:6.0.30
-         o org.apache.tomcat:coyote:6.0.30
-         o org.apache.tomcat:dbcp:6.0.30
-
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 39.526s
-[INFO] Finished at: Fri Mar 1 11:52:57 PST 2013
-[INFO] Final Memory: 9M/81M
-[INFO] ------------------------------------------------------------------------
-~/Documents/workspace/tutorial1
-
-</pre>
-</div></div><p>At this point, Maven has created the Eclipse <code>.project</code> and <code>.classpath</code> files, and we can import the project. In addition, since we specified <code>-DdownloadSources=true</code>, Maven has also downloaded the sources of each library and linked to the source JAR (where available); that means we can see the sources for any Tapestry classes right inside Eclipse, which is very useful when debugging or exploring.</p><p>At this point, we are ready to import the project created by Maven into Eclipse so we can start working with it. Launch Eclipse and switch over to the Java Perspective.</p><p>Right click inside the Package Explorer view and select <strong>Import ...</strong></p><p><img class="confluence-embedded-image confluence-thumbnail" src="loading-the-project-into-eclipse.thumbs/eclipse-java-persp.png" data-image-src="/confluence/download/attachments/24188253/eclipse-java-persp.png?version=1&amp;modificationDate=1291067922000&amp;api=v2"></p><p>Ch
 oose the "existing projects" option:</p><p><img class="confluence-embedded-image confluence-thumbnail" src="loading-the-project-into-eclipse.thumbs/eclipse-import.png" data-image-src="/confluence/download/attachments/24188253/eclipse-import.png?version=1&amp;modificationDate=1291067922000&amp;api=v2"></p><p>Now select the folder created by Maven:</p><p><img class="confluence-embedded-image confluence-thumbnail" src="loading-the-project-into-eclipse.thumbs/eclipse-import-folder.png" data-image-src="/confluence/download/attachments/24188253/eclipse-import-folder.png?version=1&amp;modificationDate=1291067922000&amp;api=v2"></p><p>When you click the Finish button, the project will be imported into the Eclipse workspace.</p><p><img class="confluence-embedded-image confluence-thumbnail" src="loading-the-project-into-eclipse.thumbs/eclipse-project-errors.png" data-image-src="/confluence/download/attachments/24188253/eclipse-project-errors.png?version=1&amp;modificationDate=1291067922000&am
 p;api=v2"></p><p>However; there are many errors. Maven expects that you will configure a classpath variable, <code>M2_REPO</code>, that points at your local repository; a directory in your home directory that stores all those downloaded JARs and other files. Open Eclipse's preferences panel and navigate to <strong>Java &gt; Build Path &gt; Classpath Variables</strong>:</p><p><img class="confluence-embedded-image confluence-thumbnail" src="loading-the-project-into-eclipse.thumbs/eclipse-classpath-vars.png" data-image-src="/confluence/download/attachments/24188253/eclipse-classpath-vars.png?version=1&amp;modificationDate=1291067921000&amp;api=v2"></p><p>Click the <strong>New</strong> button, and enter the new variable (you'll have to adjust this for your operating system and local paths):</p><p><img class="confluence-embedded-image confluence-thumbnail" src="loading-the-project-into-eclipse.thumbs/eclipse-new-var.png" data-image-src="/confluence/download/attachments/24188253/eclipse-n
 ew-var.png?version=1&amp;modificationDate=1291067942000&amp;api=v2"></p><p>Eclipse will ask to perform a clean build, and the errors will be gone once it has done so.</p><h1 id="LoadingtheProjectIntoEclipse-RunningtheApplicationinsideEclipse">Running the Application inside Eclipse</h1><p>The task is to set up Jetty to run our application directly out of our Eclipse workspace. This is a great way to develop web applications, since we don't want to have to use Maven to compile and run the application ... or worse yet, use Maven to package and deploy the application. That's for later, when we want to put the application into production. For development, we want a fast, agile environment that can keep up with our changes, and that means we can't wait for redeploys and restarts.</p><p>Choose the <strong>Run ...</strong> item from the Eclipse <strong>Run</strong> menu to get the launch configuration dialog:</p><p><img class="confluence-embedded-image confluence-thumbnail" src="loading-the
 -project-into-eclipse.thumbs/eclipse-run.png" data-image-src="/confluence/download/attachments/24188253/eclipse-run.png?version=1&amp;modificationDate=1291068594000&amp;api=v2"></p><p>Select <strong>Jetty Webapp</strong> and click the <strong>New</strong> button, then fill in a few values:</p><p><img class="confluence-embedded-image confluence-thumbnail" src="loading-the-project-into-eclipse.thumbs/eclipse-launch.png" data-image-src="/confluence/download/attachments/24188253/eclipse-launch.png?version=2&amp;modificationDate=1321979047000&amp;api=v2"></p><p>You will need to click the "Show advanced Options" checkbox, then uncheck "SSL" and "Enable Scanner".</p><p>Tapestry runs best with a couple of additional options; click the "Arguments" tab and enter the following VM Arguments: <code>-XX:MaxPermSize=256M -Xmx600m -Dtapestry.execution-mode=development</code></p><p><img class="confluence-embedded-image confluence-thumbnail" src="loading-the-project-into-eclipse.thumbs/eclipse-launch
 -vmargs.png" data-image-src="/confluence/download/attachments/24188253/eclipse-launch-vmargs.png?version=1&amp;modificationDate=1321979336000&amp;api=v2"></p><p>Tapestry uses more PermGen space (the part of Java memory used for loading classes) than a typical application, and uses more heap memory than the default; the above settings are good for a medium-to-large size Tapestry application, and will keep Java from running the Garbage Collector too often. The setting of tapestry.execution mode tells Tapestry to run in development mode, where runtime exceptions are reported more exhaustively.</p><p>With those settings in place, you can then click <strong>Run</strong> and Jetty will launch (it takes only a few seconds):</p><p>Once you click Run, Jetty will start up and launch (it should take a second or two).</p><p><img class="confluence-embedded-image confluence-thumbnail" src="loading-the-project-into-eclipse.thumbs/eclipse-jetty.png" data-image-src="/confluence/download/attachments/
 24188253/eclipse-jetty.png?version=3&amp;modificationDate=1321979524000&amp;api=v2"></p><p>You may now start the application with the URL <a shape="rect" class="external-link" href="http://localhost:8080/tutorial1/" >http://localhost:8080/tutorial1/</a></p><style type="text/css">/*<![CDATA[*/
-table.ScrollbarTable  {border: none;padding: 3px;width: 100%;padding: 3px;margin: 0px;background-color: #f0f0f0}
-table.ScrollbarTable td.ScrollbarPrevIcon {text-align: center;width: 16px;border: none;}
-table.ScrollbarTable td.ScrollbarPrevName {text-align: left;border: none;}
-table.ScrollbarTable td.ScrollbarParent {text-align: center;border: none;}
-table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
-table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
-
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="creating-the-skeleton-application.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="creating-the-skeleton-application.html">Creating The Skeleton Application</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="exploring-the-project.html">Exploring the Project</a></td><td colspan="1" rowspan="1" class="Sc
 rollbarNextIcon"><a shape="rect" href="exploring-the-project.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div></div>
+<div id="ConfluenceContent"><p>This page is no longer used. See <a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/tapestry-tutorial.html
==============================================================================
--- websites/production/tapestry/content/tapestry-tutorial.html (original)
+++ websites/production/tapestry/content/tapestry-tutorial.html Sat Nov 22 18:19:55 2014
@@ -48,19 +48,13 @@
 </div></div>
 
 <div id="top">
-<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em">
-<p>
-<span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
-</p><form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html">
+<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
+<form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html">
   <input type="text" name="q">
   <input type="submit" value="Search">
 </form>
 
-</div>
-
-<div class="emblem" style="float:left"><a shape="rect" href="index.html"><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/21791252/tapestry_s.png?version=3&amp;modificationDate=1293093635000&amp;api=v2" data-image-src="/confluence/download/attachments/21791252/tapestry_s.png?version=3&amp;modificationDate=1293093635000&amp;api=v2"></a></div>
-<div class="title" style="float:left; margin: 0 0 0 3em">
-<h1 id="SmallBanner-PageTitle">Tapestry Tutorial</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Tapestry Tutorial</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -88,7 +82,7 @@
                     <span class="icon icon-page" title="Page">Page:</span>            </div>
 
             <div class="details">
-                            <a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a>
+                            <a shape="rect" href="tapestry-for-jsf-users.html">Tapestry for JSF Users</a>
                     
                 
                             </div>
@@ -97,7 +91,7 @@
                     <span class="icon icon-page" title="Page">Page:</span>            </div>
 
             <div class="details">
-                            <a shape="rect" href="tapestry-for-jsf-users.html">Tapestry for JSF Users</a>
+                            <a shape="rect" href="principles.html">Principles</a>
                     
                 
                             </div>
@@ -106,7 +100,7 @@
                     <span class="icon icon-page" title="Page">Page:</span>            </div>
 
             <div class="details">
-                            <a shape="rect" href="principles.html">Principles</a>
+                            <a shape="rect" href="getting-started.html">Getting Started</a>
                     
                 
                             </div>
@@ -115,12 +109,12 @@
                     <span class="icon icon-page" title="Page">Page:</span>            </div>
 
             <div class="details">
-                            <a shape="rect" href="getting-started.html">Getting Started</a>
+                            <a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a>
                     
                 
                             </div>
         </li></ul>
-</div><h1 id="TapestryTutorial-TableofContents">Table of Contents</h1><p></p><ul class="childpages-macro"><li><a shape="rect" href="dependencies-tools-and-plugins.html">Dependencies, Tools and Plugins</a></li><li><a shape="rect" href="creating-the-skeleton-application.html">Creating The Skeleton Application</a></li><li><a shape="rect" href="loading-the-project-into-eclipse.html">Loading the Project Into Eclipse</a></li><li><a shape="rect" href="exploring-the-project.html">Exploring the Project</a></li><li><a shape="rect" href="implementing-the-hi-lo-guessing-game.html">Implementing the Hi-Lo Guessing Game</a></li><li><a shape="rect" href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To Create User Forms</a></li><li><a shape="rect" href="using-tapestry-with-hibernate.html">Using Tapestry With Hibernate</a></li></ul><h1 id="TapestryTutorial-Introduction">Introduction</h1><p>Welcome to Tapestry!</p><p>This is a tutorial for people who will be creating Tapestry 5 app
 lications. It doesn't matter whether you have experience with Tapestry 4 (or Tapestry 3, for that matter) or whether you are completely new to Tapestry. In fact, in some ways, the less you know about web development in general, and older Tapestry versions in particular, the better off you may be ... that much less to unlearn!</p><p>You do need to have a reasonable understanding of HTML, a smattering of XML, and a good understanding of basic Java language features, including Annotations.</p><h1 id="TapestryTutorial-TheChallengesofWebApplicationDevelopment">The Challenges of Web Application Development</h1><p>If you're used to developing web applications using servlets and JSPs, or with Struts, you are simply used to a lot of pain. So much pain, you may not even understand the dire situation you are in! These are environments with no safety net; Struts and the Servlet API have no idea how your application is structured, or how the different pieces fit together. Any URL can be an actio
 n and any action can forward to any view (usually a JSP) to provide an HTML response to the web browser. The pain is the unending series of small, yet important, decisions you have to make as a developer (and communicate to the rest of your team). What are the naming conventions for actions, for pages, for attributes stored in the HttpSession or HttpServletRequest? Where do cross-cutting concerns such as database transactions, caching and security get implemented (and do you have to cut-and-paste Java or XML to make it work?) How are your packages organized ... where to the user interface classes go, and where do the data and entity objects go? How do you share code from one part of your application to another?</p><p>On top of all that, the traditional approaches thrust something most unwanted in your face: <em>multi-threaded coding</em>. Remember back to Object Oriented Programming 101 where an object was defined as a bundle of data and operations on that data? You have to unlearn 
 that lesson as soon as you build a traditional web application, because web applications are multi-threaded. An application server could be handling dozens or hundreds of requests from individual users, each in their own thread, and each sharing the exact same objects. Suddenly, you can't store data inside an object (a servlet or a Struts Action) because whatever data you store for one user will be instantly overwritten by some other user.</p><p>Worse, your objects each have only one operation: <code>doGet()</code> or <code>doPost()</code>.</p><p>Meanwhile, most of your day-to-day work involves deciding how to package up some data already inside a particular Java object and squeeze that data into a URL's query parameters, so that you can write more code to convert it back if the user clicks that particular link. And don't forget editing a bunch of XML files to keep the servlet container, or the Struts framework, aware of these decisions.</p><p>Just for laughs, remember that you have
  to rebuild, redeploy and restart your application after virtually any change. Is any of this familiar? Then perhaps you'd appreciate something a little <em>less</em> familiar: Tapestry.</p><h1 id="TapestryTutorial-TheTapestryWay">The Tapestry Way</h1><p>Tapestry uses a very different model: a structured, organized world of pages, and components within pages. Everything has a very specific name (that you provide). Once you know the name of a page, you know the location of the Java class for that page, the location of the template for that page, and the total structure of the page. Tapestry knows all this as well, and can make things <strong>just work</strong>.</p><p>As we'll see in the following pages, Tapestry lets you code in terms of your objects. You'll barely see any Tapestry classes, outside of a few Java annotations. If you have information to store, store it as fields of your classes, not inside the HttpServletRequest or HttpSession. If you need some code to execute, it's ju
 st a simple annotation or method naming convention to get Tapestry to invoke that method, at the right time, with the right data. The methods don't even have to be public!</p><p>Tapestry also shields you from most of the multi-threaded aspects of web application development. Tapestry manages the life cycle of your page and components objects, and the fields of the pages and components, in a thread-safe way. Your page and component classes always look like simple, standard <a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Plain_Old_Java_Object" >POJOs</a>.</p><p>Tapestry began in January 2000, and it now reflects over ten years of experience of the entire Tapestry community. Tapestry brings to the table all that experience about the best ways to build scalable, maintainable, robust, internationalized (and more recently) Ajax-enabled applications. Tapestry 5 represents a completely new code base (compared to Tapestry 4) designed to simplify the Tapestry coding m
 odel while at the same time extending the power of Tapestry and improving performance.</p><h1 id="TapestryTutorial-GettingTheTutorialSource">Getting The Tutorial Source</h1><p>The source code for the Tapestry tutorial is available on <a shape="rect" class="external-link" href="https://github.com/hlship/tapestry5-tutorial" >GitHub</a> (although you won't need it to complete the tutorial).</p><h1 id="TapestryTutorial-TimetoBegin">Time to Begin</h1><p>Okay, enough background. Now let's get started on the tutorial: <a shape="rect" href="dependencies-tools-and-plugins.html">Dependencies, Tools and Plugins</a></p></div>
+</div><h1 id="TapestryTutorial-TableofContents">Table of Contents</h1><p></p><ul class="childpages-macro"><li><a shape="rect" href="dependencies-tools-and-plugins.html">Dependencies, Tools and Plugins</a></li><li><a shape="rect" href="creating-the-skeleton-application.html">Creating The Skeleton Application</a></li><li><a shape="rect" href="exploring-the-project.html">Exploring the Project</a></li><li><a shape="rect" href="implementing-the-hi-lo-guessing-game.html">Implementing the Hi-Lo Guessing Game</a></li><li><a shape="rect" href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To Create User Forms</a></li><li><a shape="rect" href="using-tapestry-with-hibernate.html">Using Tapestry With Hibernate</a></li></ul><h1 id="TapestryTutorial-Introduction">Introduction</h1><p>Welcome to Tapestry!</p><p>This is a tutorial for people who will be creating Tapestry 5 applications. It doesn't matter whether you have experience with Tapestry 4 (or Tapestry 3, for that matter) 
 or whether you are completely new to Tapestry. In fact, in some ways, the less you know about web development in general, and older Tapestry versions in particular, the better off you may be ... that much less to unlearn!</p><p>You do need to have a reasonable understanding of HTML, a smattering of XML, and a good understanding of basic Java language features, including Annotations.</p><h1 id="TapestryTutorial-TheChallengesofWebApplicationDevelopment">The Challenges of Web Application Development</h1><p>If you're used to developing web applications using servlets and JSPs, or with Struts, you are simply used to a lot of pain. So much pain, you may not even understand the dire situation you are in! These are environments with no safety net; Struts and the Servlet API have no idea how your application is structured, or how the different pieces fit together. Any URL can be an action and any action can forward to any view (usually a JSP) to provide an HTML response to the web browser. T
 he pain is the unending series of small, yet important, decisions you have to make as a developer (and communicate to the rest of your team). What are the naming conventions for actions, for pages, for attributes stored in the HttpSession or HttpServletRequest? Where do cross-cutting concerns such as database transactions, caching and security get implemented (and do you have to cut-and-paste Java or XML to make it work?) How are your packages organized ... where to the user interface classes go, and where do the data and entity objects go? How do you share code from one part of your application to another?</p><p>On top of all that, the traditional approaches thrust something most unwanted in your face: <em>multi-threaded coding</em>. Remember back to Object Oriented Programming 101 where an object was defined as a bundle of data and operations on that data? You have to unlearn that lesson as soon as you build a traditional web application, because web applications are multi-threade
 d. An application server could be handling dozens or hundreds of requests from individual users, each in their own thread, and each sharing the exact same objects. Suddenly, you can't store data inside an object (a servlet or a Struts Action) because whatever data you store for one user will be instantly overwritten by some other user.</p><p>Worse, your objects each have only one operation: <code>doGet()</code> or <code>doPost()</code>.</p><p>Meanwhile, most of your day-to-day work involves deciding how to package up some data already inside a particular Java object and squeeze that data into a URL's query parameters, so that you can write more code to convert it back if the user clicks that particular link. And don't forget editing a bunch of XML files to keep the servlet container, or the Struts framework, aware of these decisions.</p><p>Just for laughs, remember that you have to rebuild, redeploy and restart your application after virtually any change. Is any of this familiar? Th
 en perhaps you'd appreciate something a little <em>less</em> familiar: Tapestry.</p><h1 id="TapestryTutorial-TheTapestryWay">The Tapestry Way</h1><p>Tapestry uses a very different model: a structured, organized world of pages, and components within pages. Everything has a very specific name (that you provide). Once you know the name of a page, you know the location of the Java class for that page, the location of the template for that page, and the total structure of the page. Tapestry knows all this as well, and can make things <strong>just work</strong>.</p><p>As we'll see in the following pages, Tapestry lets you code in terms of your objects. You'll barely see any Tapestry classes, outside of a few Java annotations. If you have information to store, store it as fields of your classes, not inside the HttpServletRequest or HttpSession. If you need some code to execute, it's just a simple annotation or method naming convention to get Tapestry to invoke that method, at the right tim
 e, with the right data. The methods don't even have to be public!</p><p>Tapestry also shields you from most of the multi-threaded aspects of web application development. Tapestry manages the life cycle of your page and components objects, and the fields of the pages and components, in a thread-safe way. Your page and component classes always look like simple, standard <a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Plain_Old_Java_Object" >POJOs</a>.</p><p>Tapestry began in January 2000, and it now reflects over ten years of experience of the entire Tapestry community. Tapestry brings to the table all that experience about the best ways to build scalable, maintainable, robust, internationalized (and more recently) Ajax-enabled applications. Tapestry 5 represents a completely new code base (compared to Tapestry 4) designed to simplify the Tapestry coding model while at the same time extending the power of Tapestry and improving performance.</p><h1 id="Tapestry
 Tutorial-GettingTheTutorialSource">Getting The Tutorial Source</h1><p>The source code for the Tapestry tutorial is available on <a shape="rect" class="external-link" href="https://github.com/hlship/tapestry5-tutorial" >GitHub</a> (although you won't need it to complete the tutorial).</p><h1 id="TapestryTutorial-TimetoBegin">Time to Begin</h1><p>Okay, enough background. Now let's get started on the tutorial: <a shape="rect" href="dependencies-tools-and-plugins.html">Dependencies, Tools and Plugins</a></p><p>&#160;</p></div>
 </div>
 
 <div class="clearer"></div>