You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by bu...@apache.org on 2015/07/15 11:20:20 UTC

svn commit: r958386 [1/4] - in /websites/production/tapestry/content: ./ cache/

Author: buildbot
Date: Wed Jul 15 09:20:19 2015
New Revision: 958386

Log:
Production update by buildbot for tapestry

Modified:
    websites/production/tapestry/content/cache/main.pageCache
    websites/production/tapestry/content/component-parameters.html
    websites/production/tapestry/content/component-rendering.html
    websites/production/tapestry/content/creating-the-skeleton-application.html
    websites/production/tapestry/content/error-page-recipe.html
    websites/production/tapestry/content/exploring-the-project.html
    websites/production/tapestry/content/forms-and-validation.html
    websites/production/tapestry/content/getting-started.html
    websites/production/tapestry/content/hibernate-statistics.html
    websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html
    websites/production/tapestry/content/javascript-modules.html
    websites/production/tapestry/content/overriding-exception-reporting.html
    websites/production/tapestry/content/page-and-component-classes-faq.html
    websites/production/tapestry/content/pipelinebuilder-service.html
    websites/production/tapestry/content/request-processing.html
    websites/production/tapestry/content/session-storage.html
    websites/production/tapestry/content/specific-errors-faq.html
    websites/production/tapestry/content/tapestry-ioc-overview.html
    websites/production/tapestry/content/templating-and-markup-faq.html
    websites/production/tapestry/content/test-page-2.html
    websites/production/tapestry/content/type-coercion.html
    websites/production/tapestry/content/using-beaneditform-to-create-user-forms.html
    websites/production/tapestry/content/using-tapestry-with-hibernate.html

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

Modified: websites/production/tapestry/content/component-parameters.html
==============================================================================
--- websites/production/tapestry/content/component-parameters.html (original)
+++ websites/production/tapestry/content/component-parameters.html Wed Jul 15 09:20:19 2015
@@ -65,11 +65,11 @@
 </div></div><p>A component may have any number of parameters. Each parameter has a specific name, a specific Java type (which may be a primitive value), and may be <em>optional</em> or <em>required</em>.</p><p>Within a component class, parameters are declared by using the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Parameter.html">Parameter</a> annotation on a private field, as we'll see below.</p><p><span class="confluence-anchor-link" id="ComponentParameters-bindingparameters"></span></p><h1 id="ComponentParameters-ParameterBindings">Parameter Bindings</h1><p>In Tapestry, a parameter is not a slot into which data is pushed: it is a <em>connection</em> between a field of the component (marked with the @Parameter annotation) and a property or resource of the component's container. (Components can be nested, so the container can be either the page or another component.)</p><div class="navmenu" style="float:r
 ight; background:white; margin:3px; padding:3px">
 <div class="panel" style="border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;"><b>Contents</b></div><div class="panelContent">
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1435440027105 {padding: 0px;}
-div.rbtoc1435440027105 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1435440027105 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1436951974687 {padding: 0px;}
+div.rbtoc1436951974687 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1436951974687 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1435440027105">
+/*]]>*/</style><div class="toc-macro rbtoc1436951974687">
 <ul class="toc-indentation"><li><a shape="rect" href="#ComponentParameters-ParameterBindings">Parameter Bindings</a></li><li><a shape="rect" href="#ComponentParameters-BindingExpressions">Binding Expressions</a></li><li><a shape="rect" href="#ComponentParameters-@Parameterannotation">@Parameter annotation</a></li><li><a shape="rect" href="#ComponentParameters-Don'tusethe${...}syntax!">Don't use the ${...} syntax!</a></li><li><a shape="rect" href="#ComponentParameters-InformalParameters">Informal Parameters</a></li><li><a shape="rect" href="#ComponentParameters-ParametersAreBi-Directional">Parameters Are Bi-Directional</a></li><li><a shape="rect" href="#ComponentParameters-InheritedParameterBindings">Inherited Parameter Bindings</a></li><li><a shape="rect" href="#ComponentParameters-ComputedParameterBindingDefaults">Computed Parameter Binding Defaults</a></li><li><a shape="rect" href="#ComponentParameters-UnboundParameters">Unbound Parameters</a></li><li><a shape="rect" href="#Compon
 entParameters-ParameterTypeCoercion">Parameter Type Coercion</a></li><li><a shape="rect" href="#ComponentParameters-ParameterNames">Parameter Names</a></li><li><a shape="rect" href="#ComponentParameters-DeterminingifBound">Determining if Bound</a></li><li><a shape="rect" href="#ComponentParameters-PublishingParameters">Publishing Parameters</a></li></ul>
 </div>
 </div></div></div><p>&#160;</p><p>The connection between a component and a property (or resource) of its container is called a <em>binding</em>. The binding is two-way: the component can read the bound property by reading its parameter field. Likewise, a component that updates its parameter field will update the bound property.</p><p>This is important in a lot of cases; for example a TextField component can read <em>and update</em> the property bound to its value parameter. It reads the value when rendering, but updates the value when the form is submitted.</p><p>The component listed below is a looping component; it renders its body a number of times, defined by its <code>start</code> and <code>end</code> parameters (which set the boundaries of the loop). The component can update a <code>result</code> parameter bound to a property of its container; it will automatically count up or down depending on whether <code>start</code> or <code>end</code> is larger.</p><div class="code panel 
 pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">

