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/05/21 05:20:56 UTC

svn commit: r1030132 [2/7] - in /websites/production/tapestry/content: ./ cache/

Modified: websites/production/tapestry/content/component-parameters.html
==============================================================================
--- websites/production/tapestry/content/component-parameters.html (original)
+++ websites/production/tapestry/content/component-parameters.html Mon May 21 05:20:56 2018
@@ -86,11 +86,13 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="component-parameters.html">Component Parameters</a>
@@ -99,7 +101,7 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="component-templates.html">Component Templates</a>
@@ -108,25 +110,25 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="templating-and-markup-faq.html">Templating and Markup FAQ</a>
+                        <a  href="component-classes.html">Component Classes</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="component-classes.html">Component Classes</a>
+                        <a  href="templating-and-markup-faq.html">Templating and Markup FAQ</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="page-and-component-classes-faq.html">Page And Component Classes FAQ</a>
@@ -135,34 +137,34 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="enum-parameter-recipe.html">Enum Parameter Recipe</a>
+                        <a  href="supporting-informal-parameters.html">Supporting Informal Parameters</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="supporting-informal-parameters.html">Supporting Informal Parameters</a>
+                        <a  href="default-parameter.html">Default Parameter</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="default-parameter.html">Default Parameter</a>
+                        <a  href="enum-parameter-recipe.html">Enum Parameter Recipe</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="component-cheat-sheet.html">Component Cheat Sheet</a>
@@ -174,21 +176,21 @@
 
 
 <p>In the following example, <code>page</code> is a parameter of the <code>pagelink</code> component. The page parameter tells the pagelink component which page to go to when the user clicks on the rendered hyperlink:</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;html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
     &lt;t:pagelink page="Index"&gt;Go Home&lt;/t:pagelink&gt;
 &lt;/html&gt;</pre>
 </div></div><p>A component may have any number of parameters. Each parameter has a specific name, a specific Java type (which may be a primitive value), and may be <em>optional</em> or <em>required</em>.</p><p>Within a component class, parameters are declared by using the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Parameter.html">Parameter</a> annotation on a private field, as we'll see below.</p><p><span class="confluence-anchor-link" id="ComponentParameters-bindingparameters"></span></p><h1 id="ComponentParameters-ParameterBindings">Parameter Bindings</h1><p>In Tapestry, a parameter is not a slot into which data is pushed: it is a <em>connection</em> between a field of the component (marked with the @Parameter annotation) and a property or resource of the component's container. (Components can be nested, so the container can be either the page or another component.)</p><div class="navmenu" style="float:right; backgr
 ound:white; margin:3px; padding:3px">
 <div class="panel" style="border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;"><b>Contents</b></div><div class="panelContent">
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1523334077379 {padding: 0px;}
-div.rbtoc1523334077379 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1523334077379 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1526880002508 {padding: 0px;}
+div.rbtoc1526880002508 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1526880002508 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1523334077379">
+/*]]>*/</style><div class="toc-macro rbtoc1526880002508">
 <ul class="toc-indentation"><li><a  href="#ComponentParameters-ParameterBindings">Parameter Bindings</a></li><li><a  href="#ComponentParameters-BindingExpressions">Binding Expressions</a></li><li><a  href="#ComponentParameters-@Parameterannotation">@Parameter annotation</a></li><li><a  href="#ComponentParameters-Don'tusethe${...}syntax!">Don't use the ${...} syntax!</a></li><li><a  href="#ComponentParameters-InformalParameters">Informal Parameters</a></li><li><a  href="#ComponentParameters-ParametersAreBi-Directional">Parameters Are Bi-Directional</a></li><li><a  href="#ComponentParameters-InheritedParameterBindings">Inherited Parameter Bindings</a></li><li><a  href="#ComponentParameters-ComputedParameterBindingDefaults">Computed Parameter Binding Defaults</a></li><li><a  href="#ComponentParameters-UnboundParameters">Unbound Parameters</a></li><li><a  href="#ComponentParameters-ParameterTypeCoercion">Parameter Type Coercion</a></li><li><a  href="#ComponentParameters-ParameterNames">
 Parameter Names</a></li><li><a  href="#ComponentParameters-DeterminingifBound">Determining if Bound</a></li><li><a  href="#ComponentParameters-PublishingParameters">Publishing Parameters</a></li></ul>
 </div>
 </div></div></div>&#160;<p>The connection between a component and a property (or resource) of its container is called a <em>binding</em>. The binding is two-way: the component can read the bound property by reading its parameter field. Likewise, a component that updates its parameter field will update the bound property.</p><p>This is important in a lot of cases; for example a TextField component can read <em>and update</em> the property bound to its value parameter. It reads the value when rendering, but updates the value when the form is submitted.</p><p>The component listed below is a looping component; it renders its body a number of times, defined by its <code>start</code> and <code>end</code> parameters (which set the boundaries of the loop). The component can update a <code>result</code> parameter bound to a property of its container; it will automatically count up or down depending on whether <code>start</code> or <code>end</code> is larger.</p><div class="code panel pdl" st
 yle="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">package org.example.app.components;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">package org.example.app.components;
 
 import org.apache.tapestry5.annotations.AfterRender;
 import org.apache.tapestry5.annotations.Parameter;
