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/03 17:21:22 UTC

svn commit: r1024783 [5/8] - in /websites/production/tapestry/content: ./ cache/

Modified: websites/production/tapestry/content/legacy-javascript.html
==============================================================================
--- websites/production/tapestry/content/legacy-javascript.html (original)
+++ websites/production/tapestry/content/legacy-javascript.html Sat Feb  3 17:21:22 2018
@@ -77,7 +77,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><div class="confluence-information-macro confluence-information-macro-warning"><p class="title">For Older Versions of Tapestry</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>This page describes JavaScript usage in Tapestry versions up through 5.3.x. For version 5.4 and later, see <a  href="client-side-javascript.html">Client-Side JavaScript</a>.</p></div></div><p>&#160;</p><p><strong>JavaScript</strong> is a first-class concept in Tapestry, and sophisticated JavaScript support is provided right out of the box, including rich <a  href="ajax-and-zones.html">AJAX support</a>, download optimization, client-side logging, and localization.</p><div class="aui-label" style="float:right" title="Related Articles">
+                <div id="ConfluenceContent"><div class="confluence-information-macro confluence-information-macro-warning"><p class="title">For Older Versions of Tapestry</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>This page describes JavaScript usage in Tapestry versions up through 5.3.x. For version 5.4 and later, see <a  href="legacy-javascript.html">Legacy JavaScript</a>.</p></div></div><p>&#160;</p><p><strong>JavaScript</strong> is a first-class concept in Tapestry, and sophisticated JavaScript support is provided right out of the box, including rich <a  href="legacy-javascript.html">AJAX support</a>, download optimization, client-side logging, and localization.</p><div class="aui-label" style="float:right" title="Related Articles">
 
 
 
@@ -173,7 +173,7 @@
 </div>
 
 
-<p>In production mode, by default, Tapestry will merge JavaScript libraries, add version numbering, and set a far-future expires header to encourage aggressive browser caching. Starting with version 5.3, Tapestry can also automatically minify (compress) JavaScript libraries when in <a  href="configuration.html">production mode</a>.</p><p>In addition, as will be described in detail <a  href="legacy-javascript.html">below</a>, Tapestry comes with the <a  class="external-link" href="http://www.prototypejs.org/" rel="nofollow">Prototype</a> and <a  class="external-link" href="http://script.aculo.us/" rel="nofollow">Scriptaculous</a> libraries, or you can easily swap in JQuery using a 3rd-party module.</p><h1 id="LegacyJavaScript-AddingCustomJavaScript">Adding Custom JavaScript</h1><p>When adding your own custom JavaScript or third-party libraries, just follow the strategies below to take advantage of Tapestry's JavaScript support mechanisms.</p><p>The recommended practice in Tapestry is
  to package up any significant amount of JavaScript as a static JavaScript library, a .js file that can be downloaded to the client. Keep your in-page JavaScript code to a minimum, just the few statements needed to initialize objects and reference methods in the JavaScript libraries.</p><h2 id="LegacyJavaScript-LinkingtoyourJavaScriptlibraries">Linking to your JavaScript libraries</h2><p>Tapestry provides several ways to add a link to a JavaScript library within your page or component. Although you can use direct <code>&lt;script type="text/javascript" src="xxx.js"&gt;&lt;/script&gt;</code> approach, you should only use it for JavaScript that resides outside of your application. For JavaScript within your app, Tapestry provides <em>much</em> better ways to do the same thing. Most users choose the simplest, the @Import annotation approach.</p><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
+<p>In production mode, by default, Tapestry will merge JavaScript libraries, add version numbering, and set a far-future expires header to encourage aggressive browser caching. Starting with version 5.3, Tapestry can also automatically minify (compress) JavaScript libraries when in <a  href="legacy-javascript.html">production mode</a>.</p><p>In addition, as will be described in detail <a  href="legacy-javascript.html">below</a>, Tapestry comes with the <a  class="external-link" href="http://www.prototypejs.org/" rel="nofollow">Prototype</a> and <a  class="external-link" href="http://script.aculo.us/" rel="nofollow">Scriptaculous</a> libraries, or you can easily swap in JQuery using a 3rd-party module.</p><h1 id="LegacyJavaScript-AddingCustomJavaScript">Adding Custom JavaScript</h1><p>When adding your own custom JavaScript or third-party libraries, just follow the strategies below to take advantage of Tapestry's JavaScript support mechanisms.</p><p>The recommended practice in Tapestr
 y is to package up any significant amount of JavaScript as a static JavaScript library, a .js file that can be downloaded to the client. Keep your in-page JavaScript code to a minimum, just the few statements needed to initialize objects and reference methods in the JavaScript libraries.</p><h2 id="LegacyJavaScript-LinkingtoyourJavaScriptlibraries">Linking to your JavaScript libraries</h2><p>Tapestry provides several ways to add a link to a JavaScript library within your page or component. Although you can use direct <code>&lt;script type="text/javascript" src="xxx.js"&gt;&lt;/script&gt;</code> approach, you should only use it for JavaScript that resides outside of your application. For JavaScript within your app, Tapestry provides <em>much</em> better ways to do the same thing. Most users choose the simplest, the @Import annotation approach.</p><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
 <p><strong>JumpStart Demo:</strong> <br clear="none">
 <a  class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/javascript" rel="nofollow">JavaScript</a> </p></div><h2 id="LegacyJavaScript-Approach1:@Import">Approach 1: @Import</h2><p>Use the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Import.html">Import</a> annotation (or @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/IncludeJavaScriptLibrary.html">IncludeJavaScriptLibrary</a> in Tapestry 5.0 and 5.1) to include links to JavaScript (and CSS) files in your page or component. Tapestry ensures that each such file is only referenced once in your page.</p><div class="sectionColumnWrapper"><div class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>For Tapestry 5.2 and late
 r</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">@Import(library={"context:js/jquery.js",
@@ -191,7 +191,7 @@ public class MyComponent
  . . .
 }
 </pre>
-</div></div></div></div></div></div><p>@Import may also be applied to individual methods, in which case the import operation only occurs when the method is invoked.</p><p>Note: When specifying a file to import, you'll often use the <strong>context:</strong> binding prefix to indicate that the file is stored in the web application context, and not on the classpath. Relative paths will be on the classpath, relative to the Java class. See <a  href="component-parameters.html">Component Parameters</a> for other binding prefix options.</p><p>Adding the same JavaScript library multiple times does <em>not</em> create duplicate links. The subsequent ones are simply ignored. In this way, each component can add the libraries it needs, without worrying about conflicts with other components.</p><h2 id="LegacyJavaScript-Approach2:JavaScriptSupport">Approach 2: JavaScriptSupport</h2><p>Alternatively, you can use <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/
 tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a> (for Tapestry 5.2 or later) or <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/RenderSupport.html">RenderSupport</a> (for Tapestry 5.0 and 5.1) to include a JavaScript library in your page or component. JavaScriptSupport and RenderSupport are <a  href="environmental-services.html">environmental services</a> that include a number of methods that will be used by components, or by services that are called from components. For example:</p><h3 id="LegacyJavaScript-TheimportJavaScriptLibrarymethod">The <code>importJavaScriptLibrary</code> method</h3><p>The <code>importJavaScriptLibrary</code> method (or <code>addScriptLink</code> for Tapestry 5.0 and 5.1) adds a link to a JavaScript library. A component can inject such a script and pass one or more of assets to this method:</p><div class="sectionColumnWrapper"><div class="sectionMacro"><div class="sectionMacroRow"><d
 iv class="columnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Tapestry 5.2 and later</b></div><div class="codeContent panelContent pdl">