Modified: websites/production/tapestry/content/component-rendering.html
==============================================================================
--- websites/production/tapestry/content/component-rendering.html (original)
+++ websites/production/tapestry/content/component-rendering.html Wed Jul 15 09:20:19 2015
@@ -69,7 +69,7 @@
 <p>The rendering of each component is divided into a number of phases, illustrated below.</p>
 
 
-<p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="component-rendering.data/tapestry_render_phases.png" data-image-src="/confluence/download/attachments/21792222/tapestry_render_phases.png?version=3&amp;modificationDate=1381833043000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="35192977" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="tapestry_render_phases.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="21792222" data-linked-resource-container-version="27" title="Component Render Phases"></span><br clear="none">
+<p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="component-rendering.data/tapestry_render_phases.png" data-image-src="/confluence/download/attachments/21792222/tapestry_render_phases.png?version=3&amp;modificationDate=1381833043000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="35192977" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="tapestry_render_phases.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="21792222" data-linked-resource-container-version="28" title="Component Render Phases"></span><br clear="none">
 Each of the orange phases (SetupRender, BeginRender, BeforeRenderBody, etc.) corresponds to an annotation you may place on one or more methods of your class. The annotation directs Tapestry to invoke your method as part of that phase.</p>
 
 <p>Methods marked with these annotations are called <strong>render phase methods</strong>.</p>

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 Wed Jul 15 09:20:19 2015
@@ -81,7 +81,7 @@ table.ScrollbarTable td.ScrollbarNextIco
   &lt;localRepository&gt;C:/Users/joeuser/.m2/repository&lt;/localRepository&gt;
 &lt;/settings&gt;
 ]]></script>
-</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><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/select-a-wizard.png" data-image-src="/confluence/download/attachments/23340356/select-a-wizard.png?version=1&amp;modificationDate=1416675284000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="49184818" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="select-a-wizard.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="63"></span></p><p>T
 hen 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, as shown below:</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/add-archetype-catalog.png" data-image-src="/confluence/download/attachments/23340356/add-archetype-catalog.png?version=1&amp;modificationDate=1416675354000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="49184819" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="add-archetype-catalog.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-
 container-version="63"></span></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="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>If you want to try an unreleased (alpha or beta) version of Tapestry, use <span class="nolink">the 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 (shown below), select the newly-added Apache Tapestry catalog, then select the "quickstart" artifact from the list and click <strong>Next</strong>.</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedde
 d-image" src="creating-the-skeleton-application.data/select-archetype.png" data-image-src="/confluence/download/attachments/23340356/select-archetype.png?version=1&amp;modificationDate=1416675447000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="49184820" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="select-archetype.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="63"></span></p><p>Fill in the Group Id, Artifact Id, Version and Package&#160; as follows:</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/specify-archetype-parameters.png" data-image-src="/confluence/download/attachments/23340356/specify-archetype-parameters.png?version=1&amp;modificationDate=1416675494000&amp;api
 =v2" data-unresolved-comment-count="0" data-linked-resource-id="49184821" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="specify-archetype-parameters.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="63"></span></p><p>then click Finish.</p><div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The first time you use Maven, project creation may take a while as Maven downloads a large number of JAR dependencies for Maven, Jetty and Tapestry. 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></div></div><p>After Maven finishes, you'll see 
 a new directory, <code>tutorial in your Package Explorer view in Eclipse.</code></p><h2 id="CreatingTheSkeletonApplication-RunningtheApplicationusingJetty">Running the Application using Jetty</h2><p>One of the first things you can do is use Maven to run Jetty directly.</p><p>Right-click on the tutorial project in your Package Explorer view and select <strong>Run As &gt; Maven Build... &gt;</strong>, enter a Goal of <strong>"jetty:run"</strong>. This creates a "Run Configuration" named "tutorial1" that we'll use throughout this tutorial to start the app:</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/run-configuration.png" data-image-src="/confluence/download/attachments/23340356/run-configuration.png?version=2&amp;modificationDate=1416744425000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="49184822" data-linked-resource-version="2" data-linked-resource-type="attachment" 
 data-linked-resource-default-alias="run-configuration.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="63"></span></p><p>Tapestry runs best with a couple of additional options; click the "JRE" tab and enter the following VM Arguments:</p><pre></pre><p>-XX:MaxPermSize=256M</p><p>-Xmx600m</p><p>-Dtapestry.execution-mode=development</p><p><code><em>(If you're using JDK 1.8 then you should omit the MaxPermSize argument.)</em></code></p><p><code>Here's how it looks:<br clear="none"></code></p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/run-configuration-jre.png" data-image-src="/confluence/download/attachments/23340356/run-configuration-jre.png?version=2&amp;modificationDate=1416744425000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="49184
 838" data-linked-resource-version="2" data-linked-resource-type="attachment" data-linked-resource-default-alias="run-configuration-jre.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="63"></span></p><p>Finally, click <strong>Run</strong>.</p><p>Again, the first time, there's a dizzying number of downloads, but before you know it, the Jetty servlet container is up and running.</p><p>Once Jetty is initialized (which only takes a few seconds after the first time), you'll see the following in your console:</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/console-startup.png" data-image-src="/confluence/download/attachments/23340356/console-startup.png?version=2&amp;modificationDate=1416797756000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id=
 "49184841" data-linked-resource-version="2" data-linked-resource-type="attachment" data-linked-resource-default-alias="console-startup.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="63"></span></p><p><em>Note the red square icon above. Later on you'll use that icon to stop Jetty before restarting the app.</em></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><span class="confluence-embedded-file-wrapper image-left-wrapper"><img class="confluence-embedded-image confluence-content-image-border image-left" src="creating-the-skeleton-application.data/startpage.png" data-image-src="/confluence/download/attachments/23340356/startpage.png?version=7&amp;modificationDate=1416798158000&amp;api=v2" d
 ata-unresolved-comment-count="0" data-linked-resource-id="23527711" data-linked-resource-version="7" data-linked-resource-type="attachment" data-linked-resource-default-alias="startpage.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="63"></span></p><p>&#160;</p><div style="clear: both"></div><p style="text-align: left;">The date and time in the middle of the page shows that this is a live application.</p><p>This is a complete little web app; 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 several 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 appli
 cation will include a Layout component to provide that commonness.)</span></p><p>&#160;<style type="text/css">/*<![CDATA[*/
