Modified: websites/production/tapestry/content/limitations.html
==============================================================================
--- websites/production/tapestry/content/limitations.html (original)
+++ websites/production/tapestry/content/limitations.html Fri Feb 28 18:18:17 
2025
@@ -155,11 +155,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="Limitations-Limitations">Limitations</h1><h2 
id="Limitations-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1740593670020 {padding: 0px;}
-div.rbtoc1740593670020 ul {margin-left: 0px;}
-div.rbtoc1740593670020 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1740766470303 {padding: 0px;}
+div.rbtoc1740766470303 ul {margin-left: 0px;}
+div.rbtoc1740766470303 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1740593670020">
+/*]]>*/</style></p><div class="toc-macro rbtoc1740766470303">
 <ul class="toc-indentation"><li><a 
href="#Limitations-HowdoIaddnewcomponentstoanexistingpagedynamically?">How do I 
add new components to an existing page dynamically?</a></li><li><a 
href="#Limitations-Whydoesn'tmyserviceimplementationreloadwhenIchangeit?">Why 
doesn't my service implementation reload when I change it?</a></li><li><a 
href="#Limitations-HowdoIrunmultipleTapestryapplicationsinthesamewebapplication?">How
 do I run multiple Tapestry applications in the same web 
application?</a></li></ul>
 </div><h2 
id="Limitations-HowdoIaddnewcomponentstoanexistingpagedynamically?">How do I 
add new components to an existing page dynamically?</h2><p>The short answer 
here is: <strong>you don't</strong>. The long answer here is <strong>you don't 
have to, to get the behavior you desire</strong>.</p><p>One of Tapestry basic 
values is high scalability: this is expressed in a number of ways, reflecting 
scalability concerns within a single server, and within a cluster of 
servers.</p><p>Although you code Tapestry pages and components as if they were 
ordinary POJOs (<span>Plain Old Java Objects -- Tapestry does not require you 
to extend any base classes or implement any special interfaces)</span><span>, 
as deployed by Tapestry they are closer to a traditional servlet: a single 
instance of each page services requests from multiple threads. Behind the 
scenes, Tapestry transforms you code, rewriting it on the 
fly.</span></p><p>What this means is that <em>any</em> incoming request must be 
handled 
 by a <em>single page instance</em>. Therefore, Tapestry enforces the concept 
of <strong>static structure, dynamic behavior</strong>.</p><p>Tapestry provides 
quite a number of ways to vary what content is rendered, well beyond simple 
conditionals and loops. It is possible to "drag in" components from other pages 
when rendering a page (other FAQs will expand on this concept). The point is, 
that although a Tapestry page's structure is very rigid, the order in which the 
components of the page render does not have to be top to bottom.</p><h2 
id="Limitations-Whydoesn'tmyserviceimplementationreloadwhenIchangeit?">Why 
doesn't my service implementation reload when I change it?</h2><p>Main article: 
<a href="service-implementation-reloading.html">Service Implementation 
Reloading</a></p><p>Live service reloading has some limitations:</p><ul><li>The 
service must define a service interface.</li><li>The service implementation 
must be on the file system (not inside a JAR).</li><li>The implementatio
 n must be instantiated by Tapestry, not inside code (even code inside a module 
class).</li><li>The service must use the default <a 
href="limitations.html">scope</a> (reloading of perthread scopes is not 
supported).</li></ul><p>Consider the following example module:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
 <pre><code class="language-java">public static void bind(ServiceBinder binder)

Modified: websites/production/tapestry/content/link-components-faq.html
==============================================================================
--- websites/production/tapestry/content/link-components-faq.html (original)
+++ websites/production/tapestry/content/link-components-faq.html Fri Feb 28 
18:18:17 2025
@@ -155,11 +155,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="LinkComponentsFAQ-LinkComponents">Link Components</h1><p>Main Articles: <a 
href="page-navigation.html">Page Navigation</a>, <a 
href="component-parameters.html">Component Parameters</a></p><h2 
id="LinkComponentsFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1740593633994 {padding: 0px;}
-div.rbtoc1740593633994 ul {margin-left: 0px;}
-div.rbtoc1740593633994 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1740766434471 {padding: 0px;}
+div.rbtoc1740766434471 ul {margin-left: 0px;}
+div.rbtoc1740766434471 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1740593633994">
+/*]]>*/</style></p><div class="toc-macro rbtoc1740766434471">
 <ul class="toc-indentation"><li><a 
