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

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

Author: buildbot
Date: Mon Feb 19 19:21:08 2018
New Revision: 1025617

Log:
Production update by buildbot for tapestry

Modified:
    websites/production/tapestry/content/ajax-components-faq.html
    websites/production/tapestry/content/beaneditform-faq.html
    websites/production/tapestry/content/cache/main.pageCache
    websites/production/tapestry/content/component-events-faq.html
    websites/production/tapestry/content/configuration.html
    websites/production/tapestry/content/forms-and-form-components-faq.html
    websites/production/tapestry/content/hibernate-support-faq.html
    websites/production/tapestry/content/how-to-upgrade.html
    websites/production/tapestry/content/injection-faq.html
    websites/production/tapestry/content/integration-with-existing-applications.html
    websites/production/tapestry/content/javascript-faq.html
    websites/production/tapestry/content/limitations.html
    websites/production/tapestry/content/link-components-faq.html
    websites/production/tapestry/content/maven-support-faq.html
    websites/production/tapestry/content/release-notes-50.html
    websites/production/tapestry/content/release-notes-51.html
    websites/production/tapestry/content/release-notes-52.html
    websites/production/tapestry/content/release-notes-53.html
    websites/production/tapestry/content/release-notes-531.html
    websites/production/tapestry/content/release-notes-532.html
    websites/production/tapestry/content/release-notes-533.html
    websites/production/tapestry/content/release-notes-534.html
    websites/production/tapestry/content/release-notes-535.html
    websites/production/tapestry/content/release-notes-536.html
    websites/production/tapestry/content/release-upgrade-faq.html
    websites/production/tapestry/content/request-processing-faq.html
    websites/production/tapestry/content/security-faq.html
    websites/production/tapestry/content/specific-errors-faq.html
    websites/production/tapestry/content/tapestry-inversion-of-control-faq.html

Modified: websites/production/tapestry/content/ajax-components-faq.html
==============================================================================
--- websites/production/tapestry/content/ajax-components-faq.html (original)
+++ websites/production/tapestry/content/ajax-components-faq.html Mon Feb 19 19:21:08 2018
@@ -77,7 +77,14 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><h2 id="AjaxComponentsFAQ-AjaxComponents">Ajax Components</h2><p>Main article: <a  href="ajax-components-faq.html">Ajax Components FAQ</a></p><h3 id="AjaxComponentsFAQ-DoIhavetospecifybothidandt:idforZonecomponents?">Do I have to specify both <code>id</code> and <code>t:id</code> for Zone components?</h3><p>The examples for the Zone component (in the Component Reference) consistently specify both <code>id</code> and <code>t:id</code> and this is probably a good idea.</p><p>Generally speaking, if you don't specify the client-side id (the <code>id</code> attribute), it will be the same as the Tapestry component id (<code>t:id</code>).</p><p>However, there are any number of exceptions to this rule. The Zone may be rendering inside a Loop (in which case, each rendering will have a unique client side id). The Zone may be rendering as part of a partial page render, in which case, a random unique id is inserted into the id. There are other exampl
 es where Tapestry component ids in nested components may also clash.</p><p>The point is, to be sure, specify the exact client id. This will be the value for the <code>zone</code> parameter of the triggering component (such as a Form, PageLink, ActionLink, etc.).</p><h3 id="AjaxComponentsFAQ-HowdoIupdatethecontentofaZonefromaneventhandlermethod?">How do I update the content of a Zone from an event handler method?</h3><p>When a client-side link or form triggers an update, the return value from the event handler method is used to construct a partial page response; this partial page response includes markup content that is used to update the Zone's client-side <code>&lt;div&gt;</code> element.</p><p>Where does that content come from? You inject it into your page.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+                <div id="ConfluenceContent"><h1 id="AjaxComponentsFAQ-AjaxComponents">Ajax Components</h1><p>Main article: <a  href="ajax-and-zones.html">Ajax and Zones</a></p><h2 id="AjaxComponentsFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1519068036620 {padding: 0px;}
+div.rbtoc1519068036620 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068036620 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068036620">
+<ul class="toc-indentation"><li><a  href="#AjaxComponentsFAQ-DoIhavetospecifybothidandt:idforZonecomponents?">Do I have to specify both id and t:id for Zone components?</a></li><li><a  href="#AjaxComponentsFAQ-HowdoIupdatethecontentofaZonefromaneventhandlermethod?">How do I update the content of a Zone from an event handler method?</a></li><li><a  href="#AjaxComponentsFAQ-HowtoIupdatemultiplezonesinasingleeventhandler?">How to I update multiple zones in a single event handler?</a></li><li><a  href="#AjaxComponentsFAQ-What'sthatweirdnumberinthemiddleoftheclientidsafteraZoneisupdated?">What's that weird number in the middle of the client ids after a Zone is updated?</a></li><li><a  href="#AjaxComponentsFAQ-WhydoIsometimesgettheexception&quot;Therenderedcontentdidnotincludeanyelementsthatallowforthepositioningofthehiddenformfield'selement.&quot;whenrenderinganemptyZone?">Why do I sometimes get the exception "The rendered content did not include any elements that allow for the positioni
 ng of the hidden form field's element." when rendering an empty Zone?</a></li></ul>
+</div><h2 id="AjaxComponentsFAQ-DoIhavetospecifybothidandt:idforZonecomponents?">Do I have to specify both <code>id</code> and <code>t:id</code> for Zone components?</h2><p>The examples for the Zone component (in the Component Reference) consistently specify both <code>id</code> and <code>t:id</code> and this is probably a good idea.</p><p>Generally speaking, if you don't specify the client-side id (the <code>id</code> attribute), it will be the same as the Tapestry component id (<code>t:id</code>).</p><p>However, there are any number of exceptions to this rule. The Zone may be rendering inside a Loop (in which case, each rendering will have a unique client side id). The Zone may be rendering as part of a partial page render, in which case, a random unique id is inserted into the id. There are other examples where Tapestry component ids in nested components may also clash.</p><p>The point is, to be sure, specify the exact client id. This will be the value for the <code>zone</code> p
 arameter of the triggering component (such as a Form, PageLink, ActionLink, etc.).</p><h2 id="AjaxComponentsFAQ-HowdoIupdatethecontentofaZonefromaneventhandlermethod?">How do I update the content of a Zone from an event handler method?</h2><p>When a client-side link or form triggers an update, the return value from the event handler method is used to construct a partial page response; this partial page response includes markup content that is used to update the Zone's client-side <code>&lt;div&gt;</code> element.</p><p>Where does that content come from? You inject it into your page.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;t:zone id="search" t:id="searchZone"&gt;
   &lt;t:form t:id="searchForm" zone="searchZone"&gt;
     &lt;t:textfield t:id="query" size="20"/&gt;
@@ -111,7 +118,7 @@
     return statusZone.getBody();
   }
 </pre>