+</div></div></div></div></div></div><p>@Import may also be applied to individual methods, in which case the import operation only occurs when the method is invoked.</p><p>Note: When specifying a file to import, you'll often use the <strong>context:</strong> binding prefix to indicate that the file is stored in the web application context, and not on the classpath. Relative paths will be on the classpath, relative to the Java class. See <a  href="legacy-javascript.html">Legacy JavaScript</a> for other binding prefix options.</p><p>Adding the same JavaScript library multiple times does <em>not</em> create duplicate links. The subsequent ones are simply ignored. In this way, each component can add the libraries it needs, without worrying about conflicts with other components.</p><h2 id="LegacyJavaScript-Approach2:JavaScriptSupport">Approach 2: JavaScriptSupport</h2><p>Alternatively, you can use <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapest
 ry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a> (for Tapestry 5.2 or later) or <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/RenderSupport.html">RenderSupport</a> (for Tapestry 5.0 and 5.1) to include a JavaScript library in your page or component. JavaScriptSupport and RenderSupport are <a  href="legacy-javascript.html">environmental services</a> that include a number of methods that will be used by components, or by services that are called from components. For example:</p><h3 id="LegacyJavaScript-TheimportJavaScriptLibrarymethod">The <code>importJavaScriptLibrary</code> method</h3><p>The <code>importJavaScriptLibrary</code> method (or <code>addScriptLink</code> for Tapestry 5.0 and 5.1) adds a link to a JavaScript library. A component can inject such a script and pass one or more of assets to this method:</p><div class="sectionColumnWrapper"><div class="sectionMacro"><div class="sectionMacroRow"><div class="c
 olumnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Tapestry 5.2 and later</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  @Inject @Path("context:/js/myeffects.js")
   private Asset myEffects;
 
@@ -215,7 +215,7 @@ public class MyComponent
     renderSupport.addScriptLink(myEffects);
   }
 </pre>
-</div></div></div></div></div></div><p>Tapestry will ensure that the necessary &lt;link&gt; elements are added to the <em>top</em> of the document (in the &lt;head&gt; element). With Tapestry 5.3 and later the new elements are inserted at the bottom of the &lt;head&gt; element; in versions before 5.3 they appear at the top of the &lt;head&gt; element).</p><p>As with the annotation approach, adding the same asset multiple times does <em>not</em> create duplicate links.</p><p>The <code>setupRender</code> method (the name is specifically linked to a <a  href="component-rendering.html">render phase</a>) is the correct place to inform the JavaScriptSupport (or RenderSupport) service that the library is needed.</p><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
+</div></div></div></div></div></div><p>Tapestry will ensure that the necessary &lt;link&gt; elements are added to the <em>top</em> of the document (in the &lt;head&gt; element). With Tapestry 5.3 and later the new elements are inserted at the bottom of the &lt;head&gt; element; in versions before 5.3 they appear at the top of the &lt;head&gt; element).</p><p>As with the annotation approach, adding the same asset multiple times does <em>not</em> create duplicate links.</p><p>The <code>setupRender</code> method (the name is specifically linked to a <a  href="legacy-javascript.html">render phase</a>) is the correct place to inform the JavaScriptSupport (or RenderSupport) service that the library is needed.</p><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
 <p><strong>JumpStart Demo:</strong> <br clear="none">
 <a  class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/reusable" rel="nofollow">Reusable JavaScript</a> </p></div><h3 id="LegacyJavaScript-TheaddScriptmethod">The <code>addScript</code> method</h3><p>The <code>addScript</code> method is used when you need to add some JavaScript code directly to the page. This will be inserted at the <em>bottom of the document</em>, and will only be executed when the document has finished loading on the client (i.e., from the window.onload event handler).</p><div class="sectionColumnWrapper"><div class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Tapestry 5.2 and later</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: text; gutter: false; theme: Default" style="font-size:12px;">void afterRender()
@@ -266,7 +266,7 @@ public class MyComponent
 <div class="confluence-information-macro confluence-information-macro-information"><p class="title">Added in 5.1.0.2</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body">
 </div></div>
 <div class="error"><span class="error">Unknown macro: {div}</span> 
-<p>&#160;</p></div><p>In production mode, Tapestry automatically <em>combines</em> JavaScript libraries. A single request (for a <em>virtual asset</em>) will retrieve the combined content of all referenced JavaScript library files.</p><p>Note: starting with Tapestry 5.2, JavaScript libraries are only combined if they are part of a JavaScript Stack (see below).</p><p>This is a very useful feature, as it reduces the number of requests needed to present a page to the user. It can be disabled, however, by setting the SymbolConstants.COMBINE_SCRIPTS <a  href="configuration.html">configuration symbol</a> to false in your application's module class (normally AppModule.java). By default it is enabled when in production mode and disabled otherwise.</p><p>As elsewhere, if the client browser supports gzip compression, the combined JavaScript will be compressed.</p><h1 id="LegacyJavaScript-MinifyingJavaScriptlibraries">Minifying JavaScript libraries</h1>
+<p>&#160;</p></div><p>In production mode, Tapestry automatically <em>combines</em> JavaScript libraries. A single request (for a <em>virtual asset</em>) will retrieve the combined content of all referenced JavaScript library files.</p><p>Note: starting with Tapestry 5.2, JavaScript libraries are only combined if they are part of a JavaScript Stack (see below).</p><p>This is a very useful feature, as it reduces the number of requests needed to present a page to the user. It can be disabled, however, by setting the SymbolConstants.COMBINE_SCRIPTS <a  href="legacy-javascript.html">configuration symbol</a> to false in your application's module class (normally AppModule.java). By default it is enabled when in production mode and disabled otherwise.</p><p>As elsewhere, if the client browser supports gzip compression, the combined JavaScript will be compressed.</p><h1 id="LegacyJavaScript-MinifyingJavaScriptlibraries">Minifying JavaScript libraries</h1>
 
 <div class="confluence-information-macro confluence-information-macro-information"><p class="title">Added in 5.3</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body">
 </div></div>
@@ -278,7 +278,7 @@ public class MyComponent
     &lt;version&gt;${tapestry-release-version}&lt;/version&gt;
 &lt;/dependency&gt;
 </pre>
-</div></div><p>Gradle would be similar, of course. If you aren't using something like Maven or Gradle, you'll have to download the jar and its dependency (com.yahoo.platform.yui: yuicompressor) yourself.</p><p>Minification can be disabled by setting the SymbolConstants.MINIFICATION_ENABLED <a  href="configuration.html">configuration symbol</a> to false in your application's module class (usually AppModule.java). By default it is enabled when in production mode and disabled otherwise.</p><p>Please test your applications well: the YUI Compressor code can be somewhat finicky about the application server and JDK version.</p><h1 id="LegacyJavaScript-Client-sideLogging">Client-side Logging</h1>
+</div></div><p>Gradle would be similar, of course. If you aren't using something like Maven or Gradle, you'll have to download the jar and its dependency (com.yahoo.platform.yui: yuicompressor) yourself.</p><p>Minification can be disabled by setting the SymbolConstants.MINIFICATION_ENABLED <a  href="legacy-javascript.html">configuration symbol</a> to false in your application's module class (usually AppModule.java). By default it is enabled when in production mode and disabled otherwise.</p><p>Please test your applications well: the YUI Compressor code can be somewhat finicky about the application server and JDK version.</p><h1 id="LegacyJavaScript-Client-sideLogging">Client-side Logging</h1>
 
 <div class="confluence-information-macro confluence-information-macro-warning"><p class="title">Deprecated since 5.3</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body">
 </div></div>
@@ -303,7 +303,7 @@ public class MyComponent
 </div></div><p>Then use it somewhere else:</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;">  new Effect.Fade($(myId), { duration: $T(myid).fadeDuration });
 </pre>