+</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><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/select-a-wizard.png" data-image-src="/confluence/download/attachments/23340356/select-a-wizard.png?version=1&amp;modificationDate=1416675284000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="49184818" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="select-a-wizard.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="64"></span></p><p>T
 hen 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, as shown below:</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/add-archetype-catalog.png" data-image-src="/confluence/download/attachments/23340356/add-archetype-catalog.png?version=1&amp;modificationDate=1416675354000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="49184819" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="add-archetype-catalog.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-
 container-version="64"></span></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="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>If you want to try an unreleased (alpha or beta) version of Tapestry, use <span class="nolink">the 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 (shown below), select the newly-added Apache Tapestry catalog, then select the "quickstart" artifact from the list and click <strong>Next</strong>.</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedde
 d-image" src="creating-the-skeleton-application.data/select-archetype.png" data-image-src="/confluence/download/attachments/23340356/select-archetype.png?version=1&amp;modificationDate=1416675447000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="49184820" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="select-archetype.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="64"></span></p><p>Fill in the Group Id, Artifact Id, Version and Package&#160; as follows:</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/specify-archetype-parameters.png" data-image-src="/confluence/download/attachments/23340356/specify-archetype-parameters.png?version=1&amp;modificationDate=1416675494000&amp;api
 =v2" data-unresolved-comment-count="0" data-linked-resource-id="49184821" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="specify-archetype-parameters.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="64"></span></p><p>then click Finish.</p><div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The first time you use Maven, project creation may take a while as Maven downloads a large number of JAR dependencies for Maven, Jetty and Tapestry. 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></div></div><p>After Maven finishes, you'll see 
 a new directory, <code>tutorial in your Package Explorer view in Eclipse.</code></p><h2 id="CreatingTheSkeletonApplication-RunningtheApplicationusingJetty">Running the Application using Jetty</h2><p>One of the first things you can do is use Maven to run Jetty directly.</p><p>Right-click on the tutorial project in your Package Explorer view and select <strong>Run As &gt; Maven Build... &gt;</strong>, enter a Goal of <strong>"jetty:run"</strong>. This creates a "Run Configuration" named "tutorial1" that we'll use throughout this tutorial to start the app:</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/run-configuration.png" data-image-src="/confluence/download/attachments/23340356/run-configuration.png?version=2&amp;modificationDate=1416744425000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="49184822" data-linked-resource-version="2" data-linked-resource-type="attachment" 
 data-linked-resource-default-alias="run-configuration.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="64"></span></p><p>Tapestry runs best with a couple of additional options; click the "JRE" tab and enter the following VM Arguments:</p><pre></pre><p>-XX:MaxPermSize=256M</p><p>-Xmx600m</p><p>-Dtapestry.execution-mode=development</p><p><code><em>(If you're using JDK 1.8 then you should omit the MaxPermSize argument.)</em></code></p><p><code>Here's how it looks:<br clear="none"></code></p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/run-configuration-jre.png" data-image-src="/confluence/download/attachments/23340356/run-configuration-jre.png?version=2&amp;modificationDate=1416744425000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="49184
 838" data-linked-resource-version="2" data-linked-resource-type="attachment" data-linked-resource-default-alias="run-configuration-jre.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="64"></span></p><p>Finally, click <strong>Run</strong>.</p><p>Again, the first time, there's a dizzying number of downloads, but before you know it, the Jetty servlet container is up and running.</p><p>Once Jetty is initialized (which only takes a few seconds after the first time), you'll see the following in your console:</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="creating-the-skeleton-application.data/console-startup.png" data-image-src="/confluence/download/attachments/23340356/console-startup.png?version=2&amp;modificationDate=1416797756000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id=
 "49184841" data-linked-resource-version="2" data-linked-resource-type="attachment" data-linked-resource-default-alias="console-startup.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="64"></span></p><p><em>Note the red square icon above. Later on you'll use that icon to stop Jetty before restarting the app.</em></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><span class="confluence-embedded-file-wrapper image-left-wrapper"><img class="confluence-embedded-image confluence-content-image-border image-left" src="creating-the-skeleton-application.data/startpage.png" data-image-src="/confluence/download/attachments/23340356/startpage.png?version=7&amp;modificationDate=1416798158000&amp;api=v2" d
 ata-unresolved-comment-count="0" data-linked-resource-id="23527711" data-linked-resource-version="7" data-linked-resource-type="attachment" data-linked-resource-default-alias="startpage.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23340356" data-linked-resource-container-version="64"></span></p><p>&#160;</p><div style="clear: both"></div><p style="text-align: left;">The date and time in the middle of the page shows that this is a live application.</p><p>This is a complete little web app; 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 several 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 appli
 cation will include a Layout component to provide that commonness.)</span></p><p>&#160;<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;}