-</div></div><h3 id="AjaxComponentsFAQ-HowtoIupdatemultiplezonesinasingleeventhandler?">How to I update multiple zones in a single event handler?</h3><p>To do this, you must know, on the server, the client ids of each Zone. That's one of the reasons that you will generally set the Zone's client id (via the Zone's id parameter), rather than let Tapestry assign a client id for you.</p><p>From the event handler method, instead of returning a Block or a Component, return a multi-zone update:</p><p>&#160;</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Multiple Zone Update (5.3+)</b></div><div class="codeContent panelContent pdl">
+</div></div><h2 id="AjaxComponentsFAQ-HowtoIupdatemultiplezonesinasingleeventhandler?">How to I update multiple zones in a single event handler?</h2><p>To do this, you must know, on the server, the client ids of each Zone. That's one of the reasons that you will generally set the Zone's client id (via the Zone's id parameter), rather than let Tapestry assign a client id for you.</p><p>From the event handler method, instead of returning a Block or a Component, return a multi-zone update:</p><p>&#160;</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Multiple Zone Update (5.3+)</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  @Inject
   private Block searchResults;
 
@@ -130,7 +137,7 @@
     ajaxResponseRenderer.addRender("results", searchResults).addRender("status", statusBlock);
   }
 </pre>
-</div></div><p>Note: Users of Tapestry 5.2 and earlier (which didn't support AjaxResponseRenderer) must replace that last line with: <code>return new MultiZoneUpdate("results", searchResults).add("status", statusBlock);</code></p><p>AjaxResponseRenderer adds other useful commands as well. It also has the advantage that a simple return value can be returned to render content for the Zone that triggered the request.</p><h3 id="AjaxComponentsFAQ-What'sthatweirdnumberinthemiddleoftheclientidsafteraZoneisupdated?">What's that weird number in the middle of the client ids after a Zone is updated?</h3><p>You might start with markup in your template for a component such as a TextField:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Note: Users of Tapestry 5.2 and earlier (which didn't support AjaxResponseRenderer) must replace that last line with: <code>return new MultiZoneUpdate("results", searchResults).add("status", statusBlock);</code></p><p>AjaxResponseRenderer adds other useful commands as well. It also has the advantage that a simple return value can be returned to render content for the Zone that triggered the request.</p><h2 id="AjaxComponentsFAQ-What'sthatweirdnumberinthemiddleoftheclientidsafteraZoneisupdated?">What's that weird number in the middle of the client ids after a Zone is updated?</h2><p>You might start with markup in your template for a component such as a TextField:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">  &lt;t:textfield t:id="firstName"/&gt;
 </pre>
 </div></div><p>When the component initially renders as part of a full page render, you get a sensible bit of markup:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
@@ -139,7 +146,7 @@
 </div></div><p>But when the form is inside a Zone and rendered as part of a zone update, the ids get weird:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">   &lt;input id="firstName_12a820cc40e" name="firstName" type="text"&gt;
 </pre>
-</div></div><p>What's happening here is that Tapestry is working to prevent unwanted id clashes as part of the page update. In an HTML document, each <code>id</code> is expected to be unique; most JavaScript is keyed off of the <code>id</code> field, for instance.</p><p>In a full page render, components don't just use their component id (<code>t:id</code>) as their client id; instead they use the <code>JavaScriptSupport</code> environmental to allocate a unique id. When there's no loops or conflicts, the client id matches the component id.</p><p>When the component is inside a loop, a suffix is appended: <code>firstName</code>, <code>firstName_0</code>, <code>firstName_1</code>, etc.</p><p>When the component is rendered as part of an Ajax partial page update, the rules are different. Since Tapestry doesn't know what content has been rendered onto the page previously, it can't use its normal tricks to ensure that ids are unique.</p><p>Instead, Tapestry creates a random-ish unique id s
 uffix, such as "12a820cc40e" in the example; this suffix is appended to all allocated ids to ensure that they do not conflict with previously rendered ids.</p><h3 id="AjaxComponentsFAQ-WhydoIsometimesgettheexception&quot;Therenderedcontentdidnotincludeanyelementsthatallowforthepositioningofthehiddenformfield'selement.&quot;whenrenderinganemptyZone?">Why do I sometimes get the exception "The rendered content did not include any elements that allow for the positioning of the hidden form field's element." when rendering an empty Zone?</h3><p>As part of Tapestry's form processing, it must write a hidden input element with information needed when the form is submitted. Since the content of a Zone may be changed or removed, a hidden field is created just for the Zone, separate from the rest of the enclosing form.</p><p>At the same time, Tapestry wants to position the &lt;input&gt; field in a valid location, and HTML defines some constraints for that; an input field must appear inside a &l
 t;p&gt; or &lt;div&gt; element. If your zone is initially empty, there's no place to put the hidden element, and Tapestry will complain.</p><p>The solution is simple: just add a &lt;div&gt; element to the body of the zone. This<span> ensures that there's a place for the hidden input field. &#160;An empty &lt;div&gt; element (even one containing a hidden form field) will not affect page layout.</span></p></div>
+</div></div><p>What's happening here is that Tapestry is working to prevent unwanted id clashes as part of the page update. In an HTML document, each <code>id</code> is expected to be unique; most JavaScript is keyed off of the <code>id</code> field, for instance.</p><p>In a full page render, components don't just use their component id (<code>t:id</code>) as their client id; instead they use the <code>JavaScriptSupport</code> environmental to allocate a unique id. When there's no loops or conflicts, the client id matches the component id.</p><p>When the component is inside a loop, a suffix is appended: <code>firstName</code>, <code>firstName_0</code>, <code>firstName_1</code>, etc.</p><p>When the component is rendered as part of an Ajax partial page update, the rules are different. Since Tapestry doesn't know what content has been rendered onto the page previously, it can't use its normal tricks to ensure that ids are unique.</p><p>Instead, Tapestry creates a random-ish unique id s
 uffix, such as "12a820cc40e" in the example; this suffix is appended to all allocated ids to ensure that they do not conflict with previously rendered ids.</p><h2 id="AjaxComponentsFAQ-WhydoIsometimesgettheexception&quot;Therenderedcontentdidnotincludeanyelementsthatallowforthepositioningofthehiddenformfield'selement.&quot;whenrenderinganemptyZone?">Why do I sometimes get the exception "The rendered content did not include any elements that allow for the positioning of the hidden form field's element." when rendering an empty Zone?</h2><p>As part of Tapestry's form processing, it must write a hidden input element with information needed when the form is submitted. Since the content of a Zone may be changed or removed, a hidden field is created just for the Zone, separate from the rest of the enclosing form.</p><p>At the same time, Tapestry wants to position the &lt;input&gt; field in a valid location, and HTML defines some constraints for that; an input field must appear inside a &l
 t;p&gt; or &lt;div&gt; element. If your zone is initially empty, there's no place to put the hidden element, and Tapestry will complain.</p><p>The solution is simple: just add a &lt;div&gt; element to the body of the zone. This<span> ensures that there's a place for the hidden input field. &#160;An empty &lt;div&gt; element (even one containing a hidden form field) will not affect page layout.</span></p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/beaneditform-faq.html
==============================================================================
--- websites/production/tapestry/content/beaneditform-faq.html (original)
+++ websites/production/tapestry/content/beaneditform-faq.html Mon Feb 19 19:21:08 2018
@@ -78,11 +78,11 @@
 
       <div id="content">
                 <div id="ConfluenceContent"><h1 id="BeanEditFormFAQ-BeanEditForm">BeanEditForm</h1><p>Main Article: <a  href="beaneditform-guide.html">BeanEditForm Guide</a></p><h2 id="BeanEditFormFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1519064398641 {padding: 0px;}
-div.rbtoc1519064398641 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1519064398641 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1519068040277 {padding: 0px;}
+div.rbtoc1519068040277 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068040277 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1519064398641">
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068040277">
 <ul class="toc-indentation"><li><a  href="#BeanEditFormFAQ-WhydoIgetexceptionsaboutinstantiatingabeanwhenusingBeanEditForm?">Why do I get exceptions about instantiating a bean when using BeanEditForm?</a></li><li><a  href="#BeanEditFormFAQ-What'sthedifferencebetweenBeanEditorandBeanEditForm?">What's the difference between BeanEditor and BeanEditForm?</a></li><li><a  href="#BeanEditFormFAQ-HowdoIcustomizethelayoutoftheBeanEditForm?">How do I customize the layout of the BeanEditForm?</a></li></ul>
 </div><h2 id="BeanEditFormFAQ-WhydoIgetexceptionsaboutinstantiatingabeanwhenusingBeanEditForm?">Why do I get exceptions about instantiating a bean when using BeanEditForm?</h2><p>When you render a BeanEditForm, or when the rendered form is submitted, Tapestry must instantiate an instance of the object to be edited. This occurs when the BeanEditForm's <code>object</code> parameter is bound to null: Tapestry instantiates an instance of the property type so that the BeanEditForm has an object to read default values from, or to push submitted values into.</p><p>By default, this uses the standard <a  href="injection-in-detail.html">injection mechanism</a>, which means that Tapestry will identify the public constructor with the most parameters, and attempt to find objects and other objects for each constructor parameter.</p><p>There's two ways to fine tune this so you don't get errors:</p><ul><li>Place an @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apac
 he/tapestry5/ioc/annotations/Inject.html">Inject</a> annotation on the correct constructor to use (often, the constructor with no parameters).</li></ul><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 MyBean {

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

Modified: websites/production/tapestry/content/component-events-faq.html
==============================================================================
--- websites/production/tapestry/content/component-events-faq.html (original)
+++ websites/production/tapestry/content/component-events-faq.html Mon Feb 19 19:21:08 2018
@@ -77,14 +77,20 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><h2 id="ComponentEventsFAQ-ComponentEvents">Component Events</h2><h3 id="ComponentEventsFAQ-WhydoesTapestrysendaredirectafteraformissubmitted?">Why does Tapestry send a redirect after a form is submitted?</h3><p>This is an extension of the <a  class="external-link" href="http://en.wikipedia.org/wiki/Post/Redirect/Get" rel="nofollow">Post/Redirect/Get</a> approach. It ensures that after an operation that updates server-side state, such as a form submission, if the user resubmits the resulting page, the operation is <strong>not</strong> performed a second time; instead just the results of the operation, reflecting the changed server-side state, is re-rendered.</p><p>This has the unwanted requirement that any data needed to render the response must persist between the event request (the form submission) and the render request; this often means that fields must be annotated with @<a  class="external-link" href="http://tapestry.apache.org/curre
 nt/apidocs/org/apache/tapestry5/annotations/Persist.html">Persist</a>.
+                <div id="ConfluenceContent"><h1 id="ComponentEventsFAQ-ComponentEvents">Component Events</h1><p>Main Article: <a  href="component-events.html">Component Events</a></p><h2 id="ComponentEventsFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1519068039274 {padding: 0px;}
+div.rbtoc1519068039274 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068039274 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068039274">
+<ul class="toc-indentation"><li><a  href="#ComponentEventsFAQ-WhydoesTapestrysendaredirectafteraformissubmitted?">Why does Tapestry send a redirect after a form is submitted?</a></li><li><a  href="#ComponentEventsFAQ-IspecifiedazoneinmyActionLink/EventLink,sowhydoesn'tmyeventfireviaajax(request.isXHR()isfalse)?">I specified a zone in my ActionLink/EventLink, so why doesn't my event fire via ajax (request.isXHR() is false)?</a></li></ul>
+</div><h2 id="ComponentEventsFAQ-WhydoesTapestrysendaredirectafteraformissubmitted?">Why does Tapestry send a redirect after a form is submitted?</h2><p>This is an extension of the <a  class="external-link" href="http://en.wikipedia.org/wiki/Post/Redirect/Get" rel="nofollow">Post/Redirect/Get</a> approach. It ensures that after an operation that updates server-side state, such as a form submission, if the user resubmits the resulting page, the operation is <strong>not</strong> performed a second time; instead just the results of the operation, reflecting the changed server-side state, is re-rendered.</p><p>This has the unwanted requirement that any data needed to render the response must persist between the event request (the form submission) and the render request; this often means that fields must be annotated with @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Persist.html">Persist</a>.
 
 
 
 </p><div class="aui-message aui-message-info">
 Added in 5.2 
    If you want to short-circuit this behavior and render a response directly, your component event handle method may return an instance of [StreamPageContent|http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/StreamPageContent.html]. Tapestry will render the page as part of the event request and stream its content back to the client web browser, rather than sending the normal redirect.
-
 </div>
 
 
@@ -92,8 +98,7 @@ Added in 5.2
 <div class="aui-message aui-message-info">
 Added in 5.4 
    Starting in release 5.4, Forms (by default) will NOT redirect after post if there are validation errors. This makes it possible to re-render the page, with error decorations, without requiring that the validation errors be stored in the session between requests ... and that means that the application can remain stateless much longer.
-
-</div><h3 id="ComponentEventsFAQ-IspecifiedazoneinmyActionLink/EventLink,sowhydoesn'tmyeventfireviaajax(request.isXHR()isfalse)?">I specified a zone in my ActionLink/EventLink, so why doesn't my event fire via ajax (request.isXHR() is false)?</h3><p>Check your browser's JavaScript console for errors. It's likely that a JavaScript error has prevented Tapestry from transforming your ActionLink/EventLink from a page render action to an ajax action.</p></div>
+</div><h2 id="ComponentEventsFAQ-IspecifiedazoneinmyActionLink/EventLink,sowhydoesn'tmyeventfireviaajax(request.isXHR()isfalse)?">I specified a zone in my ActionLink/EventLink, so why doesn't my event fire via ajax (request.isXHR() is false)?</h2><p>Check your browser's JavaScript console for errors. It's likely that a JavaScript error has prevented Tapestry from transforming your ActionLink/EventLink from a page render action to an ajax action.</p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/configuration.html
==============================================================================
--- websites/production/tapestry/content/configuration.html (original)
+++ websites/production/tapestry/content/configuration.html Mon Feb 19 19:21:08 2018
@@ -147,12 +147,12 @@
 
 
 <h1 id="Configuration-ConfiguringTapestry">Configuring Tapestry</h1><p>This page discusses all the ways in which Tapestry can be configured. Tapestry applications are configured almost entirely using Java, with very little XML at all.</p><p><strong>Contents</strong></p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1518970800044 {padding: 0px;}
-div.rbtoc1518970800044 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1518970800044 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1519068033351 {padding: 0px;}
+div.rbtoc1519068033351 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068033351 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1518970800044">
-<ul class="toc-indentation"><li><a  href="#Configuration-XMLconfiguration(web.xml)">XML configuration (web.xml)</a></li><li><a  href="#Configuration-YourApplication'sModuleClass">Your Application's Module Class</a></li><li><a  href="#Configuration-ConfigurationSymbolNames">Configuration Symbol Names</a></li><li><a  href="#Configuration-SettingComponentParameterDefaults">Setting Component Parameter Defaults</a></li><li><a  href="#Configuration-ConfiguringIgnoredPaths">Configuring Ignored Paths</a></li><li><a  href="#Configuration-ConfiguringContentTypeMapping">Configuring Content Type Mapping</a></li><li><a  href="#Configuration-SettingExecutionModes">Setting Execution Modes</a></li></ul>
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068033351">
+<ul class="toc-indentation"><li><a  href="#Configuration-XMLconfiguration(web.xml)">XML configuration (web.xml)</a></li><li><a  href="#Configuration-YourApplication'sModuleClass">Your Application's Module Class</a></li><li><a  href="#Configuration-ConfigurationSymbolNames">Configuration Symbol Names</a></li><li><a  href="#Configuration-SettingComponentParameterDefaults">Setting Component Parameter Defaults</a></li><li><a  href="#Configuration-ConfiguringIgnoredPaths">Configuring Ignored Paths</a></li><li><a  href="#Configuration-ConfiguringContentTypeMapping">Configuring Content Type Mapping</a></li><li><a  href="#Configuration-SettingExecutionModes">Setting Execution Modes</a></li><li><a  href="#Configuration-SegregatingApplicationsIntoFolders">Segregating Applications Into Folders</a></li></ul>
 </div><h2 id="Configuration-XMLconfiguration(web.xml)">XML configuration (web.xml)</h2><p>Tapestry runs on top of the standard Java Servlet API. To the servlet container, such as Tomcat, Tapestry appears as a <em>servlet filter</em>. This gives Tapestry great flexibility in matching URLs without requiring lots of XML configuration.</p><p>Although most configuration is done with Java, a small but necessary amount of configuration occurs inside the servlet deployment descriptor, WEB-INF/web.xml. Most of the configuration is boilerplate, nearly the same for all applications.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>web.xml (partial)</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;!DOCTYPE web-app
       PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
@@ -506,7 +506,7 @@ Added in 5.3
 </div></div><p>Execution mode itself may be a comma separated list:</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;">-Dtapestry.execution-mode=uat,integration jetty:run
 </pre>
-</div></div><p><span style="color: rgb(83,145,38);">Segregating Applications Into Folders</span></p><p>In many cases where Tapestry is being adopted into an existing web application (possibly written in Tapestry 4 or some other framework), it is nice to segregate the Tapestry application into its own folder, to avoid conflicts with the existing application or servlets.</p>
+</div></div><h2 id="Configuration-SegregatingApplicationsIntoFolders"><span style="color: rgb(83,145,38);">Segregating Applications Into Folders</span></h2><p>In many cases where Tapestry is being adopted into an existing web application (possibly written in Tapestry 4 or some other framework), it is nice to segregate the Tapestry application into its own folder, to avoid conflicts with the existing application or servlets.</p>
 
 
 

Modified: websites/production/tapestry/content/forms-and-form-components-faq.html
==============================================================================
--- websites/production/tapestry/content/forms-and-form-components-faq.html (original)
+++ websites/production/tapestry/content/forms-and-form-components-faq.html Mon Feb 19 19:21:08 2018
@@ -77,12 +77,12 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><h1 id="FormsandFormComponentsFAQ-FormsandFormComponents">Forms and Form Components</h1><p>Main article: <a  href="forms-and-validation.html">Forms and Validation</a></p><h3 id="FormsandFormComponentsFAQ-Contents">Contents</h3><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1519064398334 {padding: 0px;}
-div.rbtoc1519064398334 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1519064398334 li {margin-left: 0px;padding-left: 0px;}
+                <div id="ConfluenceContent"><h1 id="FormsandFormComponentsFAQ-FormsandFormComponents">Forms and Form Components</h1><p>Main article: <a  href="forms-and-validation.html">Forms and Validation</a></p><h2 id="FormsandFormComponentsFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1519068036336 {padding: 0px;}
+div.rbtoc1519068036336 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068036336 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1519064398334">
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068036336">
 <ul class="toc-indentation"><li><a  href="#FormsandFormComponentsFAQ-Whatisthet:formdatahiddenfieldfor?">What is the t:formdata hidden field for?</a></li><li><a  href="#FormsandFormComponentsFAQ-HowdoIchangethelabelforafieldonthefly?">How do I change the label for a field on the fly?</a></li><li><a  href="#FormsandFormComponentsFAQ-Tapestryfocusesonthewrongfieldinmyform,howdoIfixthat?">Tapestry focuses on the wrong field in my form, how do I fix that?</a></li></ul>
 </div><h2 id="FormsandFormComponentsFAQ-Whatisthet:formdatahiddenfieldfor?">What is the <code>t:formdata</code> hidden field for?</h2><p>In Tapestry, rendering a form can be a complicated process; inside the body of the Form component are many of field components: TextField, Select, TextArea, and so forth. Each of these must pull data out of your data model and convert it to the string form used inside the client web browser. In addition, JavaScript to support client-side validation must be generated. This can be further complicated by the use of Loop and If components, or made really complicated by the use of Block (to render portions of other pages: this is what the BeanEditForm component does).</p><p>Along the way, the Form is generating unique form control names for each field component, as it renders.</p><p>When the client-side Form is submitted, an event is triggered on the server-side Form component. It now needs to locate each component, in turn, inform the component of its 
 control name, and allow the component to read the corresponding query parameter. The component then converts the client-side string back into a server-side value and performs validations before updating the data model.</p><p>That's where <code>t:formdata</code> comes in. While components are rendering, they are using the FormSupport environmental object to record callbacks:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>FormSupport.java (partial)</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: true; theme: Default" style="font-size:12px;">public interface FormSupport extends ClientElement

Modified: websites/production/tapestry/content/hibernate-support-faq.html
==============================================================================
--- websites/production/tapestry/content/hibernate-support-faq.html (original)
+++ websites/production/tapestry/content/hibernate-support-faq.html Mon Feb 19 19:21:08 2018
@@ -77,7 +77,14 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><h2 id="HibernateSupportFAQ-HibernateSupport">Hibernate Support</h2><p>Main article: <a  href="hibernate-support-faq.html">Hibernate Support FAQ</a></p><h3 id="HibernateSupportFAQ-HowdoIgetHibernatetostartupupwhentheapplicationstartsup,ratherthanlazilywiththefirstrequestfortheapplication?">How do I get Hibernate to startup up when the application starts up, rather than lazily with the first request for the application?</h3><p>This was a minor problem in 5.0; by 5.1 it is just a matter of overriding the configuration system <code>tapestry.hibernate-early-startup</code> to "true".</p></div>
+                <div id="ConfluenceContent"><h1 id="HibernateSupportFAQ-HibernateSupport">Hibernate Support</h1><p>Main article: <a  href="hibernate.html">Hibernate</a></p><h2 id="HibernateSupportFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1519068037169 {padding: 0px;}
+div.rbtoc1519068037169 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068037169 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068037169">
+<ul class="toc-indentation"><li><a  href="#HibernateSupportFAQ-HowdoIgetHibernatetostartupupwhentheapplicationstartsup,ratherthanlazilywiththefirstrequestfortheapplication?">How do I get Hibernate to startup up when the application starts up, rather than lazily with the first request for the application?</a></li></ul>
+</div><h2 id="HibernateSupportFAQ-HowdoIgetHibernatetostartupupwhentheapplicationstartsup,ratherthanlazilywiththefirstrequestfortheapplication?">How do I get Hibernate to startup up when the application starts up, rather than lazily with the first request for the application?</h2><p>This was a minor problem in 5.0; by 5.1 it is just a matter of overriding the configuration system <code>tapestry.hibernate-early-startup</code> to "true".</p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/how-to-upgrade.html
==============================================================================
--- websites/production/tapestry/content/how-to-upgrade.html (original)
+++ websites/production/tapestry/content/how-to-upgrade.html Mon Feb 19 19:21:08 2018
@@ -67,7 +67,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p>Upgrading from one Tapestry version to the next is usually quite easy. Backward compatibility is one of Tapestry's <a  href="how-to-upgrade.html">core principles</a>. Even so, sometimes a checklist comes in handy to be sure you consider all of the implications of an upgrade.</p><h2 id="HowtoUpgrade-BeforeYouUpgrade">Before You Upgrade</h2><ol><li><strong>Check Java version compatibility: </strong>See the compatibility matrix at <strong><a  href="supported-environments-and-versions.html">Supported Environments and Versions</a></strong>.<strong><br clear="none"></strong></li><li><strong>Check 3rd Party compatibility:</strong> Find out whether your 3rd party modules are compatible with the new version of Tapestry. Although the Tapestry developers try very hard to maintain backward compatibility across versions, sometimes an older version of a 3rd party module (particularly if it uses internal APIs) won't work with a newly-released version 
 of Tapestry, and in that case you may have to wait until that 3rd party module is updated by its developers.</li><li><strong>Find and replace all calls to deprecated APIs.</strong> Those are the places most likely to be broken after the upgrade. Most IDEs make it easy to find all deprecated items. In Eclipse, for example, the "Problems" view will show warnings for the use of deprecated APIs if you set it to show "All Errors/Warnings on Project".</li><li><strong>Read the Release Notes:</strong> Each Tapestry version has a <a  href="how-to-upgrade.html">How to Upgrade</a> document that lists all of the changes, including some that may cause compatibility issues with your current code. You will save yourself a lot of frustration if you carefully read this material before proceeding.</li></ol><h2 id="HowtoUpgrade-Upgrading">Upgrading</h2><ol><li><strong>Upgrade one step at a time:</strong> It is usually best to upgrade to each intermediate version of Tapestry rather than skipping ahead 
 multiple versions. Skipping versions (except for minor bug fix releases) makes it harder to find all calls to deprecated APIs (see above).</li><li><strong>Update your POM (or download the JARs manually):</strong> If you're using Maven (or Gradle), update the version of the Tapestry dependencies in your pom.xml (or build.gradle) file. Remember to keep all of the Tapestry-supplied modules in sync. For example, don't forget to update the version of Tapestry-hibernate, Tapestry-spring, Tapestry-upload, etc.</li><li><strong>Remove old Tapestry JARs:</strong> If you're not using Maven or Gradle (e.g. if you have the Tapestry JARs in your lib directory), be sure you remove older versions of Tapestry JARs (including JARs for any Tapestry-supplied modules).</li></ol><h2 id="HowtoUpgrade-AfterYouUpgrade">After You Upgrade</h2><ol><li><strong>Remove cached JavaScript:</strong> Tapestry's internal JavaScript may change between releases, and your web browser may have cached the older version. If
  you have set a specific <a  href="how-to-upgrade.html">application version</a> in your application's module class (usually AppModule.java), you should increment it to ensure that the URLs to the JavaScript files will have a new version number in their paths. Doing so will cause the browser to download the latest versions from your server. Alternatively, you can just clear your browser's cache (and have all your developers and testers do the same). <em>This issue is usually not a problem on production servers, since you will likely increment the application version with each new production release.</em></li></ol><p></p></div>
+                <div id="ConfluenceContent"><p>Upgrading from one Tapestry version to the next is usually quite easy. Backward compatibility is one of Tapestry's <a  href="principles.html">core principles</a>. Even so, sometimes a checklist comes in handy to be sure you consider all of the implications of an upgrade.</p><h2 id="HowtoUpgrade-BeforeYouUpgrade">Before You Upgrade</h2><ol><li><strong>Check Java version compatibility: </strong>See the compatibility matrix at <strong><a  href="supported-environments-and-versions.html">Supported Environments and Versions</a></strong>.<strong><br clear="none"></strong></li><li><strong>Check 3rd Party compatibility:</strong> Find out whether your 3rd party modules are compatible with the new version of Tapestry. Although the Tapestry developers try very hard to maintain backward compatibility across versions, sometimes an older version of a 3rd party module (particularly if it uses internal APIs) won't work with a newly-released version of T
 apestry, and in that case you may have to wait until that 3rd party module is updated by its developers.</li><li><strong>Find and replace all calls to deprecated APIs.</strong> Those are the places most likely to be broken after the upgrade. Most IDEs make it easy to find all deprecated items. In Eclipse, for example, the "Problems" view will show warnings for the use of deprecated APIs if you set it to show "All Errors/Warnings on Project".</li><li><strong>Read the Release Notes:</strong> Each Tapestry version has a <a  href="release-notes.html">Release Notes</a> document that lists all of the changes, including some that may cause compatibility issues with your current code. You will save yourself a lot of frustration if you carefully read this material before proceeding.</li></ol><h2 id="HowtoUpgrade-Upgrading">Upgrading</h2><ol><li><strong>Upgrade one step at a time:</strong> It is usually best to upgrade to each intermediate version of Tapestry rather than skipping ahead multip
 le versions. Skipping versions (except for minor bug fix releases) makes it harder to find all calls to deprecated APIs (see above).</li><li><strong>Update your POM (or download the JARs manually):</strong> If you're using Maven (or Gradle), update the version of the Tapestry dependencies in your pom.xml (or build.gradle) file. Remember to keep all of the Tapestry-supplied modules in sync. For example, don't forget to update the version of Tapestry-hibernate, Tapestry-spring, Tapestry-upload, etc.</li><li><strong>Remove old Tapestry JARs:</strong> If you're not using Maven or Gradle (e.g. if you have the Tapestry JARs in your lib directory), be sure you remove older versions of Tapestry JARs (including JARs for any Tapestry-supplied modules).</li></ol><h2 id="HowtoUpgrade-AfterYouUpgrade">After You Upgrade</h2><ol><li><strong>Remove cached JavaScript:</strong> Tapestry's internal JavaScript may change between releases, and your web browser may have cached the older version (especial
 ly for Tapestry versions <em>prior to 5.4)</em>. If you have set a specific <a  href="configuration.html">application version</a> in your application's module class (usually AppModule.java), you should increment it to ensure that the URLs to the JavaScript files will have a new version number in their paths. Doing so will cause the browser to download the latest versions from your server. Alternatively, you can just clear your browser's cache (and have all your developers and testers do the same). <em>This issue is usually not a problem on production servers, since you will likely increment the application version with each new production release. Also, starting in Tapestry 5.4 this is unlikely to be a problem due to file checksums being included in their URLs.<br clear="none"></em></li></ol><p></p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/injection-faq.html
==============================================================================
--- websites/production/tapestry/content/injection-faq.html (original)
+++ websites/production/tapestry/content/injection-faq.html Mon Feb 19 19:21:08 2018
@@ -77,7 +77,14 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><h2 id="InjectionFAQ-Injection">Injection</h2><p>Main article: <a  href="injection-faq.html">Injection FAQ</a></p><h3 id="InjectionFAQ-What'sthedifferencebetweenthe@Componentand@InjectComponentannotations?">What's the difference between the <code>@Component</code> and <code>@InjectComponent</code> annotations?</h3><p>The <code>@Component</code> annotation is used to define the <em>type</em> of component, and its parameter bindings. When using <code>@Component</code>, the template must not define the type, and any parameter bindings are merged in:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+                <div id="ConfluenceContent"><h1 id="InjectionFAQ-Injection">Injection</h1><p>Main article:&#160; <a  href="injection.html">Injection</a></p><h2 id="InjectionFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1519068035434 {padding: 0px;}
+div.rbtoc1519068035434 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068035434 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068035434">
+<ul class="toc-indentation"><li><a  href="#InjectionFAQ-What'sthedifferencebetweenthe@Componentand@InjectComponentannotations?">What's the difference between the @Component and @InjectComponent annotations?</a></li><li><a  href="#InjectionFAQ-What'sthedifferencebetweenthe@InjectPageand@InjectContainerannotations?">What's the difference between the @InjectPage and @InjectContainer annotations?</a></li><li><a  href="#InjectionFAQ-IgetanexceptionbecauseIhavetwoserviceswiththesameinterface,howdoIhandlethis?">I get an exception because I have two services with the same interface, how do I handle this?</a></li><li><a  href="#InjectionFAQ-What'sthedifferencebetween@Injectand@Environmental?">What's the difference between @Inject and @Environmental?</a></li><li><a  href="#InjectionFAQ-Butwait...IseeIusedthe@Injectannotationanditstillworked.Whatgives?">But wait ... I see I used the @Inject annotation and it still worked. What gives?</a></li><li><a  href="#InjectionFAQ-Ok,butRequestisasingleto
 nservice,notanenvironmental,andIcaninjectthat.IsTapestryreallythreadsafe?">Ok, but Request is a singleton service, not an environmental, and I can inject that. Is Tapestry really thread safe?</a></li><li><a  href="#InjectionFAQ-Iuse@Injectonafieldtoinjectaservice,butthefieldisstillnull,whathappened?">I use @Inject on a field to inject a service, but the field is still null, what happened?</a></li></ul>
+</div><h2 id="InjectionFAQ-What'sthedifferencebetweenthe@Componentand@InjectComponentannotations?">What's the difference between the <code>@Component</code> and <code>@InjectComponent</code> annotations?</h2><p>The <code>@Component</code> annotation is used to define the <em>type</em> of component, and its parameter bindings. When using <code>@Component</code>, the template must not define the type, and any parameter bindings are merged in:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: true; theme: Default" style="font-size:12px;">  &lt;a t:id="home" class="nav"&gt;Back to home&lt;/a&gt;
 </pre>
 </div></div><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
@@ -91,7 +98,7 @@
 <pre class="brush: java; gutter: true; theme: Default" style="font-size:12px;">  @InjectComponent
   private Form login;
 </pre>
-</div></div><p>Again, we're matching the field name to the component id, and you would get an error if the component is not defined in the template.</p><h3 id="InjectionFAQ-What'sthedifferencebetweenthe@InjectPageand@InjectContainerannotations?">What's the difference between the <code>@InjectPage</code> and <code>@InjectContainer</code> annotations?</h3><p>The <code>@InjectPage</code> annotation is used to inject some page in the application into a field of some other page. You often see it used from event handler methods:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Again, we're matching the field name to the component id, and you would get an error if the component is not defined in the template.</p><h2 id="InjectionFAQ-What'sthedifferencebetweenthe@InjectPageand@InjectContainerannotations?">What's the difference between the <code>@InjectPage</code> and <code>@InjectContainer</code> annotations?</h2><p>The <code>@InjectPage</code> annotation is used to inject some page in the application into a field of some other page. You often see it used from event handler methods:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: true; theme: Default" style="font-size:12px;">  @InjectPage
   private ConfirmRegistration confirmRegistration;
 
@@ -103,7 +110,7 @@
     return confirmRegistration;
   }
 </pre>
-</div></div><p>This code pattern is used to configure peristent properties of a page before returning it; Tapestry will send a client redirect to the page to present the data.</p><p><code>@InjectContainer</code> can be used inside a component or a mixin. In a component, it injects the immediate container of the component; this is often the top-level page object.</p><p>In a mixin, it injects the component to which the mixin is attached.</p><h3 id="InjectionFAQ-IgetanexceptionbecauseIhavetwoserviceswiththesameinterface,howdoIhandlethis?">I get an exception because I have two services with the same interface, how do I handle this?</h3><p>It's not uncommon to have two or more services that implement the exact same interface. When you inject, you might start by just identifying the type of service to inject:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>This code pattern is used to configure peristent properties of a page before returning it; Tapestry will send a client redirect to the page to present the data.</p><p><code>@InjectContainer</code> can be used inside a component or a mixin. In a component, it injects the immediate container of the component; this is often the top-level page object.</p><p>In a mixin, it injects the component to which the mixin is attached.</p><h2 id="InjectionFAQ-IgetanexceptionbecauseIhavetwoserviceswiththesameinterface,howdoIhandlethis?">I get an exception because I have two services with the same interface, how do I handle this?</h2><p>It's not uncommon to have two or more services that implement the exact same interface. When you inject, you might start by just identifying the type of service to inject:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: true; theme: Default" style="font-size:12px;">	@Inject
 	private ComponentEventResultProcessor processor;
 </pre>
@@ -125,7 +132,7 @@
 	@Traditional @Primary
 	private ComponentEventResultProcessor processor;
 </pre>
-</div></div><p>The two marker annotations, <code>@Traditional</code> and <code>@Primary</code>, ensure that only a single service matches.</p><h3 id="InjectionFAQ-What'sthedifferencebetween@Injectand@Environmental?">What's the difference between <code>@Inject</code> and <code>@Environmental</code>?</h3><p><code>@Inject</code> is relatively general; it can be used to inject resources specific to a page or component (such as ComponentResources, Logger, or Messages), or it can inject services or other objects obtained from the Tapestry IoC container. Once the page is loaded, the values for these injections never change.</p><p><code>@Environmental</code> is different; it exposes a request-scoped, dynamically bound value:</p><ul><li>"Request scoped": different threads (processing different requests) will see different values when reading the field.</li><li>"Dynamically bound": the value is explicitly placed into the Environment, and can be overridden at any time.</li></ul><p>Environmenta
 ls are a form of loosely connected communication between an outer component (or even a service) and an inner component. Example: the Form component places a <code>FormSupport</code> object into the environment. Other components, such as TextField, use the <code>FormSupport</code> when rendering to perform functions such as allocate unique control names or register client-side validations. The TextField doesn't require that the Form component be the immediate container component, or even an ancestor: a Form on one page may, indirectly, communicate with a TextField on some entirely different page. Neither component directly links to the other, the <code>FormSupport</code> is the conduit that connects them.</p><p>The term "Environmental" was chosen as the value "comes from the environment".</p><h3 id="InjectionFAQ-Butwait...IseeIusedthe@Injectannotationanditstillworked.Whatgives?">But wait ... I see I used the <code>@Inject</code> annotation and it still worked. What gives?</h3><p>In c
 ertain cases, Tapestry exposes a service (which can be injected) that is a proxy to the environmental; this is primarily for common environmentals, such as <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a>, that may be needed outside of component classes. You can see this in TapestryModule:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>TapestryModule.java (partial)</b></div><div class="codeContent panelContent pdl">
+</div></div><p>The two marker annotations, <code>@Traditional</code> and <code>@Primary</code>, ensure that only a single service matches.</p><h2 id="InjectionFAQ-What'sthedifferencebetween@Injectand@Environmental?">What's the difference between <code>@Inject</code> and <code>@Environmental</code>?</h2><p><code>@Inject</code> is relatively general; it can be used to inject resources specific to a page or component (such as ComponentResources, Logger, or Messages), or it can inject services or other objects obtained from the Tapestry IoC container. Once the page is loaded, the values for these injections never change.</p><p><code>@Environmental</code> is different; it exposes a request-scoped, dynamically bound value:</p><ul><li>"Request scoped": different threads (processing different requests) will see different values when reading the field.</li><li>"Dynamically bound": the value is explicitly placed into the Environment, and can be overridden at any time.</li></ul><p>Environmenta
 ls are a form of loosely connected communication between an outer component (or even a service) and an inner component. Example: the Form component places a <code>FormSupport</code> object into the environment. Other components, such as TextField, use the <code>FormSupport</code> when rendering to perform functions such as allocate unique control names or register client-side validations. The TextField doesn't require that the Form component be the immediate container component, or even an ancestor: a Form on one page may, indirectly, communicate with a TextField on some entirely different page. Neither component directly links to the other, the <code>FormSupport</code> is the conduit that connects them.</p><p>The term "Environmental" was chosen as the value "comes from the environment".</p><h2 id="InjectionFAQ-Butwait...IseeIusedthe@Injectannotationanditstillworked.Whatgives?">But wait ... I see I used the <code>@Inject</code> annotation and it still worked. What gives?</h2><p>In c
 ertain cases, Tapestry exposes a service (which can be injected) that is a proxy to the environmental; this is primarily for common environmentals, such as <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a>, that may be needed outside of component classes. You can see this in TapestryModule:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>TapestryModule.java (partial)</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">    /**
      * Builds a proxy to the current {@link JavaScriptSupport} inside this thread's {@link Environment}.
      * 
@@ -136,13 +143,13 @@
         return environmentalBuilder.build(JavaScriptSupport.class);
     }
 </pre>