@@ -241,38 +243,38 @@ public class Count
 }
 </pre>
 </div></div><p>The name of the parameter is the same as field name (except with leading "_" and "$" characters, if any, removed). Here, the parameter names are "start", "end" and "result".</p><p>The component above can be referenced in another component or page <a  href="component-templates.html">template</a>, and its parameters <em>bound</em>:</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;html t:type="layout" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;html t:type="layout" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
     &lt;p&gt; Merry Christmas: &lt;t:count end="3"&gt; Ho! &lt;/t:count&gt;
     &lt;/p&gt;
 &lt;/html&gt;
 </pre>
 </div></div><p>The end attribute is used to <em>bind</em> the end parameter of the Count component. Here, it is being bound to the string value "3", which is automatically <a  href="type-coercion.html">coerced</a> by Tapestry into the int value, 3.</p><p>Any number of parameters may be bound this way.</p><p>Component parameters may also be bound using the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Component.html">Component</a> annotation inside the component class. (Where conflicts occur, the parameters bound using the Component annotation will take precedence over parameter bindings in the template.)</p><p><span class="confluence-anchor-link" id="ComponentParameters-binding-expressions"></span></p><h1 id="ComponentParameters-BindingExpressions">Binding Expressions</h1><p>The value inside the template, "3" in the previous example, is a <em>binding expression</em>.</p><p>By placing a prefix in front of the value, you c
 an change how Tapestry interprets the remainder of the expression (the part after the colon):</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><strong>Prefix</strong></p></th><th colspan="1" rowspan="1" class="confluenceTh"><p><strong>Description</strong></p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>asset:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The relative path to an asset file (which must exist)</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>block:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The id of a block within the template</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>component:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The id of another component within the same template</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>context:</p></td><td colspan="1" rowspan="1
 " class="confluenceTd"><p>Context asset: path from context root</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>literal:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A literal string</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>nullfieldstrategy:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Used to locate a pre-defined <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/NullFieldStrategy.html">NullFieldStrategy</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>message:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Retrieves a string from the component's <a  href="localization.html">message catalog</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>prop:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A <a  href="property-expressions.html">property expression</a> to read or update</p></td></tr><tr
 ><td colspan="1" rowspan="1" class="confluenceTd"><p>symbol:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Used to read one of your <a  href="symbols.html">symbols</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>translate:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The name of a configured translator</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>validate:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A <em>validator specification</em> used to create some number of field validators</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>var:</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Allows a render variable of the component to be read or updated</p></td></tr></tbody></table></div><p>Most of these binding prefixes allow parameters to be bound to read-only values; for instance a parameter bound to "message:some-key" will see the message for "some-key" from its con
 tainer's message catalog in the field. If the component tries to update the parameter (by setting the value of the field), a runtime exception will be thrown to indicate that the value is read-only.</p><p>Only prop: and var: binding prefixes are updateable (but you must <em>not</em> use the ${..} syntax here; see the <a  href="component-parameters.html">warning below</a>).</p><p>Each parameter has a default prefix, defined by the component, that is used when the prefix is not provided. The most common are "literal:" and "prop:".</p><p>A <em>special prefix</em>, "inherit:", is used to support <a  href="component-parameters.html">Inherited Parameter Bindings</a>.</p><h3 id="ComponentParameters-RenderVariables:Bindings">Render Variables: Bindings</h3><p>Components can have any number of <em>render variables</em>. Render variables are named values with no specific type (they are ultimately stored in a Map). Render variables are useful for holding simple values, such as loop indices, tha
 t need to be passed from one component to another.</p><p>For example, the following template code:</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;ul&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;ul&gt;
     &lt;li t:type="loop" source="1..10" value="index"&gt;${index}&lt;/li&gt;
 &lt;/ul&gt;
 </pre>
 </div></div><p>and the following Java code:</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;">@Property
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">@Property
 private int index;
 </pre>
 </div></div><p>... could be rewritten as just:</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;ul&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;ul&gt;
     &lt;li t:type="loop" source="1..10" value="var:index"&gt;${var:index}&lt;/li&gt;
 &lt;/ul&gt;
 
 </pre>
 </div></div><p>In other words, you don't have to define a property in the Java code. The disadvantage is that render variables don't work with the property expression syntax, so you can pass around a render variable's <em>value</em> but you can't reference any of the value's properties.</p><p>Render variables are automatically cleared when a component finishes rendering.</p><p>Render variable names are case insensitive.</p><h3 id="ComponentParameters-Property:Bindings">Property: Bindings</h3><p>Main Article: <a  href="property-expressions.html">Property Expressions</a></p><p>The "prop:" binding prefix indicates a property expression binding.</p><p>Property expressions are used to link a parameter of a component to a property of its container. Property expressions can navigate a series of properties and/or invoke methods, as well as several other useful patterns.</p><p>The default binding prefix in most cases is "prop:", which is why it is usually omitted.</p><h3 id="ComponentParamet
 ers-Validate:Bindings">Validate: Bindings</h3><p>Main Article: <a  href="forms-and-validation.html">Forms and Validation</a></p><p>The "validate:" binding prefix is highly specialized. It allows a short string to be used to create and configure the objects that perform input validation for form control components, such as TextField and Checkbox.</p><p>The string is a comma-separated list of <em>validator types</em>. These are short aliases for objects that perform the validation. In many cases, the validation is configurable in some way: for example, a validator that enforces a minimum string length needs to know what that minimum string length is. Such values are specified after an equals sign.</p><p>For example: <code>validate:required,minLength=5</code> would presumably enforce that a field requires a value, and with at least five characters.</p><h3 id="ComponentParameters-Translate:Bindings">Translate: Bindings</h3><p>The "translate:" binding prefix is also related to input vali
 dation. It is the name of a configured <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Translator.html">Translator</a>, responsible for converting between server-side and client-side representations of data (for instance, between client-side strings and server-side numeric values).</p><p>The list of available translators is configured by the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/TranslatorSource.html">TranslatorSource</a> service.</p><h3 id="ComponentParameters-Asset:Bindings">Asset: Bindings</h3><p>Main Article: <a  href="assets.html">Assets</a></p><p>Assets bindings are used to specify <a  href="component-parameters.html">Component Parameters</a>, static content served by Tapestry. By default, assets are located relative to the component class in your packaged application or module. This can be overridden by prefixing the path with "context:", in which case, the path 
 is a context path from the root of the web application context. Because accessing context assets is relatively common, a separate "context:" binding prefix for that purpose exists (described below).</p><h3 id="ComponentParameters-Context:Bindings">Context: Bindings</h3><p>Main Article: <a  href="assets.html">Assets</a></p><p>Context bindings are like asset bindings, but the path is <em>always</em> relative to the root of the web application context. This is intended for use inside templates, i.e.:</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;img src="${context:images/icon.png}"/&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">  &lt;img src="${context:images/icon.png}"/&gt;
 </pre>
 </div></div><p>Tapestry will adjust the URL of the image so that it is processed by Tapestry, not the servlet container. It will gain a URL that includes the application's version number, it will have a far-future expires header, and (if the client supports it) its content will be compressed before being sent to the client.</p><h1 id="ComponentParameters-@Parameterannotation">@Parameter annotation</h1><h3 id="ComponentParameters-RequiredParameters">Required Parameters</h3><p>Parameters that are required <strong>must</strong> be bound. A runtime exception occurs if a component has unbound required parameters.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class Component{
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">public class Component{
 
   @Parameter(required = true)
   private String parameter;
 
 }</pre>
 </div></div><div class="confluence-information-macro confluence-information-macro-tip"><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Sometimes a parameter is marked as required, but may still be omitted if the underlying value is provided by some other means. This is the case, for example, with the Select component's value parameter, which may have its underlying value set by <a  href="using-select-with-a-list.html">contributing a ValueEncoderSource</a>. Be sure to read the component's parameter documentation carefully. Required simply enables checks that the parameter is bound, it does not mean that you must supply the binding in the template (or @Component annotation).</p></div></div><h3 id="ComponentParameters-OptionalParameters">Optional Parameters</h3><p>Parameters are optional unless they are marked as required.</p><p>You may set a default value for optional parameters using
  the <code>value</code> element of the @Parameter annotation. In the Count component above, the start parameter has a default value of 1. That value is used unless the start parameter is bound, in which case, the bound value supersedes the default.</p><h3 id="ComponentParameters-ParameterBindingDefaults">Parameter Binding Defaults</h3><p>The @Parameter annotation's <code>value</code> element can be used to specify a <em>binding expression</em> that will be the default binding for the parameter if otherwise left unbound. Typically, this is the name of a property that that will compute the value on the fly.</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;">@Parameter(value="defaultMessage") // or, equivalently, @Parameter("defaultMessage")
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">@Parameter(value="defaultMessage") // or, equivalently, @Parameter("defaultMessage")
 private String message;
 
 @Parameter(required=true)