Modified: websites/production/tapestry/content/error-page-recipe.html
==============================================================================
--- websites/production/tapestry/content/error-page-recipe.html (original)
+++ websites/production/tapestry/content/error-page-recipe.html Wed Jul 15 09:20:19 2015
@@ -139,7 +139,7 @@ public class Error404
 
 
 ]]></script>
-</div></div><p>The end-result, in when <em>not</em> in production mode, looks like this:</p><p><span class="confluence-embedded-file-wrapper image-center-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image confluence-content-image-border image-center" width="500" src="error-page-recipe.data/Resource_not_found_.png" data-image-src="/confluence/download/attachments/23336861/Resource_not_found_.png?version=1&amp;modificationDate=1428099193000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="55476335" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="Resource_not_found_.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23336861" data-linked-resource-container-version="22"></span></p><div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-
 small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>An issue with an application that has a root Index page is that any invalid path, which would normally generate a 404 error, is instead routed to the Index page (because the invalid path looks like page's activation context). See <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/TAP5-2070">Issue TAP5-2070</a>.</p></div></div></div>
+</div></div><p>The end-result, in when <em>not</em> in production mode, looks like this:</p><p><span class="confluence-embedded-file-wrapper image-center-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image confluence-content-image-border image-center" width="500" src="error-page-recipe.data/Resource_not_found_.png" data-image-src="/confluence/download/attachments/23336861/Resource_not_found_.png?version=1&amp;modificationDate=1428099193000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="55476335" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="Resource_not_found_.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23336861" data-linked-resource-container-version="23"></span></p><div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-
 small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>An issue with an application that has a root Index page is that any invalid path, which would normally generate a 404 error, is instead routed to the Index page (because the invalid path looks like page's activation context). See <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/TAP5-2070">Issue TAP5-2070</a>.</p></div></div></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 Wed Jul 15 09:20:19 2015
@@ -231,13 +231,13 @@ public class Index
 
 
 
-<span class="gliffy-container" id="gliffy-container-24346949-4035" data-fullwidth="913" data-ceoid="24188263" data-edit="${diagramEditLink.getLinkUrl()}" data-full="/confluence/plugins/gliffy/viewer.action?inline=false&amp;pageId=24188263&amp;attachmentId=24346949&amp;name=Templates%20and%20Parameters&amp;lastPage=%2Fpages%2Fviewpage.action%3FpageId%3D24188263" data-pageid="24188263" data-filename="Templates and Parameters">
+<span class="gliffy-container" id="gliffy-container-24346949-7952" data-fullwidth="913" data-ceoid="24188263" data-edit="${diagramEditLink.getLinkUrl()}" data-full="/confluence/plugins/gliffy/viewer.action?inline=false&amp;pageId=24188263&amp;attachmentId=24346949&amp;name=Templates%20and%20Parameters&amp;lastPage=%2Fpages%2Fviewpage.action%3FpageId%3D24188263" data-pageid="24188263" data-filename="Templates and Parameters">
 
-    <map id="gliffy-map-24346949-4512" name="gliffy-map-24346949-4512"></map>
+    <map id="gliffy-map-24346949-3370" name="gliffy-map-24346949-3370"></map>
 
-    <img class="gliffy-image gliffy-image-border" id="gliffy-image-24346949-4035" 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-4512">
+    <img class="gliffy-image gliffy-image-border" id="gliffy-image-24346949-7952" 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-3370">
 
-    <map class="gliffy-dynamic" id="gliffy-dynamic-map-24346949-4035" name="gliffy-dynamic-map-24346949-4035"></map>
+    <map class="gliffy-dynamic" id="gliffy-dynamic-map-24346949-7952" name="gliffy-dynamic-map-24346949-7952"></map>
 </span>
 
 
@@ -250,9 +250,9 @@ public class Index
     return &quot;A great day to learn Tapestry&quot;;
   }
 ]]></script>
-</div></div><p>Make sure you save changes; then click the refresh link in the web browser:</p><p><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image" width="700" src="exploring-the-project.data/app-live-reload.png" data-image-src="/confluence/download/attachments/24188263/app-live-reload.png?version=5&amp;modificationDate=1416707986000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="24346955" data-linked-resource-version="5" data-linked-resource-type="attachment" data-linked-resource-default-alias="app-live-reload.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="24188263" data-linked-resource-container-version="30"></span></p><div class="navmenu" style="float:right; width:30%; background:white; margin:3px; padding:3px">
+</div></div><p>Make sure you save changes; then click the refresh link in the web browser:</p><p><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image" width="700" src="exploring-the-project.data/app-live-reload.png" data-image-src="/confluence/download/attachments/24188263/app-live-reload.png?version=5&amp;modificationDate=1416707986000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="24346955" data-linked-resource-version="5" data-linked-resource-type="attachment" data-linked-resource-default-alias="app-live-reload.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="24188263" data-linked-resource-container-version="31"></span></p><div class="navmenu" style="float:right; width:30%; background:white; margin:3px; padding:3px">
 <div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body">