href="#LinkComponentsFAQ-HowdoIaddqueryparameterstoaPageLinkorActionLink?">How 
do I add query parameters to a PageLink or ActionLink?</a></li><li><a 
href="#LinkComponentsFAQ-HowdoIcreateaLinkbacktothecurrentpagefromacomponent?">How
 do I create a Link back to the current page from a component?</a></li></ul>
 </div><h2 
id="LinkComponentsFAQ-HowdoIaddqueryparameterstoaPageLinkorActionLink?">How do 
I add query parameters to a PageLink or ActionLink?</h2><p>These components do 
not have parameters to allow you to specify query parameters for the link; they 
both allow you to specify a <em>context</em> (one or more values to encode into 
the request path).</p><p>However, you can accomplish the same thing with a 
little code and markup. For example, to create a link to another page and pass 
a query parameter, you can replace your PageLink component with a standard 
<code>&lt;a&gt;</code> tag:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
 <pre><code class="language-xml">&lt;a href="${profilePageLink}"&gt;Display 
Profile (w/ full details)&lt;/a&gt;

Modified: websites/production/tapestry/content/localization.html
==============================================================================
--- websites/production/tapestry/content/localization.html (original)
+++ websites/production/tapestry/content/localization.html Fri Feb 28 18:18:17 
2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div 
id="ConfluenceContent"><p></p><p><strong>Localization</strong> (aka L10n) is 
all about getting the right text to the user, in the right language.</p>        
            
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div 
id="ConfluenceContent"><p></p><p><strong>Localization</strong> (aka L10n) is 
all about getting the right text to the user, in the right language.</p><div 
class="aui-label" style="float:right" title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/logging-in-tapestry.html
==============================================================================
--- websites/production/tapestry/content/logging-in-tapestry.html (original)
+++ websites/production/tapestry/content/logging-in-tapestry.html Fri Feb 28 
18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><p><strong>Logging in 
Tapestry</strong> is based on the <a class="external-link" 
href="http://www.slf4j.org/"; rel="nofollow">Simple Logging Facade for Java 
(SLF4J)</a>. You can think of SLF4J as a leaner, meaner replacement for <a 
class="external-link" 
href="http://commons.apache.org/logging/";>commons-logging</a>.</p>              
      
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><p><strong>Logging in 
Tapestry</strong> is based on the <a class="external-link" 
href="http://www.slf4j.org/"; rel="nofollow">Simple Logging Facade for Java 
(SLF4J)</a>. You can think of SLF4J as a leaner, meaner replacement for <a 
class="external-link" 
href="http://commons.apache.org/logging/";>commons-logging</a>.</p><div 
class="aui-label" style="float:right" title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/logging.html
==============================================================================
--- websites/production/tapestry/content/logging.html (original)
+++ websites/production/tapestry/content/logging.html Fri Feb 28 18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div 
id="ConfluenceContent"><p><strong>Logging</strong> involves the automatic 
recording of progress as an application runs. Tapestry makes extensive use of 
<a class="external-link" href="http://www.slf4j.org/"; rel="nofollow">SLF4J</a> 
to log details about the creation and operation of your page and component 
classes.</p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div 
id="ConfluenceContent"><p><strong>Logging</strong> involves the automatic 
recording of progress as an application runs. Tapestry makes extensive use of 
<a class="external-link" href="http://www.slf4j.org/"; rel="nofollow">SLF4J</a> 
to log details about the creation and operation of your page and component 
classes.</p><div class="aui-label" style="float:right" title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/maven-support-faq.html
==============================================================================
--- websites/production/tapestry/content/maven-support-faq.html (original)
+++ websites/production/tapestry/content/maven-support-faq.html Fri Feb 28 
18:18:17 2025
@@ -155,11 +155,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="MavenSupportFAQ-MavenSupport">Maven Support</h1><h2 
id="MavenSupportFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1740593782996 {padding: 0px;}
-div.rbtoc1740593782996 ul {margin-left: 0px;}
-div.rbtoc1740593782996 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1740766583873 {padding: 0px;}
+div.rbtoc1740766583873 ul {margin-left: 0px;}
+div.rbtoc1740766583873 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1740593782996">
+/*]]>*/</style></p><div class="toc-macro rbtoc1740766583873">
 <ul class="toc-indentation"><li><a 