@@ -284,19 +286,19 @@ public String getDefaultMessage(){&#160;
 
 </pre>
 </div></div><p>As elsewhere, you may use a prefix on the value. A common prefix to use is the "message:" prefix, to access a localized message.</p><h3 id="ComponentParameters-ParameterCaching">Parameter Caching</h3><p>Reading a parameter value can be marginally expensive (because of type coercion). Therefore, it makes sense to cache the parameter value, at least while the component is actively rendering itself.</p><p>In rare cases, it is desirable to defeat the caching; this can be done by setting the cache() attribute of the @Parameter annotation to false.</p><p><span class="confluence-anchor-link" id="ComponentParameters-dontUseSyntax"></span></p><h1 id="ComponentParameters-Don'tusethe${...}syntax!">Don't use the ${...} syntax!</h1><p>Main Article: <a  href="component-templates.html">Expansions</a></p><p>You generally should <em>not</em> use the Template Expansion syntax, ${...}, within component parameter bindings. Doing so results in the property inside the braces being converte
 d to an (immutable) string, and will therefore result in a runtime exception if your component needs to update the value (whenever the default or explicit binding prefix is <code>prop:</code> or <code>var:</code>, since such component parameters are <em>two-way</em> bindings).</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>This is right</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;t:textfield t:id="color" value="color"/&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;t:textfield t:id="color" value="color"/&gt;
 </pre>
 </div></div></div><div class="columnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>This is wrong</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;t:textfield t:id="color" value="${color}"/&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;t:textfield t:id="color" value="${color}"/&gt;
 </pre>
 </div></div></div></div></div></div><p>The general rule is, only use the ${...} syntax in non-Tapestry-controlled locations in your template, such as in attributes of ordinary HTML elements and in plain-text areas of your template.</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>This is right</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;img src="${context:images/banner.png}"/&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;img src="${context:images/banner.png}"/&gt;
 </pre>
 </div></div></div><div class="columnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>This is wrong</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;img src="context:images/banner.png"/&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;img src="context:images/banner.png"/&gt;
 </pre>
 </div></div></div></div></div></div><h1 id="ComponentParameters-InformalParameters">Informal Parameters</h1><p>Main Article: <a  href="supporting-informal-parameters.html">Supporting Informal Parameters</a></p><p>Many components support <em>informal parameters</em>, additional parameters beyond the formally defined parameters. Informal parameters will be rendered into the output as additional attributes on the tag rendered by the component. Generally speaking, components that have a 1:1 relationship with a particular HTML tag (such as &lt;TextField&gt; and &lt;input&gt; will support informal parameters.</p><p>Only components whose class is annotated with @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/SupportsInformalParameters.html">SupportsInformalParameters</a> will support informal parameters. Tapestry silently drops informal parameters that are specified for components that do not have this annotation.</p><p>Informal 
 parameters are often used to set the CSS class of an element, or to specify client-side event handlers.</p><p>The default binding prefix for informal parameters depends on <em>where</em> the parameter binding is specified. If the parameter is bound inside a Java class, within the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Component.html">Component</a> annotation, then the default binding prefix is "prop:". If the parameter is bound inside the component template, then the default binding prefix is "literal:". This reflects the fact that a parameter specified in the Java class, using the annotation, is most likely a computed value, whereas a value in the template should simply be copied, as is, into the result HTML stream.</p><p>Informal parameters (if supported) are always rendered into the output <em>unless</em> they are bound to a property whose value is null. If the bound property is null then the parameter will <em
 >not</em> be present at all in the rendered output.</p><p>If your component should render informal parameters, just inject the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ComponentResources.html">ComponentResources</a> for your component and invoke the <code>renderInformalParameters()</code> method. See&#160;<a  href="supporting-informal-parameters.html">Supporting Informal Parameters</a> for an example of how to do this.</p><h1 id="ComponentParameters-ParametersAreBi-Directional">Parameters Are Bi-Directional</h1><p>Parameters are not simply variables; each parameter represents a connection, or <em>binding</em>, between a component and a property of its container. When using the prop: binding prefix, the component can force changes <em>into</em> a property of its container, just by assigning a value to its own instance variable.</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:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
     &lt;p&gt; Countdown:
         &lt;t:count start="5" end="1" result="index"&gt;
           ${index} ...
@@ -305,10 +307,10 @@ public String getDefaultMessage(){&#160;
 &lt;/t:layout&gt;
 </pre>
 </div></div><p>Because the Count component updates its result parameter (the <code>result</code> field), the index property of the containing component is updated. Inside the Count's body, we output the current value of the index property, using the expansion <code>${index</code>}. The resulting output will look something like:</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;p&gt; Countdown: 5 ... 4 ... 3 ... 2 ... 1 ... &lt;/p&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">  &lt;p&gt; Countdown: 5 ... 4 ... 3 ... 2 ... 1 ... &lt;/p&gt;
 </pre>
 </div></div><p>(Though the whitespace will be quite different.)</p><p>The relevant part is that components can read fixed values, or <em>live</em> properties of their container, and can <em>change</em> properties of their container as well.</p><h1 id="ComponentParameters-InheritedParameterBindings">Inherited Parameter Bindings</h1><p>A special prefix, "inherit:" is used to identify the name of a parameter of the containing component. If the parameter is bound in the containing component, then it will be bound to the same value in the embedded component.</p><p>If the parameter is not bound in the containing component, then it will not be bound in the embedded component (and so, the embedded component may use a default binding).</p><p>Inherited bindings are useful for complex components; they are often used when an inner component has a default value for a parameter, and the outer component wants to make it possible to override that default.</p><div class="code panel pdl" style="borde
 r-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Index.tml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
   &lt;body&gt;
     &lt;div t:type="layout" t:menuTitle="literal:The Title"&gt;
       ...
@@ -317,7 +319,7 @@ public String getDefaultMessage(){&#160;
 &lt;/html&gt;
 </pre>
 </div></div><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Layout.tml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
 
 	&lt;div t:type="title" t:title="inherit:menuTitle"&gt;&lt;/div&gt;
 
@@ -326,7 +328,7 @@ public String getDefaultMessage(){&#160;
 &lt;/t:container&gt;
 </pre>
 </div></div><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Title.java</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">package org.example.app.components;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">package org.example.app.components;
 
 import org.apache.tapestry5.annotations.Parameter;
 
@@ -338,7 +340,7 @@ public class Title {
 }
 </pre>
 </div></div><h1 id="ComponentParameters-ComputedParameterBindingDefaults">Computed Parameter Binding Defaults</h1><p>In <em>rare</em> cases, you may want to compute the binding to be used as a parameter default. In this case, you will provide a <em>default binding method</em>, a method that takes no parameters. The returned value is used to bind the parameter. The return value may be a <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Binding.html">Binding</a> instance, or it may be a simple value (which is more often the case).</p><p>The method name is "default" plus the capitalized name of the parameter.</p><p>Using this approach, the previous example may be rewritten as:</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;">  @Parameter
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">  @Parameter
   private String message;
 
   @Parameter(required=true)
@@ -361,7 +363,7 @@ public class Title {
   }
 </pre>
 </div></div><p>In this example, a property expression, "basicMessage", is used to access the message dynamically.</p><p>Alternately, the previous example may be written even more succinctly as:</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;">  @Parameter
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">  @Parameter
   private String message;
 
   @Parameter(required=true)
@@ -376,7 +378,7 @@ public class Title {
   }
 </pre>
 </div></div><p>This form is more like using the "literal:" binding prefix, except that the literal value is computed by the defaultMessage() method.</p><p>Obviously, this is a lot more work than simply specifying a default value as part of the @Parameter annotation. In the few real cases where this is approach is used, the default binding method will usually deduce a proper binding, typically in terms of the component's id. For example, the TextField component will deduce a value parameter that binds to a property of its container with the same name.</p><p>A default binding method will <em>only</em> be invoked if the @Parameter annotation does not provide a default value.</p><h1 id="ComponentParameters-UnboundParameters">Unbound Parameters</h1><p>If a parameter is not bound (and is optional), then the value may be read or <em>updated</em> at any time.</p><p>Updates to unbound parameters cause no side effects. In the first example, the value parameter of the Count component is not bo
 und, and this is perfectly valid.</p><p>Note: updates to such fields are temporary; when the component <em>finishes rendering</em>, the field will revert to its default value.</p><h1 id="ComponentParameters-ParameterTypeCoercion">Parameter Type Coercion</h1><p>Main Article:&#160;<a  href="parameter-type-coercion.html">Parameter Type Coercion</a></p><p>Tapestry includes a mechanism for <span class="confluence-link">coercing types automatically</span>. Most often, this is used to convert literal strings into appropriate values, but in many cases, more complex conversions will occur. This mechanism is used for component parameters, such as when an outer component passes a literal string to an inner component that is expecting an integer.</p><p>You can easily <a  href="type-coercion.html">contribute new coercions</a> for your own purposes.</p><h1 id="ComponentParameters-ParameterNames">Parameter Names</h1><p>By default, Tapestry converts from the field name to the parameter name, by str
 ipping off leading "$" and "_" characters.</p><p>This can be overridden using the name() attribute of the @Parameter annotation.</p><h1 id="ComponentParameters-DeterminingifBound">Determining if Bound</h1><p>In rare cases, you may want to take different behaviors based on whether a parameter is bound or not. This can be accomplished by querying the component's resources, which can be <a  href="injection.html">injected</a> into the component using the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Inject.html">Inject</a> annotation:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class MyComponent
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">public class MyComponent
 {
   @Parameter
   private int myParam;
@@ -395,18 +397,18 @@ public class Title {
 }
 </pre>
 </div></div><p>The above sketch illustrates the approach. Because the parameter type is a primitive type, int, it is hard to distinguish between no binding, and binding explicitly to the value 0.</p><p>The @Inject annotation will inject the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ComponentResources.html">ComponentResources</a> for the component. These resources are the linkage between the Java class you provide, and the infrastructure Tapestry builds around your class. In any case, once the resources are injected, they can be queried.</p><h1 id="ComponentParameters-PublishingParameters">Publishing Parameters</h1><p>Often when creating new components from existing components, you want to expose some of the functionality of the embedded component, in the form of exposing parameters of the embedded components as parameters of the outer component.</p><p>In Tapestry 5.0, you would define a parameter of the outer component, and use t
 he "inherit:" binding prefix to connect the inner component's parameter to the outer component's parameter. This is somewhat clumsy, as it involves creating an otherwise unused field just for the parameter; in practice it also leads to duplication of the documentation of the parameter.</p><p>In Tapestry 5.1 and later, you may use the publishParameters attribute of the @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Component.html">Component</a> annotation. List one or more parameters separated by commas: those parameters of the inner/embedded component become parameters of the outer component. You should <strong>not</strong> define a parameter field in the outer component.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>ContainerComponent.tml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
 &lt;t:pageLink t:id="link"&gt;Page Link&lt;/t:pageLink&gt;
 &lt;/t:container&gt;
 </pre>
 </div></div><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>ContainerComponent.java</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class ContainerComponent{
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">public class ContainerComponent{
     @Component(id="link", publishParameters="page")
     private PageLink link;
 }
 </pre>
 </div></div><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Index.tml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;t:ContainerComponent t:id="Container" t:page="About" /&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;t:ContainerComponent t:id="Container" t:page="About" /&gt;
 </pre>
 </div></div><p>There are still cases where you want to use the "inherit:" binding prefix. For example, if you have several components that need to share a parameter, then you must do it the Tapestry 5.0 way: a true parameter on the outer component, and "inherit:" bindings on the embedded components. You can follow a similar pattern to rename a parameter in the outer component.</p><p></p></div>
       </div>

Modified: websites/production/tapestry/content/configuration.html
==============================================================================
--- websites/production/tapestry/content/configuration.html (original)
+++ websites/production/tapestry/content/configuration.html Mon May 21 05:20:56 2018
@@ -86,56 +86,58 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="application-module-class-cheat-sheet.html">Application Module Class Cheat Sheet</a>
+                        <a  href="response-compression.html">Response Compression</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="ioc-cookbook-service-configurations.html">IoC cookbook - Service Configurations</a>
+                        <a  href="symbols.html">Symbols</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="symbols.html">Symbols</a>
+                        <a  href="application-module-class-cheat-sheet.html">Application Module Class Cheat Sheet</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="tapestry-ioc-configuration.html">Tapestry IoC Configuration</a>
+                        <a  href="ioc-cookbook-service-configurations.html">IoC cookbook - Service Configurations</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="response-compression.html">Response Compression</a>
+                        <a  href="tapestry-ioc-configuration.html">Tapestry IoC Configuration</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="configuration.html">Configuration</a>
@@ -147,14 +149,14 @@
 
 
 <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.rbtoc1523334097249 {padding: 0px;}
-div.rbtoc1523334097249 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1523334097249 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1526880003330 {padding: 0px;}
+div.rbtoc1526880003330 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1526880003330 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1523334097249">
+/*]]>*/</style></p><div class="toc-macro rbtoc1526880003330">
 <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
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;!DOCTYPE web-app
       PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
       "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
 &lt;web-app&gt;
@@ -179,7 +181,7 @@ div.rbtoc1523334097249 li {margin-left:
 <p>The Tapestry filter matches all the requests that apply to Tapestry, and passes the rest off to the servlet container. In situations where there would be a naming conflict, actual files inside the web application take precedence over Tapestry pages.</p>
 
 <p>Tapestry recognizes the <em>root URL</em>, where the servlet path is simply "/", and renders the application page "Index", if it exists.</p></div>The application-specific part, the <code>tapestry.app-package</code> context parameter, provides your application's root package name. Tapestry uses this to locate your page and component classes. It expects page classes in the <code>pages</code> sub-package and components in the <code>components</code> sub-package. In the example above, page classes will be stored in the <code>org.example.myapp.pages</code> package (or in sub-packages below). Likewise, component classes will be stored in the <code>org.example.myapp.components</code> package.<p>By convention, the filter name (<code>filter-name</code>) is almost always "app", but you can use any name you want. Tapestry uses this to determine what <em>module class</em> name to look for (see below).</p><h2 id="Configuration-YourApplication'sModuleClass">Your Application's Module Class</h2>
 <p>Main Article: <a  href="tapestry-ioc-configuration.html">Tapestry IoC Configuration</a></p><p>Most other configuration occurs inside your application's module class. The application module class will often define new services, provide overrides of services, or make contributions to service configurations.</p><p>Tapestry looks for your application module class in the services package (under the root package) of your application. It capitalizes the &lt;filter-name&gt; and appends "Module". In the previous example, because the filter name was "app" and the application's root package name is "org.example.myapp", the module class would be org.example.myapp.services.AppModule.</p><p>If such a class exists, it is added to the IoC Registry. It is not an error for your application to not have a module class, though any non-trivial application will have one.</p><p>Your application module class (usually AppModule.java) will typically override some of Tapestry's default, or "factory", symbol
 s, by contributing overrides to the ApplicationDefaults service configuration. For example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>AppModule.java</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class AppModule
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">public class AppModule
 {
   public static void contributeApplicationDefaults(MappedConfiguration&lt;String,String&gt; configuration)
   {
@@ -440,16 +442,16 @@ div.rbtoc1523334097249 li {margin-left:
     <div class="param-body">Some components, notably Grid, Pallete and Zone, have default parameter values specified in terms of symbols. This means you can use these symbols to modify the defaults for all instances of such components in your application. For example, you can set the default rows per page for all Grid instances by adding this to the&#160;<code>contributeApplicationDefaults</code> method in your application's module class (typically AppModule.java): <code>configuration.add(ComponentParameterConstants.GRID_ROWS_PER_PAGE, "15");</code></div>
 
 </div><p>See the complete list of such constants at <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ComponentParameterConstants.html">ComponentParameterConstants</a>.</p><h2 id="Configuration-ConfiguringIgnoredPaths">Configuring Ignored Paths</h2><p>You may sometimes need to use Tapestry in concert with other servlets. This can cause problems, since Tapestry (being a servlet filter) may see URLs intended for another servlet and attempt to process them.</p><p>The Servlet API does not provide Tapestry with any clues about what other servlets are available in the web application. Instead, you must configure Tapestry to ignore paths intended for other servlets.</p><p>The IgnoredPathsFilter service is the method for this kind of configuration. Its configuration is an unordered collection of regular expression patterns. A request whose path matches any of these patterns is <strong>not</strong> processed by Tapestry.</p><p>For example, say yo
 u are using <a  class="external-link" href="http://getahead.org/dwr/" rel="nofollow">Direct Web Remoting</a>. You'll likely have the servlet path /dwr mapped to the Direct Web Remoting servlet.</p><p>You contribution would look like:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  public static void contributeIgnoredPathsFilter(Configuration&lt;String&gt; configuration)
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">  public static void contributeIgnoredPathsFilter(Configuration&lt;String&gt; configuration)
   {
     configuration.add("/dwr/.*");
   }
 </pre>
 </div></div><p>The regular expression matches any path that begins with "/dwr/".</p><p>The regular expressions provided in the configuration are always compiled with case insensitivity enabled.</p><p>Also note that actual files in your web application (images, stylesheets, etc.) are always ignored by Tapestry.</p><h2 id="Configuration-ConfiguringContentTypeMapping">Configuring Content Type Mapping</h2><p>The mapping from file type (by extension) to content type is typically done as part of your servlet-containers configuration. Alternately, you may contribute to the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/internal/services/ResourceStreamer.html">ResourceStreamer</a> service's configuration. This is a mapped configuration; it maps file extensions (such as "css" or "js") to content types ("text/css" or "text/javascript") respectively.</p><h2 id="Configuration-SettingExecutionModes">Setting Execution Modes</h2><p>Starting with Tap
 estry 5.2.4, we can specify an <em>execution mode</em> by loading specific Tapestry Modules through a JVM System property. All modules declared in this way will be loaded after the AppModule of your application. This feature is very useful for defining a different environment for Production and Development modes, for example.</p><p>This JVM System property, named tapestry.execution-mode, is a comma-separated list of mode names. You can declare this property in a number of different ways:</p><p>1. Add the parameter to your JVM command line:</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 jetty:run
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">-Dtapestry.execution-mode=uat jetty:run
 </pre>
 </div></div><p>2. Add the parameter to the Jetty plugin:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>pom.xml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;plugin&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;plugin&gt;
     &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;
     &lt;artifactId&gt;maven-jetty-plugin&lt;/artifactId&gt;
     &lt;version&gt;6.1.16&lt;/version&gt;
@@ -467,7 +469,7 @@ div.rbtoc1523334097249 li {margin-left:
 &lt;/plugin&gt;
 </pre>
 </div></div><p>3. Add the parameter to the Surefire plugin for your test:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>pom.xml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;plugin&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;plugin&gt;
     &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
     &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
     &lt;version&gt;2.8.1&lt;/version&gt;
@@ -479,7 +481,7 @@ div.rbtoc1523334097249 li {margin-left:
 &lt;/plugin&gt;
 </pre>
 </div></div><p>For each mode declared in your JVM System Property, TapestryFilter checks for a parameter in your web.xml, named tapestry.TheModeName-modules, with TheModeName being the name of the desired mode. Its value will be a comma-separated list of modules.</p><p>If the tapestry.execution-mode is not declared, Tapestry will automatically look for the tapestry.production-modules parameter, because &#8220;production&#8221; is the default tapestry.execution-mode value.</p><p>The example below defines two different execution modes in your web.xml file: production (the default value) and uat (for "user acceptance testing"). For each mode, we list the modules we want to load. If we use JVM System property declared in the example above, the UatModeModule&#160;module will be loaded.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>web.xml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;context-param&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;context-param&gt;
     &lt;param-name&gt;tapestry.production-modules&lt;/param-name&gt;
     &lt;param-value&gt;com.example.myapp.services.ProductionModeModule&lt;/param-value&gt;
 &lt;/context-param&gt;
@@ -494,7 +496,7 @@ div.rbtoc1523334097249 li {margin-left:
 &lt;/context-param&gt;
 </pre>
 </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 class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">-Dtapestry.execution-mode=uat,integration jetty:run
 </pre>
 </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>
 
@@ -504,13 +506,13 @@ div.rbtoc1523334097249 li {margin-left:
     <div class="param-body">Support for application folders was added in release 5.3.</div>
 
 </div><p>Setting this up is in two parts:</p><ul><li>Modifying the configuration of the <code>&lt;url-pattern&gt;</code> for the Tapestry filter to match the specified folder.</li><li>Identifying the folder name using a Tapestry symbol value contribution.</li></ul><p>So, if you wanted to run the Tapestry application inside folder <code>t5app</code>, you would modify your <code>web.xml</code> indicate the use of the folder:</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;filter-mapping&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">  &lt;filter-mapping&gt;
     &lt;filter-name&gt;app&lt;/filter-name&gt;
     &lt;url-pattern&gt;/t5app/*&lt;/url-pattern&gt;
   &lt;/filter-mapping&gt;
 </pre>
 </div></div><p>... and in your AppModule, you would inform Tapestry about the mapping change:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class AppModule
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">public class AppModule
 {
     @Contribute(SymbolProvider.class)
     @ApplicationDefaults

Modified: websites/production/tapestry/content/enum-parameter-recipe.html
==============================================================================
--- websites/production/tapestry/content/enum-parameter-recipe.html (original)
+++ websites/production/tapestry/content/enum-parameter-recipe.html Mon May 21 05:20:56 2018
@@ -86,38 +86,40 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="enum-parameter-recipe.html">Enum Parameter Recipe</a>
+                        <a  href="supporting-informal-parameters.html">Supporting Informal Parameters</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="supporting-informal-parameters.html">Supporting Informal Parameters</a>
+                        <a  href="default-parameter.html">Default Parameter</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="default-parameter.html">Default Parameter</a>
+                        <a  href="enum-parameter-recipe.html">Enum Parameter Recipe</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="component-parameters.html">Component Parameters</a>
@@ -129,7 +131,7 @@
 
 
 <h1 id="EnumParameterRecipe-EnumComponentParameter">Enum Component Parameter</h1><p>It's not uncommon to create a component that has a bit of complex behavior that you want to be able to easily control, and an enumerated type (a Java enum) seems like the right approach.</p><p>Our example comes from Tapestry's Select component, which has a blankOption parameter that has an enum type.</p><p>Let's start with the enum type itself:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>BlankOption.java</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public enum BlankOption
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">public enum BlankOption
 {
     /** Always include the blank option, even if the underlying property is required. */
     ALWAYS,
@@ -142,7 +144,7 @@
 }
 </pre>
 </div></div><p>Next, we define the parameter:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Select.java (partial)</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">    /**
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">    /**
      * Controls whether an additional blank option is provided. The blank option precedes all other options and is never
      * selected. The value for the blank option is always the empty string, the label may be the blank string; the
      * label is from the blankLabel parameter (and is often also the empty string).
@@ -151,7 +153,7 @@
     private BlankOption blankOption;
 </pre>
 </div></div><p>Note the use of literal as the default prefix; this allows us to use the name of the option in our template, e.g. <code>&lt;t:select blankoption="never" .../&gt;</code>. Without the default prefix setting, "never" would be interpreted as a property expression (and you'd see an error when you loaded the page).</p><p>The final piece of the puzzle is to inform Tapestry how to convert from a string, such as "never", to a BlankOption value.</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 static void contributeTypeCoercer(Configuration&lt;CoercionTuple&gt; configuration)
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">    public static void contributeTypeCoercer(Configuration&lt;CoercionTuple&gt; configuration)
     {
        . . .
        

Modified: websites/production/tapestry/content/environmental-services.html
==============================================================================
--- websites/production/tapestry/content/environmental-services.html (original)
+++ websites/production/tapestry/content/environmental-services.html Mon May 21 05:20:56 2018
@@ -81,7 +81,7 @@
 <p>Environmental services represent yet another, distinct form of injection.</p>
 
 <p>Unlike service injection (injection via a service implementation's constructor) or normal component injection (directly into component fields, via the @Inject annotation) where the injected value is always the same, with environmental services, the injected value is very late bound and dynamic.</p></div><strong>Environmental services</strong> provide a conduit of communication between two components (usually a component and the components it encloses). The first component pushes an object of a certain type into the <em>environment</em>, and then the second component can access that object merely by defining an annotated property of the same type.<p>An example of how this works is Tapestry's built-in <em>form support</em>. The <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Form.html">Form</a> component creates an object of type <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/t
 apestry5/services/FormSupport.html">FormSupport</a> and pushes it into the environment. Then, the enclosed form components can use that FormSupport object to participate in both the rendering of the Form and the Form's eventual submission. This is how control names and client-side ids are determined, how fields register callbacks so that they can process their part of the submission, and how fields hook themselves to client-side validation.</p><h1 id="EnvironmentalServices-Usingthe@Environmentalannotation">Using the @Environmental annotation</h1><p>The @<a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Environmental.html">Environmental</a> annotation, when used in a component class, causes the associated field to be replaced at runtime with a read-only value obtained from an Environment service provided by an enclosing component.</p><p>A very common Environmental is <a  class="external-link" href="http://tapestry.apache.org/c
 urrent/apidocs/org/apache/tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a>, used when generating <a  href="ajax-javascript.html">client-side JavaScript</a>.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">  @Inject @Path("${tapestry.scriptaculous}/dragdrop.js")
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">  @Inject @Path("${tapestry.scriptaculous}/dragdrop.js")
   private Asset dragDropLibrary;
 
   @Environmental
@@ -94,7 +94,7 @@
 
 </pre>
 </div></div><p>Environmental services are, by their nature, per-thread (and therefore per-request).</p><p>Accessing an environmental field causes a lookup, by type, against the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/Environment.html">Environment</a> service.</p><p>Normally, an environmental of the specified type must be available in the Environment, or an exception is thrown when accessing the field. However, if the value of the Environmental annotation's value is false, then the environmental value is optional.</p><h1 id="EnvironmentalServices-Placingavalueintheenvironment">Placing a value in the environment</h1><p>The Environment service has push() and pop() methods to put a value in the Environment, and discard it.</p><p>For example, say you were building a tab-based menu system and you needed to allow an outer TabGroup component to communicate with inner Tab components, to control various aspects of presentation.<
 /p><p>The relevant information could be exposed as an interface, TabModel.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>TabGroup.java</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class TabGroup
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">public class TabGroup
 {
   @Inject
   private Environment environment;
@@ -122,7 +122,7 @@ public class Tab
 }
 </pre>
 </div></div><p>Notice that when pushing a value into the Environment, you identify its type as well as the instance. Environment maintains a number of stacks, one for each type. Thus, pushing a TabModel into the environment won't disturb the RenderSupport or other environmentals already there.</p><p>What's important here is that the code that pushes a environmental onto a stack should also pop it off.</p><p>The enclosed class, Tab, has full access to whatever object was pushed onto the stack by the TabGroup.</p><p>The reason why Environment is a stack is so that a component can, when it makes sense, easily replace or intercept access to an Environmental.</p><h1 id="EnvironmentalServices-FundamentalEnvironmentals">Fundamental Environmentals</h1><p>Not all environmentals are pushed into the Environment by components.</p><p>A number of environmentals are initialized as part of page rendering, even before the first component starts to render. This initialization is accomplished with <a 
  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/MarkupRendererFilter.html">MarkupRendererFilter</a> contributions to the <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/MarkupRenderer.html">MarkupRenderer</a> service.</p><h1 id="EnvironmentalServices-AccessingEnvironmentalsinServices">Accessing Environmentals in Services</h1><p>The Environmental annotation only works inside components.</p><p>To access an Environmental inside a service implementation, you must inject the Environment service and obtain values from it using the peek() method.</p><p>If this is something that will occur frequently, it is possible to create a service implementation that is "backed" by the Environment. For example, RenderSupport is accessible as a normal injection, because a service is built for it in TapestryModule:</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 RenderSupport buildRenderSupport(EnvironmentalShadowBuilder builder)
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">  public RenderSupport buildRenderSupport(EnvironmentalShadowBuilder builder)
   {
     return builder.build(RenderSupport.class);
   }

Modified: websites/production/tapestry/content/error-page-recipe.html
==============================================================================
--- websites/production/tapestry/content/error-page-recipe.html (original)
+++ websites/production/tapestry/content/error-page-recipe.html Mon May 21 05:20:56 2018
@@ -86,20 +86,31 @@
 
 
 
+
+
 <h3>Related Articles</h3>
 
 <ul class="content-by-label"><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="error-page-recipe.html">Error Page Recipe</a>
+                        <a  href="runtime-exceptions.html">Runtime Exceptions</a>
                 
                         
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a  href="overriding-exception-reporting.html">Overriding Exception Reporting</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
                         <a  href="specific-errors-faq.html">Specific Errors FAQ</a>
@@ -108,10 +119,10 @@
                     </div>
     </li><li>
         <div>
-                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+                <span class="icon aui-icon content-type-page" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="overriding-exception-reporting.html">Overriding Exception Reporting</a>
+                        <a  href="error-page-recipe.html">Error Page Recipe</a>
                 
                         
                     </div>
@@ -120,7 +131,7 @@
 
 
 <p>Simply upgrade your application web.xml to the 2.4 version (or newer), and make a couple of changes:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>web.xml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
 
 &lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
@@ -151,7 +162,7 @@
 &lt;/web-app&gt;
 </pre>
 </div></div><p>Tapestry's filter must be marked as a handler for both standard requests and errors. That's accomplished with the <code>&lt;dispatcher&gt;</code> elements inside the <code>&lt;filter-mapping&gt;</code> section.</p><p>You must then map error codes to Tapestry URLs. In this case, the 404 error is send to the <code>/error404</code> resource, which is really the "Error404" Tapestry page.</p><p>We'll create a simple Error404 page, one that displays a message and (in development mode) displays the details about the incoming request.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Error404.tml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"&gt;
  &lt;head&gt;
 
         &lt;title&gt;Resource not found.&lt;/title&gt;
@@ -170,7 +181,7 @@
     &lt;/body&gt;
 &lt;/html&gt;</pre>
 </div></div><p>The page simply makes the request and productionMode properties available:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Error404.java</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">package com.example.newapp.pages;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">package com.example.newapp.pages;
 
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.annotations.Property;

Modified: websites/production/tapestry/content/extending-the-if-component.html
==============================================================================
--- websites/production/tapestry/content/extending-the-if-component.html (original)
+++ websites/production/tapestry/content/extending-the-if-component.html Mon May 21 05:20:56 2018
@@ -78,7 +78,7 @@
 
       <div id="content">
                 <div id="ConfluenceContent"><h1 id="ExtendingtheIfComponent-ExtendingtheIfComponent">Extending the If Component</h1><p>The <a  class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html">If</a> component can be made very flexible; its main parameter, <code>test</code>, does not <em>have</em> to be bound to a boolean value, it merely has to be bound to a value that can be <a  href="parameter-type-coercion.html">coerced</a> to boolean.</p><p>For example, you may be working on an application that does a lot of <a  class="external-link" href="http://lucene.apache.org/java/docs/index.html">Lucene</a> searches, and you represent the results as a SearchResult object:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>SearchResult.java</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class SearchResult&lt;T&gt; {
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">public class SearchResult&lt;T&gt; {
   public final Class&lt;T&gt; itemType;
   public final List&lt;T&gt; items;
   public final int size;
@@ -102,14 +102,14 @@
 }
 </pre>
 </div></div><p>In a SearchResult, the <code>size</code> property is the overall number of results from the search. The <code>items</code> list is a single "page" of those results to present to the user, consisting of items from <code>firstIndex</code> to <code>lastIndex</code> within the overall set.</p><p>In your templates, you have to check to see if the SearchResult exists, then see if it is empty, before you can get to the part that displays the content:</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:if test="searchResult"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;t:if test="searchResult"&gt;
   &lt;t:if test="! searchResult.empty"&gt;
     . . .
   &lt;/t:if&gt;
 &lt;/t:if&gt;
 </pre>
 </div></div><p>The first test checks to see if <code>searchResult</code> is not null (null is treated as false). The second checks to see if the search result is empty.</p><p>What we'd like is for the test to look at the <code>searchResult</code> directly and treat an empty search result as false, and a non-empty search result as true. This is similar to what Tapestry already does for Collections.</p><p>This is just a matter of adding a <a  href="parameter-type-coercion.html"> <code>Coercion</code></a><code>:</code></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>AppModule.java (partial)</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public static void contributeTypeCoercer(Configuration&lt;CoercionTuple&gt; configuration) {
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Default" data-theme="Default">public static void contributeTypeCoercer(Configuration&lt;CoercionTuple&gt; configuration) {
 
   add(configuration, SearchResult.class, Boolean.class,
       new Coercion&lt;SearchResult, Boolean&gt;() {
@@ -128,7 +128,7 @@ private static &lt;S, T&gt; void add(Con
 }
 </pre>
 </div></div><p>Inside this thicket of generics and brackets is the code that treats a SearchResult as a boolean: <code>return !input.isEmpty();</code>.</p><p>With this in place, the previous template can be simplified:</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:if test="searchResult"&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; gutter: false; theme: Default" data-theme="Default">&lt;t:if test="searchResult"&gt;
   . . .
 &lt;/t:if&gt;
 </pre>