-<p>If Live Class Reloading isn't working for you, check the Troubleshooting section at <a shape="rect" href="class-reloading.html" title="Class Reloading">Class Reloading</a>.</p></div></div></div><p>This is one of Tapestry's early <em>wow factor</em> features: changes to your component classes are picked up immediately (a feature we call Live Class Reloading). No restart. No re-deploy. Make the changes and see them <em>now</em>. Nothing should slow you down or get in the way of you getting your job done.</p><p>But ... what if you make a mistake? What if you got the name in the template wrong. Give it a try; in the template, change ${currentTime} to, say, ${currenTime}, and see what you get:</p><p><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image" width="700" src="exploring-the-project.data/app-error-1.png" data-image-src="/confluence/download/attachments/24188263/app-error-1.png?version=3&amp;modificationDate=141670
 7595000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="24346956" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="app-error-1.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="24188263" data-linked-resource-container-version="30"></span></p><p>This is Tapestry's exception report page. It's quite detailed. It clearly identifies what Tapestry was doing, and relates the problem to a specific line in the template, which is shown in context. Tapestry always expands out the entire stack of exceptions, because it is so common for exceptions to be thrown, caught, and re-thrown inside other exceptions. In fact, if we scroll down just a little bit, we see more detail about this exception, plus a little bit of help:</p><p><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img class="confluence-emb
 edded-image" width="700" src="exploring-the-project.data/app-error-2.png" data-image-src="/confluence/download/attachments/24188263/app-error-2.png?version=4&amp;modificationDate=1416707595000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="24346957" data-linked-resource-version="4" data-linked-resource-type="attachment" data-linked-resource-default-alias="app-error-2.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="24188263" data-linked-resource-container-version="30"></span></p><p>This is part of Tapestry's way: it not only spells out exactly what it was doing and what went wrong, but it even helps you find a solution; here it tells you the names of properties you could have used.</p><div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class
 ="confluence-information-macro-body"><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>Tapestry displays the stack trace of the deepest exception, along with lots of details about the run-time environment: details about the current request, the HttpSession (if one exists), and even a detailed list of all JVM system properties. Scroll down to see all this information.</p><p>Next up: let's play a game...</p><hr><p>&#160;</p><style type="text/css">/*<![CDATA[*/
+<p>If Live Class Reloading isn't working for you, check the Troubleshooting section at <a shape="rect" href="class-reloading.html" title="Class Reloading">Class Reloading</a>.</p></div></div></div><p>This is one of Tapestry's early <em>wow factor</em> features: changes to your component classes are picked up immediately (a feature we call Live Class Reloading). No restart. No re-deploy. Make the changes and see them <em>now</em>. Nothing should slow you down or get in the way of you getting your job done.</p><p>But ... what if you make a mistake? What if you got the name in the template wrong. Give it a try; in the template, change ${currentTime} to, say, ${currenTime}, and see what you get:</p><p><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image" width="700" src="exploring-the-project.data/app-error-1.png" data-image-src="/confluence/download/attachments/24188263/app-error-1.png?version=3&amp;modificationDate=141670
 7595000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="24346956" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="app-error-1.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="24188263" data-linked-resource-container-version="31"></span></p><p>This is Tapestry's exception report page. It's quite detailed. It clearly identifies what Tapestry was doing, and relates the problem to a specific line in the template, which is shown in context. Tapestry always expands out the entire stack of exceptions, because it is so common for exceptions to be thrown, caught, and re-thrown inside other exceptions. In fact, if we scroll down just a little bit, we see more detail about this exception, plus a little bit of help:</p><p><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img class="confluence-emb
 edded-image" width="700" src="exploring-the-project.data/app-error-2.png" data-image-src="/confluence/download/attachments/24188263/app-error-2.png?version=4&amp;modificationDate=1416707595000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="24346957" data-linked-resource-version="4" data-linked-resource-type="attachment" data-linked-resource-default-alias="app-error-2.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="24188263" data-linked-resource-container-version="31"></span></p><p>This is part of Tapestry's way: it not only spells out exactly what it was doing and what went wrong, but it even helps you find a solution; here it tells you the names of properties you could have used.</p><div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class
 ="confluence-information-macro-body"><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>Tapestry displays the stack trace of the deepest exception, along with lots of details about the run-time environment: details about the current request, the HttpSession (if one exists), and even a detailed list of all JVM system properties. Scroll down to see all this information.</p><p>Next up: let's play a game...</p><hr><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;}

Modified: websites/production/tapestry/content/forms-and-validation.html
==============================================================================
--- websites/production/tapestry/content/forms-and-validation.html (original)
+++ websites/production/tapestry/content/forms-and-validation.html Wed Jul 15 09:20:19 2015
@@ -128,7 +128,7 @@ public class Login {
 
 &lt;/html&gt;
 ]]></script>