-</div></div><h1 id="LegacyJavaScript-AjaxComponentsandMixins">Ajax Components and Mixins</h1><p>Tapestry provides easy-to-use support for <em>Ajax</em>, the technique of using JavaScript to dynamically updating parts of a web page with content from the server without redrawing the whole page. See <a  href="ajax-and-zones.html">Ajax and Zones</a> for details.</p><h1 id="LegacyJavaScript-Built-inLibraries">Built-in Libraries</h1><p></p><div class="navmenu" style="float:right; width:30%; background:#eee; margin:3px; padding:3px">
+</div></div><h1 id="LegacyJavaScript-AjaxComponentsandMixins">Ajax Components and Mixins</h1><p>Tapestry provides easy-to-use support for <em>Ajax</em>, the technique of using JavaScript to dynamically updating parts of a web page with content from the server without redrawing the whole page. See <a  href="legacy-javascript.html">Legacy JavaScript</a> for details.</p><h1 id="LegacyJavaScript-Built-inLibraries">Built-in Libraries</h1><p></p><div class="navmenu" style="float:right; width:30%; background:#eee; margin:3px; padding:3px">
 <p><font color="green"><strong>Alternatives to Prototype</strong></font><br clear="none">
 Tapestry also works well with other JavaScript libraries, such as JQuery and ExtJS:</p>
 <ul><li><strong><a  class="external-link" href="https://github.com/got5/tapestry5-jquery" rel="nofollow">Tapestry5-Jquery module</a></strong> &#8211; Using JQuery <em>instead of</em> Prototype</li><li><a  class="external-link" href="http://wiki.apache.org/tapestry/Tapestry5HowToIntegrateJQuery">Tapestry5HowToIntegrateJQuery</a> &#8211; Using JQuery <em>in addition to</em> Prototype</li><li><a  class="external-link" href="https://issues.apache.org/jira/browse/TAP5-999">TAP5-999</a> tracks work underway to introduce an agnostic tapestry.js layer to allow switching from Prototype to JQuery. See <span class="error">[JavaScript Rewrite]</span> for more info.</li><li><a  class="external-link" href="https://issues.apache.org/jira/browse/TAP5-1364">TAPS-1364</a> lists some starting points for ExtJS integration</li></ul>
@@ -320,7 +320,7 @@ Tapestry also works well with other Java
   }
 
 </pre>
-</div></div><p>The Asset is injected, using the ${tapestry.scriptaculous} <a  href="symbols.html">symbol</a> to reference the location of the Scriptaculous library.</p><p>Even though the dragdrop.js library is stored inside a JAR file, Tapestry ensures that it can be accessed from the client web browser. A Tapestry URL within the virtual folder "/assets" is created; the file will be given a version number (the application version number if not specified more specifically) and will be sent to the browser with a far-future expires header (to encourage the browser to cache the file aggressively).</p><h1 id="LegacyJavaScript-JavaScriptStacks">JavaScript Stacks</h1>
+</div></div><p>The Asset is injected, using the ${tapestry.scriptaculous} <a  href="legacy-javascript.html">symbol</a> to reference the location of the Scriptaculous library.</p><p>Even though the dragdrop.js library is stored inside a JAR file, Tapestry ensures that it can be accessed from the client web browser. A Tapestry URL within the virtual folder "/assets" is created; the file will be given a version number (the application version number if not specified more specifically) and will be sent to the browser with a far-future expires header (to encourage the browser to cache the file aggressively).</p><h1 id="LegacyJavaScript-JavaScriptStacks">JavaScript Stacks</h1>
 
 <div class="confluence-information-macro confluence-information-macro-information"><p class="title">Added in 5.2</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body">
 </div></div>

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 Sat Feb  3 17:21:22 2018
@@ -44,13 +44,26 @@
 
   <div class="wrapper bs">
 
-        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  href="index.html">Home</a></li><li><a  href="getting-started.html">Getting Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  href="download.html">Download</a></li><li><a  href="about.html">About</a></li><li><a  class="external-link" href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li><li><a  href="community.html">Community</a></li><li><a  class="external-link" href="http://www.apache.org/security/">Security</a></li><li><a  class="external-link" href="http://www.apache.org/">Apache</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/thanks.html">Thanks</a></li></ul></div></div>
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  href="index.html">Home</a></li><li><a  href="getting-started.html">Getting Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  href="download.html">Download</a></li><li><a  href="about.html">About</a></li><li><a  class="external-link" href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li><li><a  href="community.html">Community</a></li><li><a  class="external-link" href="http://www.apache.org/security/">Security</a></li><li><a  class="external-link" href="http://www.apache.org/">Apache</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/thanks.html">Thanks</a></li></ul></div>
+
+</div>
 
           <div id="top">
-            <div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span><form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html"> 
- <input type="text" name="q"> 
- <input type="submit" value="Search"> 
-</form></div><div class="emblem" style="float:left"><p><a  href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Logging in Tapestry</h1></div></div>
+            <div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
+<form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html">
+  <input type="text" name="q">
+  <input type="submit" value="Search">
+</form>
+
+</div>
+
+
+<div class="emblem" style="float:left"><p><a  href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div>
+
+
+<div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Logging in Tapestry</h1></div>
+
+</div>
       <div class="clearer"></div>
       </div>
 
@@ -62,19 +75,40 @@
       </div>
 
       <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="aui-label" style="float:right" title="Related Articles"><h3>Related Articles</h3><ul class="content-by-label"><li> 
-  <div> 
-   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span> 
-  </div> 
-  <div class="details"> 
-   <a  href="logging-in-tapestry.html">Logging in Tapestry</a> 
-  </div> </li><li> 
-  <div> 
-   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span> 
-  </div> 
-  <div class="details"> 
-   <a  href="logging.html">Logging</a> 
-  </div> </li></ul></div><p>In theory, SLF4J is a wrapper around any of a number of logging systems, including <a  class="external-link" href="http://logging.apache.org/log4j/1.2/">Log4J</a> or the built-in JDK logging. In practice, it is almost always used with Log4J and no additional build configuration is needed.</p><p>Your application <em>will</em> need to provide a <strong>log4j.properties</strong> file (or its XML equivalent). See <a  class="external-link" href="http://logging.apache.org/log4j/1.2/manual.html">the Log4J manual</a> for more information.</p><h1 id="LogginginTapestry-AccessingLoggers">Accessing Loggers</h1><p>Loggers are a special kind of resource that is injected into a service. In Tapestry IoC, Loggers an be injected into service constructors, or into service builder methods.</p><p>In Tapestry Core (the web framework), Loggers for components can be injected into component fields.</p><p>This often confuses people, because the standard idiom is to create a Logger
  based on the class name and inject it into a static field. In Tapestry, the Logger is created on your code's behalf and provided to you, and stored into a final private field.</p><p>In terms of separation of concerns, Tapestry's approach is superior ... the concern of creating loggers is offloaded into the framework, and you code retains the concern of actually logging useful information. However this is largely theoretical.</p><p>For a pragmatic standpoint, injecting Loggers makes it easier to test <em>logging</em> code using the same techniques used to test other code: via the injection of Mock Object implementations of the Logger interface. This is something to consider when writing your own services, components and test.</p><h1 id="LogginginTapestry-ServiceLogging">Service Logging</h1><p>Tapestry uses the same loggers that are injected into services; it logs, at debug level, details about the construction of the service (and the proxy for the service), including details such as
  methods invoked.</p><h1 id="LogginginTapestry-OperationTracker">Operation Tracker</h1><p>The OperationTracker is a resource available throughout Tapestry that is used to track what Tapestry is doing at any given time. Normally, this information is only used when reporting errors, as it gives an indication of what Tapestry was doing leading up to the point where the exception occurred.</p><p>Starting in Tapestry 5.3, you may also enable debug logging for <code>org.apache.tapestry5.ioc.Registry</code> to see voluminous details on creation of proxies, services, injections, and so forth. It also tracks creation of pages and components, triggering of component events, handling of return values from event handler methods, and many (many!) other details.</p><p>The logging even identifies how long each operation takes. This can be useful for understanding what is going on in a Tapestry application during the processing of the request, it can also be useful when tracking down performance is
 sues.</p><p>An example from the startup of a Tapestry application:</p><div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