-</div></div><p>This kind of logic is based on the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/EnvironmentalShadowBuilder.html">EnvironmentalShadowBuilder</a> service.</p><h3 id="InjectionFAQ-Ok,butRequestisasingletonservice,notanenvironmental,andIcaninjectthat.IsTapestryreallythreadsafe?">Ok, but Request is a singleton service, not an environmental, and I can inject that. Is Tapestry really thread safe?</h3><p>Yes, of course Tapestry is thread safe. The Request service is another special case, as seen in TapestryModule:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>TapestryModule.java (partial)</b></div><div class="codeContent panelContent pdl">
+</div></div><p>This kind of logic is based on the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/EnvironmentalShadowBuilder.html">EnvironmentalShadowBuilder</a> service.</p><h2 id="InjectionFAQ-Ok,butRequestisasingletonservice,notanenvironmental,andIcaninjectthat.IsTapestryreallythreadsafe?">Ok, but Request is a singleton service, not an environmental, and I can inject that. Is Tapestry really thread safe?</h2><p>Yes, of course Tapestry is thread safe. The Request service is another special case, as seen in TapestryModule:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>TapestryModule.java (partial)</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">    public Request buildRequest()
     {
         return shadowBuilder.build(requestGlobals, "request", Request.class);
     }
 </pre>