-</div></div><p>Rendering the page gives a reasonable pleasing first pass:</p><p><span class="confluence-embedded-file-wrapper image-center-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image confluence-content-image-border image-center" width="500" src="forms-and-validation.data/newapp_com_example.png" data-image-src="/confluence/download/attachments/22872109/newapp_com_example.png?version=3&amp;modificationDate=1428088849000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="55476324" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="newapp_com_example.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="22872109" data-linked-resource-container-version="44"></span></p><p>The Tapestry Form component is responsible for creating the necessary URL for the form submission (this is Tapestry's responsi
 bility, not yours).</p><p><span style="line-height: 1.4285715;">For the TextField, we provide a component id, userName. We could specify the </span><code style="line-height: 1.4285715;">value</code><span style="line-height: 1.4285715;"> parameter, but the default is to match the TextField's id against a property of the container, the Login page, if such a property exists.&#160;</span></p><p>As a rule of thumb, you should always give your fields a specific id (this id will be used to generate the <code>name</code> and <code>id</code> attributes of the rendered tag). Being allowed to omit the value parameter helps to keep the template from getting too cluttered.</p><p>The FormGroup mixin decorates the field with some additional markup, including a &lt;label&gt; element; this leverages more of Bootstrap.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>userName component as rendered</b></div><div clas
 s="codeContent panelContent pdl">
+</div></div><p>Rendering the page gives a reasonable pleasing first pass:</p><p><span class="confluence-embedded-file-wrapper image-center-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image confluence-content-image-border image-center" width="500" src="forms-and-validation.data/newapp_com_example.png" data-image-src="/confluence/download/attachments/22872109/newapp_com_example.png?version=3&amp;modificationDate=1428088849000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="55476324" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="newapp_com_example.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="22872109" data-linked-resource-container-version="45"></span></p><p>The Tapestry Form component is responsible for creating the necessary URL for the form submission (this is Tapestry's responsi
 bility, not yours).</p><p><span style="line-height: 1.4285715;">For the TextField, we provide a component id, userName. We could specify the </span><code style="line-height: 1.4285715;">value</code><span style="line-height: 1.4285715;"> parameter, but the default is to match the TextField's id against a property of the container, the Login page, if such a property exists.&#160;</span></p><p>As a rule of thumb, you should always give your fields a specific id (this id will be used to generate the <code>name</code> and <code>id</code> attributes of the rendered tag). Being allowed to omit the value parameter helps to keep the template from getting too cluttered.</p><p>The FormGroup mixin decorates the field with some additional markup, including a &lt;label&gt; element; this leverages more of Bootstrap.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>userName component as rendered</b></div><div clas
 s="codeContent panelContent pdl">
 <script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[&lt;div class=&quot;form-group&quot;&gt;
   &lt;label for=&quot;userName&quot; class=&quot;control-label&quot;&gt;User Name&lt;/label&gt;
   &lt;input id=&quot;userName&quot; class=&quot;form-control&quot; name=&quot;userName&quot; type=&quot;text&quot;&gt;
@@ -142,7 +142,7 @@ public class Login {
   @Property
   @Validate(&quot;required&quot;)
  private String password;]]></script>
-</div></div><p>Now, rebuild the app, refresh the browser, and just hit enter:</p><p><span class="confluence-embedded-file-wrapper image-center-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image confluence-content-image-border image-center" width="500" src="forms-and-validation.data/newapp_com_example.png" data-image-src="/confluence/download/attachments/22872109/newapp_com_example.png?version=3&amp;modificationDate=1428088849000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="55476324" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="newapp_com_example.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="22872109" data-linked-resource-container-version="44"></span></p><p>The form has updated, in place, to present the errors. You will not be able to submit the form until some value is provide
 d for each field.</p><h2 id="FormsandValidation-ServerSideValidation">Server Side Validation</h2><p>Some validation can't, or shouldn't, be done on the client side. How do we know if the password is correct? Short of downloading all users and passwords to the client, we really need to do the validation on the server.</p><p>In fact, all client-side validation (via the validate parameter, or&#160;@Validate annotation) is performed again on the server.</p><p>It is also possible to perform extra validation there.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Now, rebuild the app, refresh the browser, and just hit enter:</p><p><span class="confluence-embedded-file-wrapper image-center-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image confluence-content-image-border image-center" width="500" src="forms-and-validation.data/newapp_com_example.png" data-image-src="/confluence/download/attachments/22872109/newapp_com_example.png?version=3&amp;modificationDate=1428088849000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="55476324" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="newapp_com_example.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="22872109" data-linked-resource-container-version="45"></span></p><p>The form has updated, in place, to present the errors. You will not be able to submit the form until some value is provide
 d for each field.</p><h2 id="FormsandValidation-ServerSideValidation">Server Side Validation</h2><p>Some validation can't, or shouldn't, be done on the client side. How do we know if the password is correct? Short of downloading all users and passwords to the client, we really need to do the validation on the server.</p><p>In fact, all client-side validation (via the validate parameter, or&#160;@Validate annotation) is performed again on the server.</p><p>It is also possible to perform extra validation there.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[  /**
      * Do the cross-field validation
      */
@@ -154,7 +154,7 @@ public class Login {
     }
 
 ]]></script>