+                <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">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a  href="logging-in-tapestry.html">Logging in Tapestry</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a  href="logging.html">Logging</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div>
+
+
+<p>In theory, SLF4J is a wrapper around any of a number of logging systems, including <a  class="external-link" href="http://logging.apache.org/log4j/1.2/">Log4J</a> or the built-in JDK logging. In practice, it is almost always used with Log4J and no additional build configuration is needed.</p><p>Your application <em>will</em> need to provide a <strong>log4j.properties</strong> file (or its XML equivalent). See <a  class="external-link" href="http://logging.apache.org/log4j/1.2/manual.html">the Log4J manual</a> for more information.</p><h1 id="LogginginTapestry-AccessingLoggers">Accessing Loggers</h1><p>Loggers are a special kind of resource that is injected into a service. In Tapestry IoC, Loggers an be injected into service constructors, or into service builder methods.</p><p>In Tapestry Core (the web framework), Loggers for components can be injected into component fields.</p><p>This often confuses people, because the standard idiom is to create a Logger based on the class name 
 and inject it into a static field. In Tapestry, the Logger is created on your code's behalf and provided to you, and stored into a final private field.</p><p>In terms of separation of concerns, Tapestry's approach is superior ... the concern of creating loggers is offloaded into the framework, and you code retains the concern of actually logging useful information. However this is largely theoretical.</p><p>For a pragmatic standpoint, injecting Loggers makes it easier to test <em>logging</em> code using the same techniques used to test other code: via the injection of Mock Object implementations of the Logger interface. This is something to consider when writing your own services, components and test.</p><h1 id="LogginginTapestry-ServiceLogging">Service Logging</h1><p>Tapestry uses the same loggers that are injected into services; it logs, at debug level, details about the construction of the service (and the proxy for the service), including details such as methods invoked.</p><h1 
 id="LogginginTapestry-OperationTracker">Operation Tracker</h1><p>The OperationTracker is a resource available throughout Tapestry that is used to track what Tapestry is doing at any given time. Normally, this information is only used when reporting errors, as it gives an indication of what Tapestry was doing leading up to the point where the exception occurred.</p><p>Starting in Tapestry 5.3, you may also enable debug logging for <code>org.apache.tapestry5.ioc.Registry</code> to see voluminous details on creation of proxies, services, injections, and so forth. It also tracks creation of pages and components, triggering of component events, handling of return values from event handler methods, and many (many!) other details.</p><p>The logging even identifies how long each operation takes. This can be useful for understanding what is going on in a Tapestry application during the processing of the request, it can also be useful when tracking down performance issues.</p><p>An example fr
 om the startup of a Tapestry application:</p><div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
 <pre>[INFO] RegistryBuilder Adding module definition for class org.apache.tapestry5.services.TapestryModule
 [INFO] RegistryBuilder Adding module definition for class org.apache.tapestry5.internal.services.InternalModule
 [INFO] RegistryBuilder Adding module definition for class org.apache.tapestry5.services.assets.AssetsModule

Modified: websites/production/tapestry/content/modules.html
==============================================================================
--- websites/production/tapestry/content/modules.html (original)
+++ websites/production/tapestry/content/modules.html Sat Feb  3 17:21:22 2018
@@ -36,13 +36,26 @@
 
   <div class="wrapper bs">
 
-        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  href="index.html">Home</a></li><li><a  href="getting-started.html">Getting Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  href="download.html">Download</a></li><li><a  href="about.html">About</a></li><li><a  class="external-link" href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li><li><a  href="community.html">Community</a></li><li><a  class="external-link" href="http://www.apache.org/security/">Security</a></li><li><a  class="external-link" href="http://www.apache.org/">Apache</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/thanks.html">Thanks</a></li></ul></div></div>
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  href="index.html">Home</a></li><li><a  href="getting-started.html">Getting Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  href="download.html">Download</a></li><li><a  href="about.html">About</a></li><li><a  class="external-link" href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li><li><a  href="community.html">Community</a></li><li><a  class="external-link" href="http://www.apache.org/security/">Security</a></li><li><a  class="external-link" href="http://www.apache.org/">Apache</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/thanks.html">Thanks</a></li></ul></div>
+
+</div>
 
           <div id="top">
-            <div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span><form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html"> 
- <input type="text" name="q"> 
- <input type="submit" value="Search"> 
-</form></div><div class="emblem" style="float:left"><p><a  href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Modules</h1></div></div>
+            <div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
+<form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html">
+  <input type="text" name="q">
+  <input type="submit" value="Search">
+</form>
+
+</div>
+
+
+<div class="emblem" style="float:left"><p><a  href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div>
+
+
+<div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Modules</h1></div>
+
+</div>
       <div class="clearer"></div>
       </div>
 
