Modified: 
websites/production/tapestry/content/overriding-exception-reporting.html
==============================================================================
--- websites/production/tapestry/content/overriding-exception-reporting.html 
(original)
+++ websites/production/tapestry/content/overriding-exception-reporting.html 
Sun Apr 26 21:22:55 2020
@@ -85,20 +85,22 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="error-page-recipe.html">Error Page Recipe</a>
+                        <a  
href="overriding-exception-reporting.html">Overriding Exception Reporting</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="specific-errors-faq.html">Specific Errors 
FAQ</a>
@@ -107,10 +109,19 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  
href="overriding-exception-reporting.html">Overriding Exception Reporting</a>
+                        <a  href="error-page-recipe.html">Error Page Recipe</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a  href="runtime-exceptions.html">Runtime 
Exceptions</a>
                 
                         
                     </div>
@@ -119,13 +130,13 @@
 
 
 <p>Of course, one of the first questions anyone asks is "How do I turn it 
off?" This exception reporting is very helpful for developers but its easy to 
see it as terrifying for potential users. Catching runtime exceptions can be a 
very useful way of handling rarely occurring exceptions even in production, and 
there's no reason to throw away Tapestry's default error reporting just to 
handle a few specific exceptions. From version 5.4 (for previous versions, the 
same functionality is available as a <a  class="external-link" 
href="http://www.tynamo.org/tapestry-exceptionpage+guide/"; 
rel="nofollow">third-party module tapestry-exceptionpage</a>), you can 
contribute exception handles and/or exception pages for specific exception 
types. Refer back to&#160;<a  href="runtime-exceptions.html">Runtime 
Exceptions</a> page for more information. Read on if you want to completely 
replace Tapestry's default exception handling.</p><h2 
id="OverridingExceptionReporting-Version1:ReplacingtheExceptionRe
 portPage">Version 1: Replacing the Exception Report Page</h2><p>Let's start 
with a page that fires an exception from an event handler method.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 
1px;"><b>ActionFail.tml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;"> &lt;html 
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"; t:type="layout" 
title="Action Fail"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default"> &lt;html 
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"; t:type="layout" 
title="Action Fail"&gt;
         &lt;p&gt;
             &lt;t:actionlink t:id="fail" class="btn btn-large 
btn-warning"&gt;Click for Exception&lt;/t:actionlink&gt;
         &lt;/p&gt;
 &lt;/html&gt;</pre>
 </div></div><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>Index.java</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">package com.example.newapp.pages;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">package 