-</div></div><p>This is the validate event handler from the loginForm component. It is invoked once all the components have had a chance to read values out of the request, do their own validations, and update the properties they are bound to.</p><p>In this case, the authenticator is used to decide if the userName and password is valid. In a real application, this would be where a database or other external service was consulted.</p><p>If the combination is not valid, then the password field is marked as in error. The form is used to record an error, about a component (the passwordField) with an error message.</p><p>Entering any two values into the form and submitting will cause a round trip; the form will re-render to present the error to the user:</p><p><span class="confluence-embedded-file-wrapper image-center-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image confluence-content-image-border image-center" width="500" src="forms-and-validation.data/newapp
 _com_example.png" data-image-src="/confluence/download/attachments/22872109/newapp_com_example.png?version=3&amp;modificationDate=1428088849000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="55476324" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="newapp_com_example.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="22872109" data-linked-resource-container-version="44"></span></p><p>Notice that the cursor is placed directly into the password field.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>In versions of Tapestry prior to 5.4, a form with validation errors would result in a redirect response to the client; often, temporary server-
 side data (such as the userName field) would be lost. Starting in 5.4, submitting a form with validation errors results in the new page being rendered in the same request as the form submission.</p></div></div><p>&#160;</p><h2 id="FormsandValidation-CustomizingValidationMessages">Customizing Validation Messages</h2><p>Each validator (such as "required" or "minlength") has a default message used (on the client side and the server side) when the constraint is violated; that is, when the user input is not valid.</p><p>The message can be customized by adding an entry to the page's <a shape="rect" href="localization.html">message catalog</a> (or the containing component's message catalog). As with any localized property, this can also go into the application's message catalog.</p><p>The first key checked is <em>formId</em>-<em>fieldId</em>-<em>validatorName</em>-message.</p><ul><li>formId: the local component id of the Form component</li><li>fieldId: the local component id of the field (
 TextField, etc.)</li><li>validatorName: the name of the validator, i.e., "required" or "minlength"<br clear="none"> If there is not message for that key, a second check is made, for <em>fieldId</em>-<em>validatorName</em>-message.</li></ul><p>If that does not match a message, then the built-in default validation message is used.</p><h3 id="FormsandValidation-CustomizingValidationMessagesforBeanEditForm">Customizing Validation Messages for BeanEditForm</h3><p>The <a shape="rect" href="beaneditform-guide.html">BeanEditForm</a> component also supports validation message customizing. The search for messages is similar; the <em>formId</em> is the component id of the BeanEditForm component (not the Form component it contains). The <em>fieldId</em> is the property name.</p><h2 id="FormsandValidation-ConfiguringValidatorContraintsintheMessageCatalog">Configuring Validator Contraints in the Message Catalog</h2><p>It is possible to omit the validation constraint from the validate parameter (o
 r @Validator annotation), in which case it is expected to be stored in the message catalog.</p><p>This is useful when the validation constraint is awkward to enter inline, such as a regular expression for use with the regexp validator.</p><p>The key here is similar to customizing the validation message: <em>formId</em>-<em>fieldId</em>-<em>validatorName</em> or just <em>fieldId</em>-<em>validatorName</em>.</p><p>For example, your template may have the following:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>This is the validate event handler from the loginForm component. It is invoked once all the components have had a chance to read values out of the request, do their own validations, and update the properties they are bound to.</p><p>In this case, the authenticator is used to decide if the userName and password is valid. In a real application, this would be where a database or other external service was consulted.</p><p>If the combination is not valid, then the password field is marked as in error. The form is used to record an error, about a component (the passwordField) with an error message.</p><p>Entering any two values into the form and submitting will cause a round trip; the form will re-render to present the error to the user:</p><p><span class="confluence-embedded-file-wrapper image-center-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image confluence-content-image-border image-center" width="500" src="forms-and-validation.data/newapp
 _com_example.png" data-image-src="/confluence/download/attachments/22872109/newapp_com_example.png?version=3&amp;modificationDate=1428088849000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="55476324" data-linked-resource-version="3" data-linked-resource-type="attachment" data-linked-resource-default-alias="newapp_com_example.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="22872109" data-linked-resource-container-version="45"></span></p><p>Notice that the cursor is placed directly into the password field.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>In versions of Tapestry prior to 5.4, a form with validation errors would result in a redirect response to the client; often, temporary server-
 side data (such as the userName field) would be lost. Starting in 5.4, submitting a form with validation errors results in the new page being rendered in the same request as the form submission.</p></div></div><p>&#160;</p><h2 id="FormsandValidation-CustomizingValidationMessages">Customizing Validation Messages</h2><p>Each validator (such as "required" or "minlength") has a default message used (on the client side and the server side) when the constraint is violated; that is, when the user input is not valid.</p><p>The message can be customized by adding an entry to the page's <a shape="rect" href="localization.html">message catalog</a> (or the containing component's message catalog). As with any localized property, this can also go into the application's message catalog.</p><p>The first key checked is <em>formId</em>-<em>fieldId</em>-<em>validatorName</em>-message.</p><ul><li>formId: the local component id of the Form component</li><li>fieldId: the local component id of the field (
 TextField, etc.)</li><li>validatorName: the name of the validator, i.e., "required" or "minlength"<br clear="none"> If there is not message for that key, a second check is made, for <em>fieldId</em>-<em>validatorName</em>-message.</li></ul><p>If that does not match a message, then the built-in default validation message is used.</p><h3 id="FormsandValidation-CustomizingValidationMessagesforBeanEditForm">Customizing Validation Messages for BeanEditForm</h3><p>The <a shape="rect" href="beaneditform-guide.html">BeanEditForm</a> component also supports validation message customizing. The search for messages is similar; the <em>formId</em> is the component id of the BeanEditForm component (not the Form component it contains). The <em>fieldId</em> is the property name.</p><h2 id="FormsandValidation-ConfiguringValidatorContraintsintheMessageCatalog">Configuring Validator Contraints in the Message Catalog</h2><p>It is possible to omit the validation constraint from the validate parameter (o
 r @Validator annotation), in which case it is expected to be stored in the message catalog.</p><p>This is useful when the validation constraint is awkward to enter inline, such as a regular expression for use with the regexp validator.</p><p>The key here is similar to customizing the validation message: <em>formId</em>-<em>fieldId</em>-<em>validatorName</em> or just <em>fieldId</em>-<em>validatorName</em>.</p><p>For example, your template may have the following:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[  &lt;t:textfield t:id=&quot;ssn&quot; validate=&quot;required,regexp&quot;/&gt;
 ]]></script>
 </div></div><p>And your message catalog can contain:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">