href="#MavenSupportFAQ-WhydoMavenprojectnamesandotherdetailsshowupinmypages?">Why
 do Maven project names and other details show up in my pages?</a></li></ul>
 </div><h2 
id="MavenSupportFAQ-WhydoMavenprojectnamesandotherdetailsshowupinmypages?">Why 
do Maven project names and other details show up in my pages?</h2><p>Tapestry 
and maven both use the same syntax for dynamic portions of files: the 
<code>${...</code>} syntax. When Maven is copying resources from 
<code>src/main/resources</code>, and when filtering is <em>enabled</em> (which 
is not the default), then any expansions in <em>Tapestry templates</em> that 
match against Maven project properties are substituted. If you look at the 
deployed application you'll see that <code>${name</code>} is gone, replaced 
with your project's name!</p><p>The solution is to update your 
<code>pom.xml</code> and ignore any .tml files when copying and 
filtering:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>pom.xml 
(partial)</b></div><div class="codeContent panelContent pdl">
 <pre><code class="language-xml">  &lt;resource&gt;

Modified: websites/production/tapestry/content/news.html
==============================================================================
--- websites/production/tapestry/content/news.html (original)
+++ websites/production/tapestry/content/news.html Fri Feb 28 18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent">                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div id="bar"><p> <strong>We think you will love Tapestry!</strong> Give us 20 
minutes and <strong><a href="tapestry-tutorial.html">follow our 
tutorial</a></strong>.</p></div><div><h2 id="News-News">News <a 
href="https://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&amp;spaces=TAPESTRY&amp;title=Apache+Tapestry+News+RSS+Feed&amp;labelString%3D&amp;sort=created&amp;maxResults=10&amp;timeSpan=12&amp;confirm=Create&amp;showContent=true&amp;showDiff=false";><span
 class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" draggable="false" 
src="news.data/Feed-icon.gif"></span></a></h2><p>    
+                            <div id="ConfluenceContent"><div id="bar"><p> 
<strong>We think you will love Tapestry!</strong> Give us 20 minutes and 
<strong><a href="tapestry-tutorial.html">follow our 
tutorial</a></strong>.</p></div><div><h2 id="News-News">News <a 
href="https://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&amp;spaces=TAPESTRY&amp;title=Apache+Tapestry+News+RSS+Feed&amp;labelString%3D&amp;sort=created&amp;maxResults=10&amp;timeSpan=12&amp;confirm=Create&amp;showContent=true&amp;showDiff=false";><span
 class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" draggable="false" 
src="news.data/Feed-icon.gif"></span></a></h2><p>    
 
     
         