-</div></div><p><a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/RequestGlobals.html">RequestGlobals</a> is a per-thread service. The Request service is a global singleton created by the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/PropertyShadowBuilder.html">PropertyShadowBuilder</a> service, but is just a proxy. It has no internal state; invoking a method on the Request service just turns around and extracts the Request object from the per-thread RequestGlobals and invokes the same method there.</p><h3 id="InjectionFAQ-Iuse@Injectonafieldtoinjectaservice,butthefieldisstillnull,whathappened?">I use <code>@Inject</code> on a field to inject a service, but the field is still null, what happened?</h3><p>This can happen when you use the wrong <code>@Inject</code> annotation; for example, com.google.inject.Inject instead of org.apache.tapestry5.ioc.annotations.Inject. T
 his can occur when you have TestNG on the classpath, for example, and your IDE is too helpful. Double check your imports when things seem weird.</p><p>Also remember that <code>@Inject</code> on fields works for components and for service implementations or other objects that Tapestry instantiates, but not on arbitrary objects (that are created via Java's new keyword).</p></div>
+</div></div><p><a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/RequestGlobals.html">RequestGlobals</a> is a per-thread service. The Request service is a global singleton created by the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/PropertyShadowBuilder.html">PropertyShadowBuilder</a> service, but is just a proxy. It has no internal state; invoking a method on the Request service just turns around and extracts the Request object from the per-thread RequestGlobals and invokes the same method there.</p><h2 id="InjectionFAQ-Iuse@Injectonafieldtoinjectaservice,butthefieldisstillnull,whathappened?">I use <code>@Inject</code> on a field to inject a service, but the field is still null, what happened?</h2><p>This can happen when you use the wrong <code>@Inject</code> annotation; for example, com.google.inject.Inject instead of org.apache.tapestry5.ioc.annotations.Inject. T
 his can occur when you have TestNG on the classpath, for example, and your IDE is too helpful. Double check your imports when things seem weird.</p><p>Also remember that <code>@Inject</code> on fields works for components and for service implementations or other objects that Tapestry instantiates, but not on arbitrary objects (that are created via Java's new keyword).</p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/integration-with-existing-applications.html
==============================================================================
--- websites/production/tapestry/content/integration-with-existing-applications.html (original)
+++ websites/production/tapestry/content/integration-with-existing-applications.html Mon Feb 19 19:21:08 2018
@@ -77,8 +77,15 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><h2 id="Integrationwithexistingapplications-Integrationwithexistingapplications">Integration with existing applications</h2><p>You may have an existing JSP (or Struts, Spring MVC, etc.) application that you want to migrate to Tapestry. It's quite common to do this in stages, moving some functionality into Tapestry and leaving other parts, initially, in the other system. <a  href="integration-with-existing-applications.html">You may need to prevent Tapestry from handling certain requests</a>.</p><h3 id="Integrationwithexistingapplications-HowdoImakeaformonaJSPsubmitintoTapestry?">How do I make a form on a JSP submit into Tapestry?</h3><p>Tapestry's Form component does a lot of work while an HTML form is rendering to store all the information needed to handle the form submission in a later request; this is all very specific to Tapestry and the particular construction of your pages and forms; it can't be reproduced from a JSP.</p><p>Fortunate
 ly, that isn't necessary: you can have a standard HTML Form submit to a Tapestry page, you just don't get to use all of Tapestry's built in conversion and validation logic.</p><p>All you need to know is how Tapestry converts page class names to page names (that appear in the URL). It's basically a matter of stripping off the <em>root-package</em>.<code>pages</code> prefix from the fully qualified class name. So, for example, if you are building a login screen as a JSP, you might want to have a Tapestry page to receive the user name and password. Let's assume the Tapestry page class is <code>com.example.myapp.pages.LoginForm</code>; the page name will be <code>loginform (although, since&#160;</code><span>Tapestry is case insensitive, LoginForm would work just as well)</span><span>, and the URL will be </span><code>/loginform</code><span>.</span></p><p>&#160;</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: true; theme: Default" style="font-size:12px;">&lt;form method="post" action="/loginform"&gt;
+                <div id="ConfluenceContent"><h1 id="Integrationwithexistingapplications-Integrationwithexistingapplications">Integration with existing applications</h1><h2 id="Integrationwithexistingapplications-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1519068036085 {padding: 0px;}
+div.rbtoc1519068036085 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068036085 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068036085">
+<ul class="toc-indentation"><li><a  href="#Integrationwithexistingapplications-HowdoImakeaformonaJSPsubmitintoTapestry?">How do I make a form on a JSP submit into Tapestry?</a></li><li><a  href="#Integrationwithexistingapplications-HowdoIshareinformationbetweenaJSPapplicationandtheTapestryapplication?">How do I share information between a JSP application and the Tapestry application?</a></li><li><a  href="#Integrationwithexistingapplications-HowdoIputtheTapestryapplicationinsideafolder,toavoidconflicts?">How do I put the Tapestry application inside a folder, to avoid conflicts?</a></li></ul>
+</div><p>You may have an existing JSP (or Struts, Spring MVC, etc.) application that you want to migrate to Tapestry. It's quite common to do this in stages, moving some functionality into Tapestry and leaving other parts, initially, in the other system. <a  href="request-processing-faq.html">You may need to prevent Tapestry from handling certain requests</a>.</p><h2 id="Integrationwithexistingapplications-HowdoImakeaformonaJSPsubmitintoTapestry?">How do I make a form on a JSP submit into Tapestry?</h2><p>Tapestry's Form component does a lot of work while an HTML form is rendering to store all the information needed to handle the form submission in a later request; this is all very specific to Tapestry and the particular construction of your pages and forms; it can't be reproduced from a JSP.</p><p>Fortunately, that isn't necessary: you can have a standard HTML Form submit to a Tapestry page, you just don't get to use all of Tapestry's built in conversion and validation logic.</p><p
 >All you need to know is how Tapestry converts page class names to page names (that appear in the URL). It's basically a matter of stripping off the <em>root-package</em>.<code>pages</code> prefix from the fully qualified class name. So, for example, if you are building a login screen as a JSP, you might want to have a Tapestry page to receive the user name and password. Let's assume the Tapestry page class is <code>com.example.myapp.pages.LoginForm</code>; the page name will be <code>loginform (although, since&#160;</code><span>Tapestry is case insensitive, LoginForm would work just as well)</span><span>, and the URL will be </span><code>/loginform</code><span>.</span></p><p>&#160;</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>LoginForm.tml</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;form method="post" action="/loginform"&gt;
 
   &lt;input type="text" value="userName"/&gt;
   &lt;br/&gt;
@@ -88,8 +95,8 @@
 
 &lt;/form&gt;
 </pre>
-</div></div><p>On the Tapestry side, we can expect that the LoginForm page will be activated; this means that its activate event handler will be invoked. We can leverage this, and Tapestry's RequestParameter annotation:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: true; theme: Default" style="font-size:12px;">public class LoginForm
+</div></div><p>On the Tapestry side, we can expect that the LoginForm page will be activated; this means that its activate event handler will be invoked. We can leverage this, and Tapestry's RequestParameter annotation:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>LoginForm.java</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class LoginForm
 {
   void onActivate(@RequestParameter("userName") String userName, @RequestParameter("password") String password)
   {
@@ -97,14 +104,14 @@
   }
 }
 </pre>
-</div></div><p>The RequestParameter annotation extracts the named query parameter from the request, coerces its type from String to the parameter type (here, also String) and passes it into the method.</p><h3 id="Integrationwithexistingapplications-HowdoIshareinformationbetweenaJSPapplicationandtheTapestryapplication?">How do I share information between a JSP application and the Tapestry application?</h3><p>From the servlet container's point of view, there's no difference between a servlet, a JSP, and an entire Tapestry application. They all share the same ServletContext, and (once created), the same HttpSession.</p><p>On the Tapestry side, it is very easy to read and write session attributes:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: true; theme: Default" style="font-size:12px;">public class ShowSearchResults
+</div></div><p>The RequestParameter annotation extracts the named query parameter from the request, coerces its type from String to the parameter type (here, also String) and passes it into the method.</p><h2 id="Integrationwithexistingapplications-HowdoIshareinformationbetweenaJSPapplicationandtheTapestryapplication?">How do I share information between a JSP application and the Tapestry application?</h2><p>From the servlet container's point of view, there's no difference between a servlet, a JSP, and an entire Tapestry application. They all share the same ServletContext, and (once created), the same HttpSession.</p><p>On the Tapestry side, it is very easy to read and write session attributes:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>ShowSearchResults.java</b></div><div class="codeContent panelContent pdl">
+<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class ShowSearchResults
 {
   @SessionAttribute
   private SearchResults searchResults;
 }
 </pre>
-</div></div><p>Reading the instance variable <code>searchResults</code> is instrumented to instead read the corresponding HttpSession attribute named "searchResults". You can also specify the <code>value</code> attribute of the SessionAttribute annotation to override the default attribute name.</p><p>Writing to the field causes the corresponding HttpSession attribute to be modified.</p><p>The session is automatically created as needed.</p><h3 id="Integrationwithexistingapplications-HowdoIputtheTapestryapplicationinsideafolder,toavoidconflicts?">How do I put the Tapestry application inside a folder, to avoid conflicts?</h3><p>Support for this was added in 5.3; see the notes on the <a  href="integration-with-existing-applications.html">configuration page</a>.&#160;</p><p>&#160;</p><p>&#160;</p></div>
+</div></div><p>Reading the instance variable <code>searchResults</code> is instrumented to instead read the corresponding HttpSession attribute named "searchResults". You can also specify the <code>value</code> attribute of the SessionAttribute annotation to override the default attribute name.</p><p>Writing to the field causes the corresponding HttpSession attribute to be modified.</p><p>The session is automatically created as needed.</p><h2 id="Integrationwithexistingapplications-HowdoIputtheTapestryapplicationinsideafolder,toavoidconflicts?">How do I put the Tapestry application inside a folder, to avoid conflicts?</h2><p>Support for this was added in 5.3; see the notes on the <a  href="configuration.html">configuration page</a>.&#160;</p><p>&#160;</p><p>&#160;</p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/javascript-faq.html
==============================================================================
--- websites/production/tapestry/content/javascript-faq.html (original)
+++ websites/production/tapestry/content/javascript-faq.html Mon Feb 19 19:21:08 2018
@@ -77,7 +77,14 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><h2 id="JavaScriptFAQ-JavaScript">JavaScript</h2><p>Main article: <a  href="javascript-faq.html">JavaScript FAQ</a></p><h3 id="JavaScriptFAQ-WhydoIgeta&quot;Tapestryisundefined&quot;erroronformsubmit?(5.3andearlier)">Why do I get a "Tapestry is undefined" error on form submit? (5.3 and earlier)</h3><p>This client-side error is clear but can be awkward to solve. It means your browser has not been able to load the tapestry.js file properly. The question is, why? It can be due to multiple reasons, some of them below:</p><ul><li>First, check if 'tapestry.js' is present in the head part of your resulting HTML page.</li><li><p>If you have set the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/SymbolConstants.html#COMBINE_SCRIPTS">tapestry.combine-scripts</a> configuration symbol to true, Tapestry generates one single URL to retrieve all the JS files. Sometimes, this can produce long URLs that brow
 sers are unable to retrieve. Try setting the symbol to false.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>This only applies to Tapestry 5.1.</p></div></div></li><li>If you have included jQuery in conjunction with Tapestry's prototype, that will cause a conflict with the '$' selector used by both. In this case, you should put jQuery on top of the stack and turn on the <a  class="external-link" href="http://api.jquery.com/jQuery.noConflict/" rel="nofollow">jQuery.noConflict</a> mode.</li><li>Also, if you have included a custom or third-party JS library on top of the stack that causes the JavaScript parsing to fail, then check the JavaScript syntax in that library.</li><li>If you have used a tool to minimize your JavaScript libraries, this can lead to JavaScript syntax errors, so check if it works with a
 ll the JavaScript files unpacked.</li></ul><h3 id="JavaScriptFAQ-What'sthedifferencebetweentheT5objectandtheTapestryobjectinthebrowser?(5.3andearlier)">What's the difference between the <code>T5</code> object and the <code>Tapestry</code> object in the browser? (5.3 and earlier)</h3><p>Both of these objects are <em>namespaces</em>: containers of functions, constants, and nested namespaces.</p><p>The <code>T5</code> object is a replacement for the <code>Tapestry</code> object, starting in release 5.3. Increasingly, functions defined by the <code>Tapestry</code> object are being replaced with similar or equivalent functions in the <code>T5</code> object.</p><p>This is part of an overall goal, spanning at least two releases of Tapestry, to make Tapestry JavaScript framework agnostic; which is to say, not depend specifically on Prototype or jQuery. Much of the code in the <code>Tapestry</code> object is specifically linked to Prototype and Scriptaculous.</p><p>The <code>T5</code> object
  represents a stable, documented, set of APIs that are preferred when building components for maximum portability between underlying JavaScript frameworks. In other words, when building component libraries, coding to the <code>T5</code> object ensures that your component will be useful regardless of whether the final application is built using Prototype, jQuery or something else.</p></div>
+                <div id="ConfluenceContent"><h1 id="JavaScriptFAQ-JavaScript">JavaScript</h1><p>Main articles: <a  href="client-side-javascript.html">Client-Side JavaScript</a>, <a  href="legacy-javascript.html">Legacy JavaScript</a></p><h2 id="JavaScriptFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1519068037696 {padding: 0px;}
+div.rbtoc1519068037696 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068037696 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068037696">
+<ul class="toc-indentation"><li><a  href="#JavaScriptFAQ-WhydoIgeta&quot;Tapestryisundefined&quot;erroronformsubmit?(5.3andearlier)">Why do I get a "Tapestry is undefined" error on form submit? (5.3 and earlier)</a></li><li><a  href="#JavaScriptFAQ-What'sthedifferencebetweentheT5objectandtheTapestryobjectinthebrowser?(5.3andearlier)">What's the difference between the T5 object and the Tapestry object in the browser? (5.3 and earlier)</a></li></ul>
+</div><h2 id="JavaScriptFAQ-WhydoIgeta&quot;Tapestryisundefined&quot;erroronformsubmit?(5.3andearlier)">Why do I get a "Tapestry is undefined" error on form submit? (5.3 and earlier)</h2><p>This client-side error is clear but can be awkward to solve. It means your browser has not been able to load the tapestry.js file properly. The question is, why? It can be due to multiple reasons, some of them below:</p><ul><li>First, check if 'tapestry.js' is present in the head part of your resulting HTML page.</li><li><p>If you have set the <a  href="configuration.html">tapestry.combine-scripts</a> configuration symbol to true, Tapestry generates one single URL to retrieve all the JS files. Sometimes, this can produce long URLs that browsers are unable to retrieve. Try setting the symbol to false.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluen
 ce-information-macro-body"><p>This only applies to Tapestry 5.1.</p></div></div></li><li>If you have included jQuery in conjunction with Tapestry's prototype, that will cause a conflict with the '$' selector used by both. In this case, you should put jQuery on top of the stack and turn on the <a  class="external-link" href="http://api.jquery.com/jQuery.noConflict/" rel="nofollow">jQuery.noConflict</a> mode.</li><li>Also, if you have included a custom or third-party JS library on top of the stack that causes the JavaScript parsing to fail, then check the JavaScript syntax in that library.</li><li>If you have used a tool to minimize your JavaScript libraries, this can lead to JavaScript syntax errors, so check if it works with all the JavaScript files unpacked.</li></ul><h2 id="JavaScriptFAQ-What'sthedifferencebetweentheT5objectandtheTapestryobjectinthebrowser?(5.3andearlier)">What's the difference between the <code>T5</code> object and the <code>Tapestry</code> object in the browser?
  (5.3 and earlier)</h2><p>Both of these objects are <em>namespaces</em>: containers of functions, constants, and nested namespaces.</p><p>The <code>T5</code> object is a replacement for the <code>Tapestry</code> object, starting in release 5.3. Increasingly, functions defined by the <code>Tapestry</code> object are being replaced with similar or equivalent functions in the <code>T5</code> object.</p><p>This is part of an overall goal, spanning at least two releases of Tapestry, to make Tapestry JavaScript framework agnostic; which is to say, not depend specifically on Prototype or jQuery. Much of the code in the <code>Tapestry</code> object is specifically linked to Prototype and Scriptaculous.</p><p>The <code>T5</code> object represents a stable, documented, set of APIs that are preferred when building components for maximum portability between underlying JavaScript frameworks. In other words, when building component libraries, coding to the <code>T5</code> object ensures that your
  component will be useful regardless of whether the final application is built using Prototype, jQuery or something else.</p></div>
       </div>
 
       <div class="clearer"></div>