Modified: websites/production/tapestry/content/getting-started.html
==============================================================================
--- websites/production/tapestry/content/getting-started.html (original)
+++ websites/production/tapestry/content/getting-started.html Wed Jul 15 09:20:19 2015
@@ -157,7 +157,7 @@ Application 'app' (version 1.0-SNAPSHOT-
 [INFO] Started Jetty Server
 
 </pre>
-</div></div><p>After some more one-time downloads you can open your browser to <a shape="rect" class="external-link" href="http://localhost:8080/newapp" >http://localhost:8080/newapp</a> to see the application running:</p><p><span class="confluence-embedded-file-wrapper image-center-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image confluence-content-image-border image-center" height="488" width="500" src="getting-started.data/newapp_Index.png" data-image-src="/confluence/download/attachments/23334911/newapp_Index.png?version=1&amp;modificationDate=1428074330000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="55476322" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="newapp_Index.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23334911" data-linked-resource-container-version="56"></spa
 n></p><p>The application consists of three pages sharing a common look and feel. The initial page, Index, allows you to perform some basic operations.</p><p>You can also load the newly-created project it into any IDE and start coding. See the next section on where to find the different components of the application.</p><h2 id="GettingStarted-Exploringthegeneratedproject">Exploring the generated project</h2><p>The archetype creates the following files:</p><div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+</div></div><p>After some more one-time downloads you can open your browser to <a shape="rect" class="external-link" href="http://localhost:8080/newapp" >http://localhost:8080/newapp</a> to see the application running:</p><p><span class="confluence-embedded-file-wrapper image-center-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image confluence-content-image-border image-center" height="488" width="500" src="getting-started.data/newapp_Index.png" data-image-src="/confluence/download/attachments/23334911/newapp_Index.png?version=1&amp;modificationDate=1428074330000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="55476322" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="newapp_Index.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23334911" data-linked-resource-container-version="57"></spa
 n></p><p>The application consists of three pages sharing a common look and feel. The initial page, Index, allows you to perform some basic operations.</p><p>You can also load the newly-created project it into any IDE and start coding. See the next section on where to find the different components of the application.</p><h2 id="GettingStarted-Exploringthegeneratedproject">Exploring the generated project</h2><p>The archetype creates the following files:</p><div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
 <pre>newapp/
 &#9500;&#9472;&#9472; build.gradle
 &#9500;&#9472;&#9472; gradle

Modified: websites/production/tapestry/content/hibernate-statistics.html
==============================================================================
--- websites/production/tapestry/content/hibernate-statistics.html (original)
+++ websites/production/tapestry/content/hibernate-statistics.html Wed Jul 15 09:20:19 2015
@@ -65,9 +65,9 @@
 <p>If you enable Hibernate statistics by setting the property <em>hibernate.generate_statistics</em> to <em>true</em>, Hibernate will expose a number of useful metrics. The page "Statistics" is used to expose these metrics. This page is only available in development mode.</p>
 
 
-<p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="hibernate-statistics.data/hibernate-statistics.png" data-image-src="/confluence/download/attachments/23338472/hibernate-statistics.png?version=1&amp;modificationDate=1293570203000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="24347136" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="hibernate-statistics.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23338472" data-linked-resource-container-version="16"></span></p>
+<p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="hibernate-statistics.data/hibernate-statistics.png" data-image-src="/confluence/download/attachments/23338472/hibernate-statistics.png?version=1&amp;modificationDate=1293570203000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="24347136" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="hibernate-statistics.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23338472" data-linked-resource-container-version="17"></span></p>
 
-<p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="hibernate-statistics.data/hibernate-statistics-2.png" data-image-src="/confluence/download/attachments/23338472/hibernate-statistics-2.png?version=1&amp;modificationDate=1293570203000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="24347137" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="hibernate-statistics-2.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23338472" data-linked-resource-container-version="16"></span></p>
+<p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="hibernate-statistics.data/hibernate-statistics-2.png" data-image-src="/confluence/download/attachments/23338472/hibernate-statistics-2.png?version=1&amp;modificationDate=1293570203000&amp;api=v2" data-unresolved-comment-count="0" data-linked-resource-id="24347137" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="hibernate-statistics-2.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="23338472" data-linked-resource-container-version="17"></span></p>
 
 <h1 id="HibernateStatistics-HibernateConfigurationtoenabletheStatistics">Hibernate Configuration to enable the Statistics</h1>