@@ -54,35 +67,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><div class="sectionColumnWrapper"><div class="sectionMacro">
-<div class="sectionMacroRow"><div class="columnMacro">
-<h2 id="Modules-Built-inModules">Built-in Modules</h2>
-
-Tapestry comes with a collection of add-on modules to let you extend the framework beyond its core.
-
-<h3 id="Modules-HibernateIntegration">Hibernate Integration</h3>
-
-<ul><li><a  href="hibernate-core-conf.html">Hibernate Configuration</a></li><li><a  href="hibernate-user-guide.html">Hibernate User Guide</a></li><li><a  href="hibernate-statistics.html">Hibernate Statistics</a></li></ul>
-
-
-<h3 id="Modules-SpringIntegration">Spring Integration</h3>
-
-<ul><li><a  href="integrating-with-spring-framework.html">Spring Core</a></li></ul>
-
-
-<h3 id="Modules-JPAIntegration">JPA Integration</h3>
-
-<ul><li><a  href="integrating-with-jpa.html">Integrating with JPA</a></li></ul>
-
-
-<h3 id="Modules-OtherModules">Other Modules</h3>
-
-<ul><li><a  href="bean-validation.html">JSR 303 Bean Validation</a></li><li><a  href="functional-flows.html">Functional Flows</a></li><li><a  href="jmx-module.html">JMX Integration</a></li><li><a  href="json.html">JSON</a></li><li><a  href="component-report.html">Component Report</a></li></ul>
-</div>
-<div class="columnMacro">
-<h2 id="Modules-ThirdPartyModules">Third Party Modules</h2>
-
-Independent developers have build a rich collection of Tapestry modules for your immediate use. These modules greatly expand upon the capabilities already included in Tapestry. <em>These links take you to external sites.</em><h2 id="Modules-Tapestry5-Cayenne">Tapestry5-Cayenne</h2><ul><li><a  class="external-link" href="http://code.google.com/p/tapestry5-cayenne/" rel="nofollow">Tapestry5-Cayenne</a> (for Tapestry 5.3) integrates with the Apache Cayenne persistence framework.</li></ul><h2 id="Modules-Argoyle(forTapestry5.3)">Argoyle (for Tapestry 5.3)</h2><ul><li><a  class="external-link" href="https://github.com/argoyle/tapestry-breadcrumbs" rel="nofollow">Tapestry-breadcrumbs</a> is a breadcrumb trail implementation, implemented as an annotation to be placed at each page-class that should be part of the trail.</li><li><a  class="external-link" href="https://github.com/argoyle/tapestry-mfautocomplete" rel="nofollow">Tapestry-mfautocomplete</a> An autocomplete implementation that ca
 n populate multiple fields</li></ul><h2 id="Modules-ChenilleKit(forTapestry5.3)">Chenille Kit (for Tapestry 5.3)</h2><ul><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-ldap/" rel="nofollow">Chenillekit-LDAP</a> helps with LDAP querying</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-lucene/" rel="nofollow">Chenillekit-Lucene</a> provides Apache Lucene indexing &amp; searching</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-image/" rel="nofollow">Chenillekit-Image</a> is an image scaling service</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-mail/" rel="nofollow">Chenillekit-Mail</a> is a mail service based on Apache Commons Email</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-quartz/" rel="nofo
 llow">Chenillekit-Quartz</a> provides Quartz-based scheduling capabilities</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-scripting/" rel="nofollow">Chenillekit-Script</a> enables Apache's Bean Scripting Framework</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-template/" rel="nofollow">Chenillekit-Template</a> enables Velocity and FreeMarker templates</li></ul><p><a  class="external-link" href="https://github.com/chenillekit/chenillekit" rel="nofollow">Other Chenille Kit Modules</a>...</p><h2 id="Modules-CiaranW">CiaranW</h2><ul><li><a  class="external-link" href="https://github.com/ciaranw/tapestry-service-cache/wiki" rel="nofollow">Tapestry-Service-Cache</a> provides easy, annotation-based caching for Tapestry 5 services.</li></ul><h2 id="Modules-Exanpe">Exanpe</h2><ul><li><a  class="external-link" href="https://github.com/exanpe/tapestry-tldgen" rel="nofollow">T
 apestry-Tldgen</a> generates TLD files to let you use the Eclipse JSP editor for code completion on TML files.</li></ul><h2 id="Modules-FlowLogix">FlowLogix</h2><ul><li><a  class="external-link" href="http://code.google.com/p/flowlogix/" rel="nofollow">FlowLogix</a> is a collection of components, services and utilities that integrates Tapestry into JEE environments and provides other commonly needed functionality.</li></ul><h2 id="Modules-GangOfTapestry5">Gang Of Tapestry 5</h2><ul><li><a  class="external-link" href="https://github.com/got5/tapestry5-highcharts" rel="nofollow">Tapestry5-HighCharts</a> integrates the Highcharts library (<a  class="external-link" href="http://www.highcharts.com/" rel="nofollow">http://www.highcharts.com/</a>) into a Tapestry5-jQuery based application</li><li><a  class="external-link" href="https://github.com/got5/tapestry5-jqPlot" rel="nofollow">Tapestry5-jqPlot</a> integrates with JQuery jqPlot, a plotting and charting plugin for the jQuery Javascrip
 t framework. jqPlot produces beautiful line, bar and pie charts with many features.</li><li><a  class="external-link" href="https://github.com/got5/tapestry5-jquery" rel="nofollow">Tapestry5-Jquery</a> lets you use jQuery to supplement <em>or completely replace</em> Prototype, Scriptaculous and the base tapestry.js script.</li><li><a  class="external-link" href="https://github.com/got5/tapestry5-jquery-mobile" rel="nofollow">Tapestry5-jquery-mobile</a> provides jQuery mobile integration for Tapestry</li><li><a  class="external-link" href="https://github.com/got5/tapestry5-portlet" rel="nofollow">Tapestry5-Portlet</a> provides functionality for Portlet Development in Tapestry</li></ul><h2 id="Modules-Spock">Spock</h2><ul><li><a  class="external-link" href="http://code.google.com/p/spock/wiki/TapestryExtension" rel="nofollow">Spock Tapestry Extension</a> provides integration with Spock, a testing and specification framework for Java and Groovy applications.</li></ul><h2 id="Modules-Sp
 readtheSource">Spread the Source</h2><ul><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-db-migrations" rel="nofollow">Tapestry5-db-migrations</a> supports Tapestry 5 Database Migrations: Ruby on Rails-like database migrations powered by Tapestry IOC and Tapestry Hibernate Core</li><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-googleanalytics" rel="nofollow">Tapestry5-googleanalytics</a> integrates with Google Analytics</li><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-hornet" rel="nofollow">Tapestry5-hornet</a> integrates the Hornet java connector inside Tapestry 5. Hornet is a realtime publish/suscribe engine that let you enhance your web application by connecting users together, powered by NodeJs and Socket.io</li><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-installer" rel="nofollow">Tapestry5-installer</a> is a Tapestry 5 webapp installer: Li
 ve load your Tapestry app right after having set the configuration. This contribution aims to provide an easy way for Tapestry developers to include an installation application in their application so the user can provide its production environment configuration values</li><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-rome" rel="nofollow">Tapestry5-rome</a> provides RSS &amp; Atom feed support in Tapestry apps</li><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-spring-tx" rel="nofollow">Tapestry5-spring-tx</a> supports using Spring Transaction Manager inside your Tapestry 5 application. Allows you to access to a Hibernate session factory configured via Spring through your Tapestry business layer in the same transaction</li></ul><h2 id="Modules-T5conduit">T5conduit</h2><ul><li><a  class="external-link" href="https://github.com/cezary-biernacki/t5conduit" rel="nofollow">T5conduit</a> allows seamless integration of Les
 sCSS and CoffeeScript.</li></ul><h2 id="Modules-Tacos">Tacos</h2><ul><li><a  class="external-link" href="http://tacos.sourceforge.net/tacos5/tacos-seam/" rel="nofollow">Tacos-Seam</a> provides an integration between Tapestry and JBoss Seam</li></ul><h2 id="Modules-Tapestry-bootstrap(forTapestry5.3)">Tapestry-bootstrap (for Tapestry 5.3)</h2><ul><li><a  class="external-link" href="https://github.com/trsvax/tapestry-bootstrap" rel="nofollow">Tapestry-bootstrap</a> integrates Twitter Bootstrap with Tapestry 5. (Bootstrap is a grid based toolkit of polished HTML, CSS and JavaScript.</li></ul><h2 id="Modules-Tapestry-cometd">Tapestry-cometd</h2><ul><li><a  class="external-link" href="https://github.com/uklance/tapestry-cometd" rel="nofollow">Tapestry-cometd</a> is a push library for Tapestry based on CometD (an HTTP-based event routing bus that uses an Ajax Push technology pattern known as Comet)</li></ul><h2 id="Modules-Tapestry-monitoring">Tapestry-monitoring</h2><ul><li><a  class="ext
 ernal-link" href="https://github.com/joshcanfield/tapestry-monitoring" rel="nofollow">Tapestry-monitoring</a> is a lightweight, unobtrusive way to add JMX performance metrics to any Tapestry application, using the Java Simon monitoring API.</li></ul><h2 id="Modules-Tapestry-profiler">Tapestry-profiler</h2><ul><li><a  class="external-link" href="https://github.com/bdotte/tapestry-profiler" rel="nofollow">Tapestry-profiler</a> is a simple, configurable, sampling profiler designed to be used in production Tapestry 5 applications to track down performance issues.</li></ul><h2 id="Modules-Tapestry-spring-security">Tapestry-spring-security</h2><ul><li><a  class="external-link" href="http://www.localhost.nu/java/tapestry-spring-security/conf.html" rel="nofollow">Tapestry-spring-security</a> integrates Spring Security with Tapestry applications</li></ul><h2 id="Modules-Tapestry-Testify">Tapestry-Testify</h2><ul><li><a  class="external-link" href="http://tapestrytestify.sourceforge.net/" rel
 ="nofollow">Tapestry-Testify</a> is an extension that makes it easier to write page and component tests and run them efficiently</li></ul><h2 id="Modules-Tapestry-XPath">Tapestry-XPath</h2><ul><li><a  class="external-link" href="http://tapestryxpath.sourceforge.net/" rel="nofollow">Tapestry-XPath</a> allows you to use XPath expressions to query the Tapestry DOM (useful for page &amp; component tests)</li></ul><h2 id="Modules-Tapestry-zbreadcrumbs">Tapestry-zbreadcrumbs</h2><ul><li><a  class="external-link" href="https://bitbucket.org/zenios/tapestry-zbreadcrumbs" rel="nofollow">Tapestry-zbreadcrumbs</a> is a bread crumb trail implementation, with configuration through contributions and annotations, dynamic breadcrumb titles, and a very flexible breadcrumbs trail component</li></ul><h2 id="Modules-Tynamo">Tynamo</h2><ul><li><a  class="external-link" href="http://tynamo.org/tapestry-model+guide" rel="nofollow">Tapestry-Model</a> provides rapid development of CRUD-style applications</l
 i><li><a  class="external-link" href="http://tynamo.org/tapestry-jpa+guide" rel="nofollow">Tapestry-JPA Integration</a> allows you to use JPA with Tapestry</li><li><a  class="external-link" href="http://tynamo.org/tapestry-resteasy+guide" rel="nofollow">Tapestry-ReSTEasy</a> integrates with JBoss' RESTEasy, an implementation of JAX-RS</li><li><a  class="external-link" href="http://tynamo.org/tapestry-security+guide" rel="nofollow">Tapestry-security</a> is a security module for Tapestry apps based on Apache Shiro</li><li><a  class="external-link" href="http://tynamo.org/tapestry-watchdog+guide" rel="nofollow">Tapestry-Watchdog</a> lets your Tapestry app monitor itself</li></ul><p><a  class="external-link" href="http://tynamo.org/" rel="nofollow">Other Tynamo Modules</a>...</p><h2 id="Modules-TapX">TapX</h2><ul><li><a  class="external-link" href="http://tapestry.formos.com/nightly/tapx/tapx-datefield/" rel="nofollow">Tapx-Datefield</a> is an enhanced DateField component</li><li><a  cl
 ass="external-link" href="https://github.com/hlship/tapx" rel="nofollow">Tapx-plainmessage</a> adds a new binding prefix, "plain:", which works just like "message:", except that any HTML elements are scrubbed, and XML entities are replaced with the corresponding characters</li><li><a  class="external-link" href="http://tapestry.formos.com/nightly/tapx/tapx-templating/" rel="nofollow">Tapx-Templating</a> enables using Tapestry to generate offline content</li><li><a  class="external-link" href="https://github.com/hlship/tapx" rel="nofollow">Tapx-yui</a> bundles YUI (Yahoo User Interface) JavaScript library, including its RichTextEditor</li></ul><p><a  class="external-link" href="http://tapestry.formos.com/projects/tapx/" rel="nofollow">Other TapX Modules</a>...</p><h2 id="Modules-Tawus">Tawus</h2><ul><li><a  class="external-link" href="http://tawus.wordpress.com/2011/06/25/ajax-upload-for-tapestry/" rel="nofollow">Tawus-ajaxupload</a> is a multiple-file upload module based on the exce
 llent Valums File Uploader (Fine Uploader), with a progress-bar and drag-and-drop features</li><li><a  class="external-link" href="http://tawus.wordpress.com/2011/07/30/tapestry-jfreechart-integration/" rel="nofollow">Tawus-jfreechart</a> makes it easier to use the JFreeChart charting library (<a  class="external-link" href="http://www.jfree.org/jfreechart/" rel="nofollow">http://www.jfree.org/jfreechart/</a>) within Tapestry apps</li></ul><h2 id="Modules-Weaves(forTapestry5.3)">Weaves (for Tapestry 5.3)</h2><ul><li><a  class="external-link" href="https://github.com/intercommit/Weaves" rel="nofollow">Weaves</a> is a collection of Tapestry 5 components from InterCommIT</li></ul></div></div></div></div></div>
+                <div id="ConfluenceContent"><div class="sectionColumnWrapper"><div class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro"><h2 id="Modules-Built-inModules">Built-in Modules</h2>Tapestry comes with a collection of add-on modules to let you extend the framework beyond its core.<h3 id="Modules-HibernateIntegration">Hibernate Integration</h3><ul><li><a  href="hibernate-core-conf.html">Hibernate Configuration</a></li><li><a  href="hibernate-user-guide.html">Hibernate User Guide</a></li><li><a  href="hibernate-statistics.html">Hibernate Statistics</a></li></ul><h3 id="Modules-SpringIntegration">Spring Integration</h3><ul><li><a  href="integrating-with-spring-framework.html">Spring Core</a></li></ul><h3 id="Modules-JPAIntegration">JPA Integration</h3><ul><li><a  href="integrating-with-jpa.html">Integrating with JPA</a></li></ul><h3 id="Modules-OtherModules">Other Modules</h3><ul><li><a  href="bean-validation.html">JSR 303 Bean Validation</a></li><li><a  h
 ref="functional-flows.html">Functional Flows</a></li><li><a  href="jmx-module.html">JMX Integration</a></li><li><a  href="json.html">JSON</a></li><li><a  href="component-report.html">Component Report</a></li></ul></div><div class="columnMacro"><h2 id="Modules-ThirdPartyModules">Third Party Modules</h2>Independent developers have build a rich collection of Tapestry modules for your immediate use. These modules greatly expand upon the capabilities already included in Tapestry. <em>These links take you to external sites.</em><h2 id="Modules-Tapestry5-Cayenne">Tapestry5-Cayenne</h2><ul><li><a  class="external-link" href="http://code.google.com/p/tapestry5-cayenne/" rel="nofollow">Tapestry5-Cayenne</a> (for Tapestry 5.3) integrates with the Apache Cayenne persistence framework.</li></ul><h2 id="Modules-Argoyle(forTapestry5.3)">Argoyle (for Tapestry 5.3)</h2><ul><li><a  class="external-link" href="https://github.com/argoyle/tapestry-breadcrumbs" rel="nofollow">Tapestry-breadcrumbs</a> is 
 a breadcrumb trail implementation, implemented as an annotation to be placed at each page-class that should be part of the trail.</li><li><a  class="external-link" href="https://github.com/argoyle/tapestry-mfautocomplete" rel="nofollow">Tapestry-mfautocomplete</a> An autocomplete implementation that can populate multiple fields</li></ul><h2 id="Modules-ChenilleKit(forTapestry5.3)">Chenille Kit (for Tapestry 5.3)</h2><ul><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-ldap/" rel="nofollow">Chenillekit-LDAP</a> helps with LDAP querying</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-lucene/" rel="nofollow">Chenillekit-Lucene</a> provides Apache Lucene indexing &amp; searching</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-image/" rel="nofollow">Chenillekit-Image</a> is an image scaling service</li><li><a  class="e
 xternal-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-mail/" rel="nofollow">Chenillekit-Mail</a> is a mail service based on Apache Commons Email</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-quartz/" rel="nofollow">Chenillekit-Quartz</a> provides Quartz-based scheduling capabilities</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-scripting/" rel="nofollow">Chenillekit-Script</a> enables Apache's Bean Scripting Framework</li><li><a  class="external-link" href="https://github.com/chenillekit/chenillekit/tree/master/chenillekit-template/" rel="nofollow">Chenillekit-Template</a> enables Velocity and FreeMarker templates</li></ul><p><a  class="external-link" href="https://github.com/chenillekit/chenillekit" rel="nofollow">Other Chenille Kit Modules</a>...</p><h2 id="Modules-CiaranW">CiaranW</h2><ul><li><a  class="external-link" href="htt
 ps://github.com/ciaranw/tapestry-service-cache/wiki" rel="nofollow">Tapestry-Service-Cache</a> provides easy, annotation-based caching for Tapestry 5 services.</li></ul><h2 id="Modules-Exanpe">Exanpe</h2><ul><li><a  class="external-link" href="https://github.com/exanpe/tapestry-tldgen" rel="nofollow">Tapestry-Tldgen</a> generates TLD files to let you use the Eclipse JSP editor for code completion on TML files.</li></ul><h2 id="Modules-FlowLogix">FlowLogix</h2><ul><li><a  class="external-link" href="http://code.google.com/p/flowlogix/" rel="nofollow">FlowLogix</a> is a collection of components, services and utilities that integrates Tapestry into JEE environments and provides other commonly needed functionality.</li></ul><h2 id="Modules-GangOfTapestry5">Gang Of Tapestry 5</h2><ul><li><a  class="external-link" href="https://github.com/got5/tapestry5-highcharts" rel="nofollow">Tapestry5-HighCharts</a> integrates the Highcharts library (<a  class="external-link" href="http://www.highcha
 rts.com/" rel="nofollow">http://www.highcharts.com/</a>) into a Tapestry5-jQuery based application</li><li><a  class="external-link" href="https://github.com/got5/tapestry5-jqPlot" rel="nofollow">Tapestry5-jqPlot</a> integrates with JQuery jqPlot, a plotting and charting plugin for the jQuery Javascript framework. jqPlot produces beautiful line, bar and pie charts with many features.</li><li><a  class="external-link" href="https://github.com/got5/tapestry5-jquery" rel="nofollow">Tapestry5-Jquery</a> lets you use jQuery to supplement <em>or completely replace</em> Prototype, Scriptaculous and the base tapestry.js script.</li><li><a  class="external-link" href="https://github.com/got5/tapestry5-jquery-mobile" rel="nofollow">Tapestry5-jquery-mobile</a> provides jQuery mobile integration for Tapestry</li><li><a  class="external-link" href="https://github.com/got5/tapestry5-portlet" rel="nofollow">Tapestry5-Portlet</a> provides functionality for Portlet Development in Tapestry</li></ul><
 h2 id="Modules-Spock">Spock</h2><ul><li><a  class="external-link" href="http://code.google.com/p/spock/wiki/TapestryExtension" rel="nofollow">Spock Tapestry Extension</a> provides integration with Spock, a testing and specification framework for Java and Groovy applications.</li></ul><h2 id="Modules-SpreadtheSource">Spread the Source</h2><ul><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-db-migrations" rel="nofollow">Tapestry5-db-migrations</a> supports Tapestry 5 Database Migrations: Ruby on Rails-like database migrations powered by Tapestry IOC and Tapestry Hibernate Core</li><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-googleanalytics" rel="nofollow">Tapestry5-googleanalytics</a> integrates with Google Analytics</li><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-hornet" rel="nofollow">Tapestry5-hornet</a> integrates the Hornet java connector inside Tapestry 5. Hornet is a realt
 ime publish/suscribe engine that let you enhance your web application by connecting users together, powered by NodeJs and <a  class="external-link" href="http://Socket.io" rel="nofollow">Socket.io</a></li><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-installer" rel="nofollow">Tapestry5-installer</a> is a Tapestry 5 webapp installer: Live load your Tapestry app right after having set the configuration. This contribution aims to provide an easy way for Tapestry developers to include an installation application in their application so the user can provide its production environment configuration values</li><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-rome" rel="nofollow">Tapestry5-rome</a> provides RSS &amp; Atom feed support in Tapestry apps</li><li><a  class="external-link" href="https://github.com/spreadthesource/tapestry5-spring-tx" rel="nofollow">Tapestry5-spring-tx</a> supports using Spring Transaction Manager
  inside your Tapestry 5 application. Allows you to access to a Hibernate session factory configured via Spring through your Tapestry business layer in the same transaction</li></ul><h2 id="Modules-T5conduit">T5conduit</h2><ul><li><a  class="external-link" href="https://github.com/cezary-biernacki/t5conduit" rel="nofollow">T5conduit</a> allows seamless integration of LessCSS and CoffeeScript.</li></ul><h2 id="Modules-Tacos">Tacos</h2><ul><li><a  class="external-link" href="http://tacos.sourceforge.net/tacos5/tacos-seam/" rel="nofollow">Tacos-Seam</a> provides an integration between Tapestry and JBoss Seam</li></ul><h2 id="Modules-Tapestry-bootstrap(forTapestry5.3)">Tapestry-bootstrap (for Tapestry 5.3)</h2><ul><li><a  class="external-link" href="https://github.com/trsvax/tapestry-bootstrap" rel="nofollow">Tapestry-bootstrap</a> integrates Twitter Bootstrap with Tapestry 5. (Bootstrap is a grid based toolkit of polished HTML, CSS and JavaScript.</li></ul><h2 id="Modules-Tapestry-comet
 d">Tapestry-cometd</h2><ul><li><a  class="external-link" href="https://github.com/uklance/tapestry-cometd" rel="nofollow">Tapestry-cometd</a> is a push library for Tapestry based on CometD (an HTTP-based event routing bus that uses an Ajax Push technology pattern known as Comet)</li></ul><h2 id="Modules-Tapestry-monitoring">Tapestry-monitoring</h2><ul><li><a  class="external-link" href="https://github.com/joshcanfield/tapestry-monitoring" rel="nofollow">Tapestry-monitoring</a> is a lightweight, unobtrusive way to add JMX performance metrics to any Tapestry application, using the Java Simon monitoring API.</li></ul><h2 id="Modules-Tapestry-profiler">Tapestry-profiler</h2><ul><li><a  class="external-link" href="https://github.com/bdotte/tapestry-profiler" rel="nofollow">Tapestry-profiler</a> is a simple, configurable, sampling profiler designed to be used in production Tapestry 5 applications to track down performance issues.</li></ul><h2 id="Modules-Tapestry-spring-security">Tapestry
 -spring-security</h2><ul><li><a  class="external-link" href="http://www.localhost.nu/java/tapestry-spring-security/conf.html" rel="nofollow">Tapestry-spring-security</a> integrates Spring Security with Tapestry applications</li></ul><h2 id="Modules-Tapestry-Testify">Tapestry-Testify</h2><ul><li><a  class="external-link" href="http://tapestrytestify.sourceforge.net/" rel="nofollow">Tapestry-Testify</a> is an extension that makes it easier to write page and component tests and run them efficiently</li></ul><h2 id="Modules-Tapestry-XPath">Tapestry-XPath</h2><ul><li><a  class="external-link" href="http://tapestryxpath.sourceforge.net/" rel="nofollow">Tapestry-XPath</a> allows you to use XPath expressions to query the Tapestry DOM (useful for page &amp; component tests)</li></ul><h2 id="Modules-Tapestry-zbreadcrumbs">Tapestry-zbreadcrumbs</h2><ul><li><a  class="external-link" href="https://bitbucket.org/zenios/tapestry-zbreadcrumbs" rel="nofollow">Tapestry-zbreadcrumbs</a> is a bread cru
 mb trail implementation, with configuration through contributions and annotations, dynamic breadcrumb titles, and a very flexible breadcrumbs trail component</li></ul><h2 id="Modules-Tynamo">Tynamo</h2><ul><li><a  class="external-link" href="http://tynamo.org/tapestry-model+guide" rel="nofollow">Tapestry-Model</a> provides rapid development of CRUD-style applications</li><li><a  class="external-link" href="http://tynamo.org/tapestry-jpa+guide" rel="nofollow">Tapestry-JPA Integration</a> allows you to use JPA with Tapestry</li><li><a  class="external-link" href="http://tynamo.org/tapestry-resteasy+guide" rel="nofollow">Tapestry-ReSTEasy</a> integrates with JBoss' RESTEasy, an implementation of JAX-RS</li><li><a  class="external-link" href="http://tynamo.org/tapestry-security+guide" rel="nofollow">Tapestry-security</a> is a security module for Tapestry apps based on Apache Shiro</li><li><a  class="external-link" href="http://tynamo.org/tapestry-watchdog+guide" rel="nofollow">Tapestry-
 Watchdog</a> lets your Tapestry app monitor itself</li></ul><p><a  class="external-link" href="http://tynamo.org/" rel="nofollow">Other Tynamo Modules</a>...</p><h2 id="Modules-TapX">TapX</h2><ul><li><a  class="external-link" href="http://tapestry.formos.com/nightly/tapx/tapx-datefield/" rel="nofollow">Tapx-Datefield</a> is an enhanced DateField component</li><li><a  class="external-link" href="https://github.com/hlship/tapx" rel="nofollow">Tapx-plainmessage</a> adds a new binding prefix, "plain:", which works just like "message:", except that any HTML elements are scrubbed, and XML entities are replaced with the corresponding characters</li><li><a  class="external-link" href="http://tapestry.formos.com/nightly/tapx/tapx-templating/" rel="nofollow">Tapx-Templating</a> enables using Tapestry to generate offline content</li><li><a  class="external-link" href="https://github.com/hlship/tapx" rel="nofollow">Tapx-yui</a> bundles YUI (Yahoo User Interface) JavaScript library, including it
 s RichTextEditor</li></ul><p><a  class="external-link" href="http://tapestry.formos.com/projects/tapx/" rel="nofollow">Other TapX Modules</a>...</p><h2 id="Modules-Tawus">Tawus</h2><ul><li><a  class="external-link" href="http://tawus.wordpress.com/2011/06/25/ajax-upload-for-tapestry/" rel="nofollow">Tawus-ajaxupload</a> is a multiple-file upload module based on the excellent Valums File Uploader (Fine Uploader), with a progress-bar and drag-and-drop features</li><li><a  class="external-link" href="http://tawus.wordpress.com/2011/07/30/tapestry-jfreechart-integration/" rel="nofollow">Tawus-jfreechart</a> makes it easier to use the JFreeChart charting library (<a  class="external-link" href="http://www.jfree.org/jfreechart/" rel="nofollow">http://www.jfree.org/jfreechart/</a>) within Tapestry apps</li></ul><h2 id="Modules-Weaves(forTapestry5.3)">Weaves (for Tapestry 5.3)</h2><ul><li><a  class="external-link" href="https://github.com/intercommit/Weaves" rel="nofollow">Weaves</a> is a c
 ollection of Tapestry 5 components from InterCommIT</li></ul></div></div></div></div></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/object-providers.html
==============================================================================
--- websites/production/tapestry/content/object-providers.html (original)
+++ websites/production/tapestry/content/object-providers.html Sat Feb  3 17:21:22 2018
@@ -44,13 +44,26 @@
 
   <div class="wrapper bs">
 
-        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  href="index.html">Home</a></li><li><a  href="getting-started.html">Getting Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  href="download.html">Download</a></li><li><a  href="about.html">About</a></li><li><a  class="external-link" href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li><li><a  href="community.html">Community</a></li><li><a  class="external-link" href="http://www.apache.org/security/">Security</a></li><li><a  class="external-link" href="http://www.apache.org/">Apache</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/thanks.html">Thanks</a></li></ul></div></div>
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  href="index.html">Home</a></li><li><a  href="getting-started.html">Getting Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  href="download.html">Download</a></li><li><a  href="about.html">About</a></li><li><a  class="external-link" href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li><li><a  href="community.html">Community</a></li><li><a  class="external-link" href="http://www.apache.org/security/">Security</a></li><li><a  class="external-link" href="http://www.apache.org/">Apache</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a  class="external-link" href="http://www.apache.org/foundation/thanks.html">Thanks</a></li></ul></div>
+
+</div>
 
           <div id="top">
-            <div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span><form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html"> 
- <input type="text" name="q"> 
- <input type="submit" value="Search"> 
-</form></div><div class="emblem" style="float:left"><p><a  href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Object Providers</h1></div></div>
+            <div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
+<form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html">
+  <input type="text" name="q">
+  <input type="submit" value="Search">
+</form>
+
+</div>
+
+
+<div class="emblem" style="float:left"><p><a  href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div>
+
+
+<div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Object Providers</h1></div>
+
+</div>
       <div class="clearer"></div>
       </div>
 
@@ -62,17 +75,17 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p>When you don't provide the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/InjectService.html">InjectService</a> annotation on a parameter (to a service builder method or constructor), Tapestry will resolve the parameter automatically.</p><p>This is called <em>object injection</em>, rather than <em>service injection</em>, because the value that will ultimately be injected is not necessarily a service; it may be some arbitrary object.</p><p>If this sounds vague, its because there is not just one <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ObjectProvider.html">ObjectProvider</a>; there's a whole set of them, forming a <a  href="chainbuilder-service.html">chain of command</a>. The commands in the chain may provide an object based on the parameter type, or based on additional annotations on the parameter.</p><p>There are 
 several built-in object providers:</p><ul><li>Check for @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Value.html">Value</a> annotation</li><li>Check for @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Symbol.html">Symbol</a> annotation</li><li>Check for a <em>unique</em> service in the Registry whose service interface matches the parameter type<br clear="none"> Usually, the @Inject annotation is supplemented by an additional annotation which triggers a specific ObjectProvider to provide the value.</li></ul><h1 id="ObjectProviders-@ValueAnnotationProvider">@Value Annotation Provider</h1><p>The Value annotation allows a literal value to be injected. When combined with <a  href="symbols.html">symbols</a>, they represent a way for parts of the overall service network to be spot-configured. For example:</p><div class="code panel pdl" style="border-width: 1px
 ;"><div class="codeContent panelContent pdl">
+                <div id="ConfluenceContent"><p>When you don't provide the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/InjectService.html">InjectService</a> annotation on a parameter (to a service builder method or constructor), Tapestry will resolve the parameter automatically.</p><p>This is called <em>object injection</em>, rather than <em>service injection</em>, because the value that will ultimately be injected is not necessarily a service; it may be some arbitrary object.</p><p>If this sounds vague, its because there is not just one <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/ObjectProvider.html">ObjectProvider</a>; there's a whole set of them, forming a <a  href="object-providers.html">chain of command</a>. The commands in the chain may provide an object based on the parameter type, or based on additional annotations on the parameter.</p><p>There are seve
 ral built-in object providers:</p><ul><li>Check for @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Value.html">Value</a> annotation</li><li>Check for @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Symbol.html">Symbol</a> annotation</li><li>Check for a <em>unique</em> service in the Registry whose service interface matches the parameter type<br clear="none"> Usually, the @Inject annotation is supplemented by an additional annotation which triggers a specific ObjectProvider to provide the value.</li></ul><h1 id="ObjectProviders-@ValueAnnotationProvider">@Value Annotation Provider</h1><p>The Value annotation allows a literal value to be injected. When combined with <a  href="object-providers.html">symbols</a>, they represent a way for parts of the overall service network to be spot-configured. For example:</p><div class="code panel pdl" style="border-width
 : 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public MyService build(@Value("${max-seconds}") long maxSeconds)
   {
     return new MyServiceImpl(maxSeconds);
   }</pre>
-</div></div><p>Here, the MyService service requires a configuration of a number of seconds. The value is supplied as a symbol, with a factory default that may be overwritten with an application default.</p><p>Usually, the symbol reference is only part of the string, i.e. <code>@Value("${report.dir}/${report.name}.txt")</code></p><h1 id="ObjectProviders-@SymbolAnnotationProvider">@Symbol Annotation Provider</h1><p>This is closely related to the @Value annotation approach, except that the annotation directly specifies a symbol name.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Here, the MyService service requires a configuration of a number of seconds. The value is supplied as a symbol, with a factory default that may be overwritten with an application default.</p><p>Usually, the symbol reference is only part of the string, i.e. <code>@Value("${report.dir}/${<a  class="external-link" href="http://report.name" rel="nofollow">report.name</a>}.txt")</code></p><h1 id="ObjectProviders-@SymbolAnnotationProvider">@Symbol Annotation Provider</h1><p>This is closely related to the @Value annotation approach, except that the annotation directly specifies a symbol name.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public MyService build(@Symbol("max-seconds") long maxSeconds)
   {
     return new MyServiceImpl(maxSeconds);
   }</pre>
-</div></div><h1 id="ObjectProviders-ServiceProvider">Service Provider</h1><p>This is always that last object provider checked.</p><p>A <em>single</em> service must exist whose service interface matches the parameter type. This is <em>not</em> an exact match: a search is made for any and all services whose service interface is a super class of the parameter type.</p><p>An exception is thrown if there are no matches, or if there are multiple matches.</p><h1 id="ObjectProviders-AliasObjectProvider">Alias Object Provider</h1><p>The tapestry-core module defines the <a  href="aliases.html">Alias object provider</a>, which is used as a way to override services or disambiguate services (when multiple services implement the same interface).</p><h1 id="ObjectProviders-DefiningNewProviders">Defining New Providers</h1><p>New providers can be specified by contributing to the MasterObjectProvider service's configuration. The configuration is mapped, with the keys being the provider prefix, and th
 e values being the object provider implementation.</p><p>Example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><h1 id="ObjectProviders-ServiceProvider">Service Provider</h1><p>This is always that last object provider checked.</p><p>A <em>single</em> service must exist whose service interface matches the parameter type. This is <em>not</em> an exact match: a search is made for any and all services whose service interface is a super class of the parameter type.</p><p>An exception is thrown if there are no matches, or if there are multiple matches.</p><h1 id="ObjectProviders-AliasObjectProvider">Alias Object Provider</h1><p>The tapestry-core module defines the <a  href="object-providers.html">Alias object provider</a>, which is used as a way to override services or disambiguate services (when multiple services implement the same interface).</p><h1 id="ObjectProviders-DefiningNewProviders">Defining New Providers</h1><p>New providers can be specified by contributing to the MasterObjectProvider service's configuration. The configuration is mapped, with the keys being the provider prefi
 x, and the values being the object provider implementation.</p><p>Example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public void contributeMasterObjectProvider(OrderedConfiguration&lt;ObjectProvider&gt; configuration)
   {
     configuration.add("MyObject", new MyObjectProvider());