com.example.newapp.pages;
 
 public class ActionFail {
     void onActionFromFail() {
@@ -134,7 +145,7 @@ public class ActionFail {
 }
 </pre>
 </div></div><p>With production mode disabled, clicking the link displays the 
default exception report page:</p><p>&#160;</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="overriding-exception-reporting.data/actionfail_-_top.png"></span></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="overriding-exception-reporting.data/Application_Exception.png"></span></p><p>&#160;</p><p>The
 easy way to override the exception report is to provide an ExceptionReport 
page that overrides the one provided with the framework.</p><p>This is as easy 
as providing a page named "ExceptionReport". It must implement the <a  
class="external-link" href="http://tapestry.apache.org/tapestry5/apidocs/org/
 apache/tapestry5/services/ExceptionReporter.html">ExceptionReporter</a> 
interface.</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>ExceptionReport.tml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">&lt;html t:type="layout" title="Exception"
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">&lt;html t:type="layout" 
title="Exception"
       xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
 
 
@@ -153,7 +164,7 @@ public class ActionFail {
 &lt;/html&gt;
 </pre>
 </div></div><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>ExceptionReport.java</b></div><div class="codeContent panelContent 
pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">package com.example.newapp.pages;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">package 
com.example.newapp.pages;
 
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.services.ExceptionReporter;
@@ -173,7 +184,7 @@ public class ExceptionReport implements
 }
 </pre>
 </div></div><p>The end result is a customized exception report 
page.</p><p>&#160;</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="overriding-exception-reporting.data/customer_exception_report_-_open_1.png"></span></p><h2
 
id="OverridingExceptionReporting-Version2:OverridingtheRequestExceptionHandler">Version
 2: Overriding the RequestExceptionHandler</h2><p>The previous example will 
display a link back to the Index page of the application. Another alternative 
is to display the error &lt;on&gt; the Index page. This requires a different 
approach: overriding the service responsible for reporting request 
exceptions.</p><p>The service <a  class="external-link" 
href="http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/services/RequestExceptionHandler.html";>RequestExceptionHandler</a>
 is responsible for this.</p><p>By rep
 lacing the default implementation of this service with our own implementation, 
we can take control over exactly what happens when a request exception 
occurs.</p><p>We'll do this in two steps. First, we'll extend the Index page to 
serve as an ExceptionReporter. Second, we'll override the default 
RequestExceptionHandler to use the Index page instead of the ExceptionReport 
page. Of course, this is just one approach.</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>Index.tml (partial)</b></div><div 
class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;"> &lt;t:if test="message"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default"> &lt;t:if test="message"&gt;
     &lt;div class="panel panel-danger"&gt;
         &lt;div class="panel-heading"&gt;An exception has occurred.&lt;/div&gt;
         &lt;div class="panel-body"&gt;
@@ -182,7 +193,7 @@ public class ExceptionReport implements
     &lt;/div&gt;
  &lt;/t:if&gt;</pre>
 </div></div><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>Index.java</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class Index implements ExceptionReporter
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">public class Index 
implements ExceptionReporter
 {
        @Property
        private String message;
@@ -199,7 +210,7 @@ public class ExceptionReport implements
   ...
 }</pre>
 </div></div><p>The above defines a new property, message, on the Index page. 
The @Persist annotation indicates that values assigned to the field will 
persist from one request to another. The use of FLASH for the persistence 
strategy indicates that the value will be used until the next time the page 
renders, then the value will be discarded.</p><p>The message property is set 
from the thrown runtime exception.</p><p>The remaining changes take place 
inside AppModule.</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>AppModule.java (partial)</b></div><div class="codeContent panelContent 
pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">    public RequestExceptionHandler 
buildAppRequestExceptionHandler(
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">    public 
RequestExceptionHandler buildAppRequestExceptionHandler(
             final Logger logger,
             final ResponseRenderer renderer,
             final ComponentSource componentSource)
@@ -229,7 +240,7 @@ public class ExceptionReport implements
     }
 </pre>
 </div></div><p>First we define the new service using a service builder method. 
This is an alternative to the <code>bind()</code> method; we define the 
service, its interface type (the return type of the method) and the service id 
(the part that follows "build" is the method name) and provide the 
implementation inline. A service builder method must return the service 
implementation, here implemented as an inner class.</p><p>The Logger resource 
that is passed into the builder method is the Logger appropriate for the 
service. ResponseRenderer and ComponentSource are two services defined by 
Tapestry.</p><p>With this in place, there are now two different services that 
implement the RequestExceptionHandler interface: the default one built into 
Tapestry (whose service id is "RequestExceptionHandler") and the new one 
defined in this module, "AppRequestExceptionHandler"). Without a little more 
work, Tapestry will be unable to determine which one to use when an exception 
does occur.</p><p>Tap
 estry has a pipeline for resolving injected dependencies; the ServiceOverride 
service is one part of that pipeline. Contributions to it are used to override 
an existing service, when the injection is exclusively by type.</p><p>Here we 
inject the AppRequestExceptionHandler service and contribute it as the override 
for type RequestExceptionHandler. The @Local annotation is used to select the 
RequestHandler service defined by this module, AppModule. Once contributed into 
ServiceOverride, it becomes the default service injected throughout the 
Registry.</p><p>This finally brings us to the point where we can see the 
result:</p><p>&#160;</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="375" width="500" 
src="overriding-exception-reporting.data/index_as_excepton_report.png"></span></p><h2
 id="OverridingExceptionReporting-Version3:DecoratingtheRe
 questExceptionHandler">Version 3: Decorating the 
RequestExceptionHandler</h2><p>A third option is available: we don't define a 
<em>new</em> service, but instead <em>decorate</em> the existing 
RequestExceptionHandler service. This approach means we don't have to make a 
contribution to the ServiceOverride service.</p><p>Service decoration is a 
powerful facility of Tapestry that is generally used to "wrap" an existing 
service with an interceptor that provides new functionality such as logging, 
security, transaction management or other cross-cutting concerns. The 
interceptor is an object that implements the same interface as the service 
being decorated, and usually delegates method invocations to it.</p><p>However, 
there's no requirement that an interceptor for a service actually invoke 
methods on the service; here we contribute a new implementation that 
<em>replaces</em> the original:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeHeader panelHeader pdl" styl
 e="border-bottom-width: 1px;"><b>AppModule.java (partial)</b></div><div 
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">    public RequestExceptionHandler 
decorateRequestExceptionHandler(
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">    public 
RequestExceptionHandler decorateRequestExceptionHandler(
             final Logger logger,
             final ResponseRenderer renderer,
             final ComponentSource componentSource,

Modified: 
websites/production/tapestry/content/page-and-component-classes-faq.html
==============================================================================
--- websites/production/tapestry/content/page-and-component-classes-faq.html 
(original)
+++ websites/production/tapestry/content/page-and-component-classes-faq.html 
Sun Apr 26 21:22:55 2020
@@ -78,11 +78,11 @@
 
       <div id="content">
                 <div id="ConfluenceContent"><h1 
id="PageAndComponentClassesFAQ-PageAndComponentClasses">Page And Component 
Classes</h1><p>Main article: <a  href="component-classes.html">Component 
Classes</a></p><h2 
id="PageAndComponentClassesFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1587536392631 {padding: 0px;}
-div.rbtoc1587536392631 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1587536392631 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1587936040458 {padding: 0px;}
+div.rbtoc1587936040458 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1587936040458 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1587536392631">
+/*]]>*/</style></p><div class="toc-macro rbtoc1587936040458">
 <ul class="toc-indentation"><li><a  
href="#PageAndComponentClassesFAQ-What'sthedifferencebetweenapageandacomponent?">What's
 the difference between a page and a component?</a></li><li><a  
href="#PageAndComponentClassesFAQ-HowdoIstoremypageclassesinadifferentpackage?">How
 do I store my page classes in a different package?</a></li><li><a  
href="#PageAndComponentClassesFAQ-Whydomyinstancevariableshavetobeprivate?">Why 
do my instance variables have to be private?</a></li><li><a  
href="#PageAndComponentClassesFAQ-Whydon'tmyinformalparametersshowupintherenderedmarkup?">Why
 don't my informal parameters show up in the rendered markup?</a></li><li><a  
href="#PageAndComponentClassesFAQ-WhydoIgetjava.lang.LinkageErrorwhenIinvokepublicmethodsofmypageclasses?">Why
 do I get java.lang.LinkageError when I invoke public methods of my page 
classes?</a></li><li><a  
href="#PageAndComponentClassesFAQ-Whichisbetter,usingmagicmethodnames(i.e.,beginRender())orannotations(i.e.BeginRender)?">Which
 is better, 
 using magic method names (i.e., beginRender()) or annotations (i.e. 
BeginRender)?</a></li><li><a  
href="#PageAndComponentClassesFAQ-WhydoIhavetoinjectapage?Whycan'tIjustcreateoneusingnew?">Why
 do I have to inject a page? Why can't I just create one using 
new?</a></li></ul>
 </div><h2 
id="PageAndComponentClassesFAQ-What'sthedifferencebetweenapageandacomponent?">What's
 the difference between a page and a component?</h2><p>There's very little 
difference between the two. Pages classes must be in the 
<em>root-package</em>.<code>pages</code> package; components must be in the 
<em>root-package</em>.<code>components</code>. Pages may provide event handlers 
for certain page-specific events (such as activate and passivate). Components 
may have parameters.</p><p>Other than that, they are more equal than they are 
different. They may have templates or may render themselves in code (pages 
usually have a template, components are more likely to render only in 
code).</p><p>The major difference is that Tapestry page templates may be stored 
in the web context directory, as if they were static files (they can't be 
accessed from the client however; a specific rule prevents access to files with 
the <code>.tml</code> extension).</p><div class="confluence-information-macro co
 nfluence-information-macro-warning"><span class="aui-icon aui-icon-small 
aui-iconfont-error confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>It is possible that this feature 
may be removed in a later release. It is preferred that page templates be 
stored on the classpath, like component templates.</p></div></div><h2 
id="PageAndComponentClassesFAQ-HowdoIstoremypageclassesinadifferentpackage?">How
 do I store my page classes in a different package?</h2><p>Tapestry is very 
rigid here; you can't. Page classes must go in 
<em>root-package</em>.<code>pages</code>, component classes in 
<em>root-package</em>.<code>components</code>, etc.</p><p>You are allowed to 
create sub-packages, to help organize your code better and more logically. For 
example, you might have 
<em>root-package</em>.<code>pages.account.ViewAccount</code>, which would have 
the page name "account/viewaccount". (<span>Tapestry would also create an alias 
"account/view", by stripping of
 f the redundant "account" suffix. Either name is equally valid in your code, 
and Tapestry will use the shorter name, "account/view" in 
URLs.)</span></p><p>In addition, it is possible to define additional root 
packages for the application:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: true; theme: Default" data-theme="Default">public static void 
contributeComponentClassResolver(Configuration&lt;LibraryMapping&gt; 
configuration) {
@@ -117,13 +117,13 @@ public class DBImage
 
 
 
-<span class="gliffy-container" id="gliffy-container-23527573-1569" 
data-fullwidth="750" data-ceoid="23335008" 
data-edit="${diagramEditLink.getLinkUrl()}" 
data-full="${diagramZoomLink.getLinkUrl()}" data-filename="Class Loaders">
+<span class="gliffy-container" id="gliffy-container-23527573-791" 
data-fullwidth="750" data-ceoid="23335008" 
data-edit="${diagramEditLink.getLinkUrl()}" 
data-full="${diagramZoomLink.getLinkUrl()}" data-filename="Class Loaders">
 
-    <map id="gliffy-map-23527573-3291" name="gliffy-map-23527573-3291"></map>
+    <map id="gliffy-map-23527573-8383" name="gliffy-map-23527573-8383"></map>
 
-    <img class="gliffy-image" id="gliffy-image-23527573-1569" width="750" 
height="425" data-full-width="750" data-full-height="425" 
src="https://cwiki.apache.org/confluence/download/attachments/23335008/Class%20Loaders.png?version=4&amp;modificationDate=1283534469000&amp;api=v2";
 alt="Class Loaders" usemap="#gliffy-map-23527573-3291">
+    <img class="gliffy-image" id="gliffy-image-23527573-791" width="750" 
height="425" data-full-width="750" data-full-height="425" 
src="https://cwiki.apache.org/confluence/download/attachments/23335008/Class%20Loaders.png?version=4&amp;modificationDate=1283534469000&amp;api=v2";
 alt="Class Loaders" usemap="#gliffy-map-23527573-8383">
 
-    <map class="gliffy-dynamic" id="gliffy-dynamic-map-23527573-1569" 
name="gliffy-dynamic-map-23527573-1569"></map>
+    <map class="gliffy-dynamic" id="gliffy-dynamic-map-23527573-791" 
name="gliffy-dynamic-map-23527573-791"></map>
 </span>
 
 

Modified: websites/production/tapestry/content/page-life-cycle.html
==============================================================================
--- websites/production/tapestry/content/page-life-cycle.html (original)
+++ websites/production/tapestry/content/page-life-cycle.html Sun Apr 26 
21:22:55 2020
@@ -76,20 +76,22 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="page-navigation.html">Page Navigation</a>
+                        <a  href="component-rendering.html">Component 
Rendering</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="page-life-cycle.html">Page Life Cycle</a>
@@ -98,37 +100,37 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="component-rendering.html">Component 
Rendering</a>
+                        <a  href="component-events.html">Component Events</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="component-events.html">Component Events</a>
+                        <a  href="page-navigation.html">Page Navigation</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="component-events-faq.html">Component Events 
FAQ</a>
+                        <a  href="request-processing.html">Request 
Processing</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="request-processing.html">Request 
Processing</a>
+                        <a  href="component-events-faq.html">Component Events 
FAQ</a>
                 
                         
                     </div>

Modified: websites/production/tapestry/content/page-navigation.html
==============================================================================
--- websites/production/tapestry/content/page-navigation.html (original)
+++ websites/production/tapestry/content/page-navigation.html Sun Apr 26 
21:22:55 2020
@@ -158,11 +158,11 @@
 
 
 <p>In essence, a Tapestry application is a number of related pages, working 
together. To some degree, each page is like an application unto 
itself.</p><p>Any individual request will be targeted at a single page. 
Requests come in two forms:&#160;</p><ul><li><em>component event</em> requests 
target a specific component on a specific page, triggering an event within that 
component</li><li><em>render</em> requests target a specific page, and stream 
the HTML markup for that page back to the client</li></ul><p>This dichotomy 
between component event requests and render requests alleviates a number of 
problems in traditional web applications related to the browser back button, or 
to the user hitting the refresh button in their browser.</p><h3 
id="PageNavigation-Contents">Contents</h3><h2 
id="PageNavigation-Contents|RelatedArticlesLogicalPageNameShortening"><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1587536387615 {padding: 0px;}
-div.rbtoc1587536387615 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1587536387615 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1587936010836 {padding: 0px;}
+div.rbtoc1587936010836 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1587936010836 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></h2><div class="toc-macro rbtoc1587536387615">
+/*]]>*/</style></h2><div class="toc-macro rbtoc1587936010836">
 <ul class="toc-indentation"><li><a  
href="#PageNavigation-Contents|RelatedArticlesLogicalPageNameShortening">Logical
 Page Name Shortening</a></li><li><a  
href="#PageNavigation-ComponentEventRequests&amp;Responses">Component Event 
Requests &amp; Responses</a>
 <ul class="toc-indentation"><li><a  href="#PageNavigation-1.Nullresponse">1. 
Null response</a></li><li><a  href="#PageNavigation-2.Stringresponse">2. String 
response</a></li><li><a  href="#PageNavigation-3.Classresponse">3. Class 
response</a></li><li><a  href="#PageNavigation-4.Pageresponse">4. Page 
response</a></li><li><a  href="#PageNavigation-5.HttpError">5. 
HttpError</a></li><li><a  href="#PageNavigation-6.Linkresponse">6. Link 
response</a></li><li><a  href="#PageNavigation-7.Streamresponse">7. Stream 
response</a></li><li><a  href="#PageNavigation-8.URLresponse">8. URL 
response</a></li><li><a  href="#PageNavigation-9.Objectresponse">9. Object 
response</a></li></ul>
 </li><li><a  href="#PageNavigation-PageRenderRequests">Page Render 
Requests</a></li><li><a  href="#PageNavigation-PageActivation">Page 
Activation</a></li><li><a  href="#PageNavigation-PageNavigationPatterns">Page 
Navigation Patterns</a>

Modified: websites/production/tapestry/content/parallel-execution.html
==============================================================================
--- websites/production/tapestry/content/parallel-execution.html (original)
+++ websites/production/tapestry/content/parallel-execution.html Sun Apr 26 
21:22:55 2020
@@ -76,9 +76,9 @@
 
       <div id="content">
                 <div id="ConfluenceContent"><p>The <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/ParallelExecutor.html";>ParallelExecutor</a>
 service allows a computation to occur in parallel.</p><p>It can be used in two 
ways. First, with an explicit <a  class="external-link" 
href="http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html";
 rel="nofollow">Future</a>:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">   Future&lt;String&gt; future = executor.invoke(new 
Invokable&lt;String&gt;() { ... });</pre>
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">   Future&lt;String&gt; 
future = executor.invoke(new Invokable&lt;String&gt;() { ... });</pre>
 </div></div><p>The executor will submit the Invokable to a thread pool for 
execution in the background.</p><p>The ultimate value of the Invokable is 
available by invoking <code>get()</code> on the Future; this will block until 
the value is ready.</p><p>Other methods on Future can cancel the execution, or 
get the value only if it is ready within a timeout.</p><p>The thread pool is 
started automatically as needed, and will shutdown when the Registry itself is 
shutdown.</p><p>Another alternative will return an object proxy, not a 
Future:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">  RSSFeed feed = executor.invoke(RSSFeed.class, new 
Invokable&lt;RSSFeed&gt;() { ... });</pre>
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">  RSSFeed feed = 
executor.invoke(RSSFeed.class, new Invokable&lt;RSSFeed&gt;() { ... });</pre>
 </div></div><p>This only works if the type is an interface. A proxy for the 
interface is created around the Future object; any invocation on the proxy will 
invoke get() on the Future (that is, will block until the value is 
computed).</p><h1 id="ParallelExecution-Configuration">Configuration</h1><p>The 
behavior of the ParallelExecutor can be tuned with global configuration 
symbols.</p><p>Java constants for the configuration symbols are defined in <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/IOCSymbols.html";>IOCSymbols</a>.</p><h3
 
id="ParallelExecution-tapestry.thread-pool-enabled">tapestry.thread-pool-enabled</h3><p>If
 true, the default, then the thread pool will operate. If false, then 
ParallelExecutor's implementation changes to invoke the Invokable immediately, 
not in a pooled thread. This is useful in environments, such as <a  
class="external-link" href="http://code.google.com/appengine/"; 
rel="nofollow">Google App Engine</a>,
  that do not support the creation of threads and thread pools.</p><h3 
id="ParallelExecution-tapestry.thread-pool.core-pool-size">tapestry.thread-pool.core-pool-size</h3><p>Minimum
 size of the thread pool. Defaults to 3.</p><h3 
id="ParallelExecution-tapestry.thread-pool.max-pool-size">tapestry.thread-pool.max-pool-size</h3><p>Maximum
 number of threads (active or inactive) in the thread pool. Defaults to 
20.</p><h3 
id="ParallelExecution-tapestry.thread-pool.keep-alive">tapestry.thread-pool.keep-alive</h3><p>Time
 to keep waiting threads alive. Defaults to "1 m" (one minute).</p><h3 
id="ParallelExecution-tapestry.thread-pool.queue-size">tapestry.thread-pool.queue-size</h3><p>
 
 </p><div class="aui-message aui-message-info macro-since"><b 
class="param-since">Added in 5.3</b>

Modified: websites/production/tapestry/content/parameter-type-coercion.html
==============================================================================
--- websites/production/tapestry/content/parameter-type-coercion.html (original)
+++ websites/production/tapestry/content/parameter-type-coercion.html Sun Apr 
26 21:22:55 2020
@@ -84,56 +84,58 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="type-coercion.html">Type Coercion</a>
+                        <a  href="parameter-type-coercion.html">Parameter Type 
Coercion</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="parameter-type-coercion.html">Parameter Type 
Coercion</a>
+                        <a  href="type-coercion.html">Type Coercion</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="enum-parameter-recipe.html">Enum Parameter 
Recipe</a>
+                        <a  
href="supporting-informal-parameters.html">Supporting Informal Parameters</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  
href="supporting-informal-parameters.html">Supporting Informal Parameters</a>
+                        <a  href="default-parameter.html">Default Parameter</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="default-parameter.html">Default Parameter</a>
+                        <a  href="enum-parameter-recipe.html">Enum Parameter 
Recipe</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="component-parameters.html">Component 
Parameters</a>
@@ -145,7 +147,7 @@
 
 
 <p>Tapestry automatically handles type coercions for <a  
href="component-parameters.html">component parameters</a>.</p><p>Type coercions 
occur when a value passed into a parameter (as bound in a template or in an 
annotation) does not match the type of the parameter.</p><div class="code panel 
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class Count
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">public class Count
 {
     @Parameter
     private int start = 1;
@@ -159,7 +161,7 @@
     . . .
 </pre>
 </div></div><p>&#160;</p><p>Here, the type of all three parameters is 
<code>int</code>.</p><p>However, it is likely that the component will be used 
as so:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">  Merry Christmas: &lt;t:count end="3"&gt; Ho! 
&lt;/t:count&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">  Merry Christmas: 
&lt;t:count end="3"&gt; Ho! &lt;/t:count&gt;
 </pre>
 </div></div><p>A bare whole number is interpreted by the prop binding prefix 
as a <code>long</code>. So this is the <em>long</em> value 3.</p><p>Tapestry 
will automatically coerce the bound value, a <code>long</code>, to the 
parameter's type, <code>int</code>. This may be a lossy coercion (if the 
<code>long</code> represents a number larger than can be stored in an 
<code>int</code>).</p><h2 
id="ParameterTypeCoercion-TypeCoercerService">TypeCoercer Service</h2><p>Main 
Article: <a  href="type-coercion.html">Type Coercion</a></p><p>The TypeCoercer 
service is responsible for this type coercion. This service is part of the <a  
href="ioc.html">tapestry-ioc</a> module. The service is quite extensible, 
allowing for new types and coercions to be added easily. The TapestryModule 
contributes a few additional coercions into the TypeCoercer 
service.</p><p></p></div>
       </div>

Modified: websites/production/tapestry/content/performance-and-clustering.html
==============================================================================
--- websites/production/tapestry/content/performance-and-clustering.html 
(original)
+++ websites/production/tapestry/content/performance-and-clustering.html Sun 
Apr 26 21:22:55 2020
@@ -76,11 +76,13 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="performance-and-clustering.html">Performance 
and Clustering</a>
@@ -89,7 +91,7 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="session-storage.html">Session Storage</a>
@@ -98,7 +100,7 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="persistent-page-data.html">Persistent Page 
Data</a>

Modified: websites/production/tapestry/content/persistent-page-data.html
==============================================================================
--- websites/production/tapestry/content/persistent-page-data.html (original)
+++ websites/production/tapestry/content/persistent-page-data.html Sun Apr 26 
21:22:55 2020
@@ -104,7 +104,7 @@
                 <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="persistent-page-data.html">Persistent Page 
Data</a>
+                        <a  href="session-storage.html">Session Storage</a>
                 
                         
                     </div>
@@ -113,7 +113,7 @@
                 <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="session-storage.html">Session Storage</a>
+                        <a  href="persistent-page-data.html">Persistent Page 
Data</a>
                 
                         
                     </div>

Modified: websites/production/tapestry/content/pipelinebuilder-service.html
==============================================================================
--- websites/production/tapestry/content/pipelinebuilder-service.html (original)
+++ websites/production/tapestry/content/pipelinebuilder-service.html Sun Apr 
26 21:22:55 2020
@@ -84,11 +84,13 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="shadowbuilder-service.html">ShadowBuilder 
Service</a>
@@ -97,25 +99,25 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  
href="strategybuilder-service.html">StrategyBuilder Service</a>
+                        <a  
href="pipelinebuilder-service.html">PipelineBuilder Service</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  
href="pipelinebuilder-service.html">PipelineBuilder Service</a>
+                        <a  
href="strategybuilder-service.html">StrategyBuilder Service</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="chainbuilder-service.html">ChainBuilder 
Service</a>
@@ -127,7 +129,7 @@
 
 
 <p>In this pattern, an existing service is decorated with a filter. The filter 
will delegate to the service, but has the chance to alter or replace parameters 
before invoking the method, and can perform operations before returning. This 
is similar to <a  href="chainbuilder-service.html">chain of responsibility</a>, 
but differs in that there are two interfaces (the service interface and the 
filter interface) and that each filter invokes the next filter via the service 
interface. In contrast, in the chain of responsibility, the chain invokes each 
method, which must return before the next command in the chain is 
invoked.</p><p>The service interface and the filter interface are closely 
related: the filter interface must match the service interface method for 
method, but each method of the filter interface must have an additional 
parameter whose type is the service interface. For example, a pipeline that 
performed string transformations might use the following interfaces:</p><div 
class="
 code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public interface StringTransformService
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">public interface 
StringTransformService
 {
   String transform(String input);
 }
@@ -137,7 +139,7 @@ public interface StringTransformFilter
   String transform(String input, StringTransformService delegate);
 }</pre>
 </div></div><p>An implementation of the filter might look like:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class UpcasePreFilter implements 
StringTransformFilter
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">public class 
UpcasePreFilter implements StringTransformFilter
 {
   public String transform(String input, StringTransformService delegate)
   {
@@ -145,7 +147,7 @@ public interface StringTransformFilter
   }
 }</pre>
 </div></div><p>Alternately, the filter could pass input to delegate unchanged, 
but invoke toUpperCase() on the result:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class UpcasePostFilter implements 
StringTransformFilter
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">public class 
UpcasePostFilter implements StringTransformFilter
 {
   public String transform(String input, StringTransformService delegate)
   {
@@ -153,7 +155,7 @@ public interface StringTransformFilter
   }
 }</pre>
 </div></div><p>The PipelineBuilder Service (<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/PipelineBuilder.html";>API</a>)
 is useful for constructing pipelines. The service is often injected into a 
service builder method, along with an ordered configuration of 
services.</p><p>What the builder accomplishes is to represent each 
<em>filter</em> in the pipeline as an instance of the <em>service</em> 
interface.</p><p>&#160;</p><p><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" 
src="pipelinebuilder-service.data/PipelineCallingSequence.png"></span><br 
clear="none"> Pipeline Calling Sequence</p><p>The bridges are created by the 
PipelineBuilder service. The terminator must be provided. The bridges and the 
terminator implement the service interface.</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">  public static StringTransformService build(
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">  public static 
StringTransformService build(
     @InjectService("PipelineBuilder")
     PipelineBuilder builder,
     List&lt;StringTransformFilter&gt; configuration,

Modified: websites/production/tapestry/content/principles.html
==============================================================================
--- websites/production/tapestry/content/principles.html (original)
+++ websites/production/tapestry/content/principles.html Sun Apr 26 21:22:55 
2020
@@ -84,20 +84,22 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="tapestry-for-jsf-users.html">Tapestry for 
JSF Users</a>
+                        <a  href="getting-started.html">Getting Started</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="tapestry-tutorial.html">Tapestry Tutorial</a>
@@ -106,28 +108,28 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="principles.html">Principles</a>
+                        <a  href="introduction.html">Introduction</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="getting-started.html">Getting Started</a>
+                        <a  href="tapestry-for-jsf-users.html">Tapestry for 
JSF Users</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="introduction.html">Introduction</a>
+                        <a  href="principles.html">Principles</a>
                 
                         
                     </div>
@@ -136,7 +138,7 @@
 
 
 <h1 id="Principles-Principle1&#8211;StaticStructure,DynamicBehavior">Principle 
1 &#8211; Static Structure, Dynamic Behavior</h1><p>The concept of "Dynamic 
Behavior" should be pretty obvious when you are building a web application; 
things should look different for different users/situations. But what does it 
mean that Tapestry has "Static Structure?" Static structure implies that when 
you build a page in Tapestry you are going to define all of the types of 
components that are used within that page. Under no circumstance during the 
rendering or event processing of the page will you be able to dynamically 
create a new type of component and place that into the component tree.</p><p>At 
first glance, this seems quite limiting ... other frameworks allow new elements 
to be created on the fly; it's also a common feature of desktop GUIs such as 
Swing. But static structure turns out to be not so limiting after all. You 
<em>can</em> create new elements (you're actually re-rendering existing com
 ponents with different properties). And you have plenty of options for getting 
dynamic behavior out of your static structure; from the simple conditional and 
looping components to the more advanced implementations of Tapestry's 
BeanEditor or Grid components, Tapestry gives you control over what renders and 
when, and even where it appears on the page. And starting in Tapestry 5.3 you 
can even use the <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Dynamic.html";>Dynamic
 component</a>, which renders whatever is in an external template 
file.</p><p>Why did Tapestry choose static structure as a core principle? It's 
really a matter of meeting the requirements of agility and scalability.</p><h2 
id="Principles-Agility">Agility</h2><p>Tapestry is designed to be an agile 
working environment; "code less, deliver more". To support you writing less 
code Tapestry does a lot of work on your POJO pages and components when first 
loadi
 ng them. It also uses shared instances of page and component classes (shared 
across multiple threads and requests). Having dynamically modifiable structure 
would imply that each request has its own instance and, further, that the 
entire structure would need to be serialized between requests so that it can be 
restored to handle later requests.</p><p>Tapestry also makes you more agile by 
speeding up the development cycle with <a  href="principles.html">Live Class 
Reloading</a>. Tapestry monitors the file system for changes to Java page 
classes, component classes, service implementation classes, HTML templates and 
component property files, and it hot-swaps the changes into the running 
application without requiring a restart <em>or losing session data</em>. This 
provides a very short code-save-view cycle that no other framework can 
touch.</p><h2 id="Principles-Scalability">Scalability</h2><p>When building 
large scale systems it is important to consider how your resources are going to 
be
  used on each deployed server, and how that information is going to be shared 
between servers. Static structure means that page instances do not need to be 
stored inside the HttpSession and simple browsing users do not require extra 
system resources. This lean use of the HttpSession is key to Tapestry's very 
high scalability, especially in a clustered configuration. Again, linking an 
instance of a page to a particular client would require vastly more server-side 
resources than having a single shared page instance.</p><h1 
id="Principles-Principle2&#8211;AdaptiveAPI">Principle 2 &#8211; Adaptive 
API</h1><p>A key feature of Tapestry 5 is its adaptive API.</p><p>In 
traditional Java frameworks (including Struts, <a  
href="principles.html">JSF</a> and even the now-ancient Tapestry 4) user code 
is expected to conform to the framework. You create classes that extend from 
framework-provided base classes, or implement framework-provided 
interfaces.</p><p>This works well until you upgrade to t
 he next release of the framework: with the new features of the upgrade, you 
will more often than not experience breaks in backwards compatibility. 
Interfaces or base classes will have changed and your existing code will need 
to be changed to match.</p><p>In Tapestry 5, the framework adapts to your code. 
You have control over the names of the methods, the parameters they take, and 
the value that is returned. This is driven by annotations, which tell Tapestry 
under what circumstances your methods are to be invoked.</p><p>For example, you 
may have a login form and have a method that gets invoked when the form is 
submitted:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class Login
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">public class Login
 {
   @Persist
   @Property

Modified: websites/production/tapestry/content/property-expressions.html
==============================================================================
--- websites/production/tapestry/content/property-expressions.html (original)
+++ websites/production/tapestry/content/property-expressions.html Sun Apr 26 
21:22:55 2020
@@ -76,11 +76,13 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="component-templates.html">Component 
Templates</a>
@@ -89,7 +91,7 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" 
title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="component-parameters.html">Component 
Parameters</a>

Modified: websites/production/tapestry/content/registry-startup.html
==============================================================================
--- websites/production/tapestry/content/registry-startup.html (original)
+++ websites/production/tapestry/content/registry-startup.html Sun Apr 26 
21:22:55 2020
@@ -76,7 +76,7 @@
 
       <div id="content">
                 <div id="ConfluenceContent"><p>It is possible to provide extra 
logic to be executed at Registry startup, by making contributions to the 
RegistryStartup service configuration.</p><p>The values contributed are 
Runnable objects. The configuration is ordered, so it is possible to control in 
what order the objects are executed.</p><p>RegistryStartup occurs after eager 
loaded services are instantiated.</p><p>Here's an example of a module that 
makes a contribution:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class MyModule
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">public class MyModule
 {
   public static void 
contributeRegistryStartup(OrderedConfiguration&lt;Runnable&gt; configuration)
   {
@@ -90,7 +90,7 @@
 
 
 </div>Instead of making contributions to the RegistryStartup service 
configuration you can provide startup methods inside your modules. A startup 
method is a static or instance method of a module annotated with @<a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Startup.html";>Startup</a>
 annotation. Each module is allowed to contain several startup methods.<div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class MyModule
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">public class MyModule
 {
 
   @Startup

Modified: websites/production/tapestry/content/release-notes-50.html
==============================================================================
--- websites/production/tapestry/content/release-notes-50.html (original)
+++ websites/production/tapestry/content/release-notes-50.html Sun Apr 26 
21:22:55 2020
@@ -78,11 +78,11 @@
 
       <div id="content">
                 <div id="ConfluenceContent"><p>This is the consolidated list 
of changes between Tapestry versions 5.0.3 and 5.0.19. Before upgrading, be 
sure to review the&#160;<a  href="how-to-upgrade.html">How to Upgrade</a> 
instructions.</p><p><strong>Contents</strong></p><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1587536406282 {padding: 0px;}
-div.rbtoc1587536406282 ul {list-style: disc;margin-left: 0px;padding-left: 
5px;}
-div.rbtoc1587536406282 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1587936089288 {padding: 0px;}
+div.rbtoc1587936089288 ul {list-style: disc;margin-left: 0px;padding-left: 
5px;}
+div.rbtoc1587936089288 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1587536406282">
+/*]]>*/</style></p><div class="toc-macro rbtoc1587936089288">
 <ul class="toc-indentation"><li><a  
href="#ReleaseNotes5.0-TapestryVersion5.0.19">Tapestry Version 
5.0.19</a></li><li><a  href="#ReleaseNotes5.0-TapestryVersion5.0.18">Tapestry 
Version 5.0.18</a></li><li><a  
href="#ReleaseNotes5.0-TapestryVersion5.0.17">Tapestry Version 
5.0.17</a></li><li><a  href="#ReleaseNotes5.0-TapestryVersion5.0.16">Tapestry 
Version 5.0.16</a></li><li><a  
href="#ReleaseNotes5.0-TapestryVersion5.0.15">Tapestry Version 
5.0.15</a></li><li><a  href="#ReleaseNotes5.0-TapestryVersion5.0.14">Tapestry 
Version 5.0.14</a></li><li><a  
href="#ReleaseNotes5.0-TapestryVersion5.0.13">Tapestry Version 
5.0.13</a></li><li><a  href="#ReleaseNotes5.0-TapestryVersion5.0.12">Tapestry 
Version 5.0.12</a></li><li><a  
href="#ReleaseNotes5.0-TapestryVersion5.0.11">Tapestry Version 
5.0.11</a></li><li><a  href="#ReleaseNotes5.0-TapestryVersion5.0.10">Tapestry 
Version 5.0.10</a></li><li><a  
href="#ReleaseNotes5.0-TapestryVersion5.0.9">Tapestry Version 
5.0.9</a></li><li><a  href="#ReleaseNot
 es5.0-TapestryVersion5.0.8">Tapestry Version 5.0.8</a></li><li><a  
href="#ReleaseNotes5.0-TapestryVersion5.0.7">Tapestry Version 
5.0.7</a></li><li><a  href="#ReleaseNotes5.0-TapestryVersion5.0.6">Tapestry 
Version 5.0.6</a></li><li><a  
href="#ReleaseNotes5.0-TapestryVersion5.0.5">Tapestry Version 
5.0.5</a></li><li><a  href="#ReleaseNotes5.0-TapestryVersion5.0.4">Tapestry 
Version 5.0.4</a></li><li><a  
href="#ReleaseNotes5.0-TapestryVersion5.0.3">Tapestry Version 
5.0.3</a></li></ul>

[... 3 lines stripped ...]

Reply via email to