Modified: websites/production/tapestry/content/operation-tracker.html
==============================================================================
--- websites/production/tapestry/content/operation-tracker.html (original)
+++ websites/production/tapestry/content/operation-tracker.html Fri Feb 28 
18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><p>Have you ever hit 
an error in some code and been faced with a giant stack trace, and no clue what 
that means? &#160;Us too. We wished there was a way for the exception to 
describe the path to the error not (just) in terms of which methods called 
which methods, but what&#160;<em>operations</em> triggered what other 
operations. That's the OperationTracker.</p><p>The operation tracker is another 
aspect of Tapestry's commitment to feedback.</p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><p>Have you ever hit 
an error in some code and been faced with a giant stack trace, and no clue what 
that means? &#160;Us too. We wished there was a way for the exception to 
describe the path to the error not (just) in terms of which methods called 
which methods, but what&#160;<em>operations</em> triggered what other 
operations. That's the OperationTracker.</p><p>The operation tracker is another 
aspect of Tapestry's commitment to feedback.</p><div class="aui-label" 
style="float:right" title="Related Articles">
 
 
 

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 
Fri Feb 28 18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><p>One of Tapestry's 
best features is its comprehensive exception reporting. The level of detail is 
impressive and useful.</p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><p>One of Tapestry's 
best features is its comprehensive exception reporting. The level of detail is 
impressive and useful.</p><div class="aui-label" style="float:right" 
title="Related Articles">
 
 
 

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 
Fri Feb 28 18:18:17 2025
@@ -155,11 +155,11 @@
             <!-- /// Content Start -->
             <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.rbtoc1740593565728 {padding: 0px;}
-div.rbtoc1740593565728 ul {margin-left: 0px;}
-div.rbtoc1740593565728 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1740766366188 {padding: 0px;}
+div.rbtoc1740766366188 ul {margin-left: 0px;}
+div.rbtoc1740766366188 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1740593565728">
+/*]]>*/</style></p><div class="toc-macro rbtoc1740766366188">
 <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><code class="language-java">public static void 
contributeComponentClassResolver(Configuration&lt;LibraryMapping&gt; 
configuration) {
@@ -194,17 +194,16 @@ public class DBImage
 
 
 
-<span class="gliffy-container" id="gliffy-container-23527573-1636" 
data-fullwidth="750" data-size="L" data-ceoid="23335008" 
data-edit="${diagramEditLink.getLinkUrl()}" 
data-full="${diagramZoomLink.getLinkUrl()}" data-filename="Class Loaders">
+<span class="gliffy-container" id="gliffy-container-23527573-6843" 
data-fullwidth="750" data-size="L" data-ceoid="23335008" 
data-edit="${diagramEditLink.getLinkUrl()}" 
data-full="${diagramZoomLink.getLinkUrl()}" data-filename="Class Loaders">
 
-    <map id="gliffy-map-23527573-2306" name="gliffy-map-23527573-2306"></map>
+    <map id="gliffy-map-23527573-2512" name="gliffy-map-23527573-2512"></map>
 
-    <img class="gliffy-image" id="gliffy-image-23527573-1636" 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-2306">
+    <img class="gliffy-image" id="gliffy-image-23527573-6843" 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-2512">
 
-    <map class="gliffy-dynamic" id="gliffy-dynamic-map-23527573-1636" 
name="gliffy-dynamic-map-23527573-1636"></map>
+    <map class="gliffy-dynamic" id="gliffy-dynamic-map-23527573-6843" 
name="gliffy-dynamic-map-23527573-6843"></map>
 </span>
 
-    </p><div class="aui-message shadowed closeable"><p class="title"><span 
class="gliffy-aui-icon"></span>ERROR</p><p>Gliffy is unlicensed. Please 
<strong><a 
href="https://cwiki.apache.org/confluence/plugins/servlet/upm#manage/com.gliffy.integration.confluence";>install
 a license</a></strong> to draw diagrams in your wiki.</p></div>
-<p>In a Tapestry application, most application classes are loaded from the 
middle class loader. Additional class loaders are used to support live service 
reloading, and live component reloading (along with component class 
transformation).</p><p>When a page or component is passed as a parameter to a 
service, a failure occurs (how it is reported varies in different JDK releases) 
because of the class mismatch.</p><p>The solution is to define an interface 
with the methods that the service will invoke on the page or component 
instance. The service will expect an object implementing the interface (and 
doesn't care what class loader loaded the implementing class).</p><p>Just be 
sure to put the interface class in a non-controlled package, such as your 
application's <em>root-package</em> (and <strong>not</strong> 
<em>root-package</em>.<code>pages</code>).</p><h2 
id="PageAndComponentClassesFAQ-Whichisbetter,usingmagicmethodnames(i.e.,beginRender())orannotations(i.e.BeginRender)?">Which
 is bet
 ter, using magic method names (i.e., <code>beginRender()</code>) or 
annotations (i.e. <code>BeginRender</code>)?</h2><p>There is no single best 
way; this is where your taste may vary. Historically, the annotations came 
first, and the method naming conventions came later.</p><p>The advantage of 
using the method naming conventions is that the method names are more concise, 
which fewer characters to type, and fewer classes to import.</p><p>The main 
disadvantage of the method naming conventions is that the method names are not 
meaningful. <code>onSuccessFromLoginForm()</code> is a less meaningful name 
than <code>storeUserCredentialsAndReturnToProductsPage()</code>, for 
example.</p><p>The second disadvantage is you are more susceptible to 
off-by-a-character errors. For example, <code>onSucessFromLoginForm()</code> 
will <em>never</em> be called because the event name is misspelled; this would 
not happen using the annotation approach:</p><div class="code panel pdl" 
style="border-width: 1px
 ;"><div class="codeContent panelContent pdl">
+</p><p>In a Tapestry application, most application classes are loaded from the 
middle class loader. Additional class loaders are used to support live service 
reloading, and live component reloading (along with component class 
transformation).</p><p>When a page or component is passed as a parameter to a 
service, a failure occurs (how it is reported varies in different JDK releases) 
because of the class mismatch.</p><p>The solution is to define an interface 
with the methods that the service will invoke on the page or component 
instance. The service will expect an object implementing the interface (and 
doesn't care what class loader loaded the implementing class).</p><p>Just be 
sure to put the interface class in a non-controlled package, such as your 
application's <em>root-package</em> (and <strong>not</strong> 
<em>root-package</em>.<code>pages</code>).</p><h2 
id="PageAndComponentClassesFAQ-Whichisbetter,usingmagicmethodnames(i.e.,beginRender())orannotations(i.e.BeginRender)?">Which
 is
  better, using magic method names (i.e., <code>beginRender()</code>) or 
annotations (i.e. <code>BeginRender</code>)?</h2><p>There is no single best 
way; this is where your taste may vary. Historically, the annotations came 
first, and the method naming conventions came later.</p><p>The advantage of 
using the method naming conventions is that the method names are more concise, 
which fewer characters to type, and fewer classes to import.</p><p>The main 
disadvantage of the method naming conventions is that the method names are not 
meaningful. <code>onSuccessFromLoginForm()</code> is a less meaningful name 
than <code>storeUserCredentialsAndReturnToProductsPage()</code>, for 
example.</p><p>The second disadvantage is you are more susceptible to 
off-by-a-character errors. For example, <code>onSucessFromLoginForm()</code> 
will <em>never</em> be called because the event name is misspelled; this would 
not happen using the annotation approach:</p><div class="code panel pdl" 
style="border-width:
  1px;"><div class="codeContent panelContent pdl">
 <pre><code class="language-java">  @OnEvent(value=EventConstants.SUCCESS, 
component="loginForm")
   Object storeUserCredentialsAndReturnToProductsPage()
   {

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 Fri Feb 28 
18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><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>This is an advanced topic. Most 
users won't ever need to know anything about the page life 
cycle.</p></div></div><p>In Tapestry, you are free to develop your presentation 
objects, page and components classes, as ordinary objects, complete with 
instance variables and so forth.</p><p>This is somewhat revolutionary in terms 
of web development in Java. By comparison, using traditional servlets, or 
Struts, your presentation objects (Servlets, or Struts Actions, or the 
equivalent in other frameworks) are <em>stateless singletons</em>. That is, a 
<em>single</em> instance is created, and all incoming requests are threaded 
through that single instance. Because multiple requests are handled by many 
different threads
 , this means that the singleton's instance variables are useless ... any value 
written into an instance variable would immediately be overwritten by a 
different thread. Thus, it is necessary to use the Servlet API's 
HttpServletRequest object to store per-request data, and the HttpSession object 
to store data between requests.</p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><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>This is an advanced topic. Most 
users won't ever need to know anything about the page life 
cycle.</p></div></div><p>In Tapestry, you are free to develop your presentation 
objects, page and components classes, as ordinary objects, complete with 
instance variables and so forth.</p><p>This is somewhat revolutionary in terms 
of web development in Java. By comparison, using traditional servlets, or 
Struts, your presentation objects (Servlets, or Struts Actions, or the 
equivalent in other frameworks) are <em>stateless singletons</em>. That is, a 
<em>single</em> instance is created, and all incoming requests are threaded 
through that single instance. Because multiple requests are handled by many 
different threads
 , this means that the singleton's instance variables are useless ... any value 
written into an instance variable would immediately be overwritten by a 
different thread. Thus, it is necessary to use the Servlet API's 
HttpServletRequest object to store per-request data, and the HttpSession object 
to store data between requests.</p><div class="aui-label" style="float:right" 
title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/page-navigation.html
==============================================================================
--- websites/production/tapestry/content/page-navigation.html (original)
+++ websites/production/tapestry/content/page-navigation.html Fri Feb 28 
18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent">                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><div class="aui-label" 
style="float:right" title="Related Articles">
 
 
 
@@ -252,11 +244,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.rbtoc1740593852198 {padding: 0px;}
-div.rbtoc1740593852198 ul {margin-left: 0px;}
-div.rbtoc1740593852198 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1740766652566 {padding: 0px;}
+div.rbtoc1740766652566 ul {margin-left: 0px;}
+div.rbtoc1740766652566 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></h2><div class="toc-macro rbtoc1740593852198">
+/*]]>*/</style></h2><div class="toc-macro rbtoc1740766652566">
 <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/parameter-type-coercion.html
==============================================================================
--- websites/production/tapestry/content/parameter-type-coercion.html (original)
+++ websites/production/tapestry/content/parameter-type-coercion.html Fri Feb 
28 18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><p><strong 
style="text-align: justify;">Type Coercion</strong><span style="color: 
rgb(0,0,0);">&#160;is the conversion of one type of object to a new object of a 
different type with similar content. Tapestry frequently must coerce objects 
from one type to another. A common example is the coercion of a string into an 
integer or a double.</span></p><p>See&#160;<a href="type-coercion.html">Type 
Coercer Service</a> for the list of build-in coercions.</p><h2 
id="ParameterTypeCoercion-ParameterTypeCoercions">Parameter Type Coercions</h2> 
                   
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><p><strong 
style="text-align: justify;">Type Coercion</strong><span style="color: 
rgb(0,0,0);">&#160;is the conversion of one type of object to a new object of a 
different type with similar content. Tapestry frequently must coerce objects 
from one type to another. A common example is the coercion of a string into an 
integer or a double.</span></p><p>See&#160;<a href="type-coercion.html">Type 
Coercer Service</a> for the list of build-in coercions.</p><h2 
id="ParameterTypeCoercion-ParameterTypeCoercions">Parameter Type 
Coercions</h2><div class="aui-label" style="float:right" title="Related 
Articles">
 
 
 

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 Fri 
Feb 28 18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><p>Tapestry has a 
great <strong>performance</strong> story to tell. It's designed to take 
advantage of the speed of the modern JVM: no reflection, built to support a 
high level of concurrency without contention, and clean, lightweight code 
paths. In addition, there is built-in integrated GZIP content compression, 
far-future expires headers on static resources, JavaScript aggregation and 
minification, and an intentionally lightweight use of the HTTPSession. The 
result is a blistering fast framework. See <a class="external-link" 
href="http://tapestry.apache.org/2011/06/13/tapestrys-performance-tested.html";>Tapestry's
 Performance Tested</a> for some objective numbers.</p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><p>Tapestry has a 
great <strong>performance</strong> story to tell. It's designed to take 
advantage of the speed of the modern JVM: no reflection, built to support a 
high level of concurrency without contention, and clean, lightweight code 
paths. In addition, there is built-in integrated GZIP content compression, 
far-future expires headers on static resources, JavaScript aggregation and 
minification, and an intentionally lightweight use of the HTTPSession. The 
result is a blistering fast framework. See <a class="external-link" 
href="http://tapestry.apache.org/2011/06/13/tapestrys-performance-tested.html";>Tapestry's
 Performance Tested</a> for some objective numbers.</p><div class="aui-label" 
style="float:right" title="Related Articles">
 
 
 

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 Fri Feb 28 
18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><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 use of the term "persistence" 
here refers to <em>page-level</em> persistence, NOT database 
persistence.</p></div></div><p>Most instance variables in Tapestry are 
automatically cleared at the end of each request. This is important, as it 
pertains to how Tapestry pages are shared, over time, by many users.</p>        
            
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><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 use of the term "persistence" 
here refers to <em>page-level</em> persistence, NOT database 
persistence.</p></div></div><p>Most instance variables in Tapestry are 
automatically cleared at the end of each request. This is important, as it 
pertains to how Tapestry pages are shared, over time, by many users.</p><div 
class="aui-label" style="float:right" title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/pipelinebuilder-service.html
==============================================================================
--- websites/production/tapestry/content/pipelinebuilder-service.html (original)
+++ websites/production/tapestry/content/pipelinebuilder-service.html Fri Feb 
28 18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><p>The 
<strong>PipelineBuilder Service</strong> is a service used to create pipelines, 
also known as <em>filter chains</em>. An example of this is the Filter and 
FilterChain interfaces inside the Servlet API.</p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><p>The 
<strong>PipelineBuilder Service</strong> is a service used to create pipelines, 
also known as <em>filter chains</em>. An example of this is the Filter and 
FilterChain interfaces inside the Servlet API.</p><div class="aui-label" 
style="float:right" title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/principles.html
==============================================================================
--- websites/production/tapestry/content/principles.html (original)
+++ websites/production/tapestry/content/principles.html Fri Feb 28 18:18:17 
2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent">                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><div class="aui-label" 
style="float:right" title="Related Articles">
 
 
 

Modified: websites/production/tapestry/content/property-expressions.html
==============================================================================
--- websites/production/tapestry/content/property-expressions.html (original)
+++ websites/production/tapestry/content/property-expressions.html Fri Feb 28 
18:18:17 2025
@@ -154,15 +154,7 @@
             
             <!-- /// Content Start -->
             <div id="content">
-                            <div id="ConfluenceContent"><p>Tapestry uses 
<strong>property expressions</strong> to move data between components. Property 
expressions are the basis of the <a href="component-parameters.html">component 
parameters</a> and <a href="component-templates.html">template 
expansions</a>.</p>                    
-    
-<div class="adaptavist-psl-unlicensed-banner adaptavist-psl-warning 
adaptavist-psl-js">
-    <b>This page contains macros or features from a plugin which requires a 
valid license.</b>
-
-            <p>You will need to contact your administrator.</p>
-    
-</div>
-<div class="aui-label" style="float:right" title="Related Articles">
+                            <div id="ConfluenceContent"><p>Tapestry uses 
<strong>property expressions</strong> to move data between components. Property 
expressions are the basis of the <a href="component-parameters.html">component 
parameters</a> and <a href="component-templates.html">template 
expansions</a>.</p><div class="aui-label" style="float:right" title="Related 
Articles">
 
 
 

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 Fri Feb 28 
18:18:17 2025
@@ -155,11 +155,11 @@
             <!-- /// Content Start -->
             <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.rbtoc1740593605748 {padding: 0px;}
-div.rbtoc1740593605748 ul {margin-left: 0px;padding-left: 5px;}
-div.rbtoc1740593605748 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1740766406444 {padding: 0px;}
+div.rbtoc1740766406444 ul {margin-left: 0px;padding-left: 5px;}
+div.rbtoc1740766406444 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1740593605748">
+/*]]>*/</style></p><div class="toc-macro rbtoc1740766406444">
 <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="#ReleaseNotes5.0-Tapest
 ryVersion5.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