Modified: websites/production/tapestry/content/component-templates.html
==============================================================================
--- websites/production/tapestry/content/component-templates.html (original)
+++ websites/production/tapestry/content/component-templates.html Tue Feb 13 
03:21:20 2018
@@ -100,7 +100,7 @@
                 <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="templating-and-markup-faq.html">Templating 
and Markup FAQ</a>
+                        <a  href="component-reference.html">Component 
Reference</a>
                 
                         
                     </div>
@@ -109,7 +109,7 @@
                 <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="component-classes.html">Component Classes</a>
+                        <a  href="component-libraries.html">Component 
Libraries</a>
                 
                         
                     </div>
@@ -118,7 +118,7 @@
                 <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="component-reference.html">Component 
Reference</a>
+                        <a  href="templating-and-markup-faq.html">Templating 
and Markup FAQ</a>
                 
                         
                     </div>
@@ -127,7 +127,7 @@
                 <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="component-libraries.html">Component 
Libraries</a>
+                        <a  href="component-classes.html">Component Classes</a>
                 
                         
                     </div>
@@ -176,7 +176,7 @@
     &lt;h1&gt;Bonjour from HelloWorld component.&lt;/h1&gt;
 &lt;/html&gt;
 </pre>
-</div></div><div class="sectionMacro"><div 
class="sectionMacroRow">&#160;</div></div><p>We'll cover the specific content 
of templates shortly, but first a few details about connecting a component to 
its template.</p><h2 id="ComponentTemplates-TemplateLocation">Template 
Location</h2><p>A component template shares the same name as its corresponding 
class file, but with a ".tml" ending (i.e., <strong>T</strong>apestry 
<strong>M</strong>arkup <strong>L</strong>anguage), and is stored in the same 
package as the corresponding component class.</p><p>Under a typical Maven 
directory structure, the Java class and template files for a <em>component</em> 
might be:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Java class:</strong></p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>src/main/java/org/example/myapp/components/MyComponent.java</code></p></td></tr><tr><td
 colspan="1" rowspan="1" class="c
 onfluenceTd"><p><strong>Template:</strong></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>src/main/resources/org/example/myapp/components/MyComponent.tml</code></p></td></tr></tbody></table></div><p>Likewise,
 the Java class and template files for a <em>page</em> might be:</p><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Java class:</strong></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>src/main/java/org/example/myapp/pages/MyPage.java</code></p></td></tr><tr><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Template:</strong></p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>src/main/resources/org/example/myapp/pages/MyPage.tml</code></p></td></tr></tbody></table></div><p>The
 template and the compiled class will be packaged together in the 
WEB-INF/classes folder of the application WAR.</p><p>For <em>pages</em> (but 
not other components), a 
 second location will be searched: in the web application context. The location 
is based on the logical name of the page, in the previous example, the template 
would be <code>MyPage.tml</code> in the root folder of the web 
application.</p><p>A template on the classpath takes precedence over a file in 
the web application context.</p><div class="confluence-information-macro 
confluence-information-macro-warning"><span class="aui-icon aui-icon-small 
aui-iconfont-error confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>Allowing pages to store their 
template in the web context is a feature that may go away at some point. It was 
included as a way for HTML designers to edit template directly and live preview 
the template directly, without executing the Tapestry application. This comes 
with a large number of limitations and leads to a false sense of security that 
a template that previews correctly will render properly (this is not always the 
case).</p>
 </div></div><h2 id="ComponentTemplates-TemplateLocalization">Template 
Localization</h2><p>Main Article: <a  href="component-templates.html">Component 
Templates</a></p><p>Templates are handled in much the same way as individual 
files of a component's message catalog: the effective locale is inserted into 
the name of the file. Thus a German users will see the content generated from 
<code>MyPage_de.tml</code> and French users will see content generated from 
<code>MyPage_fr.tml</code>. When no specific localization is available, the 
default location (<code>MyPage.tml</code>) is used.</p><div 
class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>It is necessary to <a  
href="component-templates.html">enable support for a locale</a> before Tapestry 
will attempt to localize to that locale. This requires configuration in yo
 ur application module (usually AppModule.java); if you are using the Tapestry 
Quickstart archetype, only locale "en" will be enabled by 
default.</p></div></div><p><span class="confluence-anchor-link" 
id="ComponentTemplates-doctypes"></span></p><h2 
id="ComponentTemplates-TemplateDoctypes">Template Doctypes</h2><p>As mentioned 
above, component templates are well-formed XML documents. This means that if 
you want to use any <a  class="external-link" 
href="http://www.w3.org/TR/html401/sgml/entities.html"; rel="nofollow">Named 
HTML entities</a> (such as &amp;amp; &amp;lt; &amp;gt; &amp;copy;), you must 
use an <a  class="external-link" 
href="http://www.w3.org/QA/2002/04/valid-dtd-list.html"; rel="nofollow">HTML or 
XHTML doctype</a> in your template <em>(starting in 5.3, this is more-or-less 
automatic, see notes below)</em>. If you choose to use (X)HTML doctypes in your 
templates, they will be passed on to the client in the resultant (X)HTML. Note 
that if your pages are composed of multiple c
 omponents, each with a template, and each template contains a doctype 
declaration, only the first doctype encountered by the template parser will be 
passed on to the client.</p><p>It should also be noted that even though 
<strong>X</strong>HTML DTDs are valid XML DTDs, HTML DTDs aren't. This means 
that HTML doctypes cannot be used by XML parsers. Tapestry works around this 
limitation internally by using XHTML DTDs to parse templates that use HTML 
DTDs. This internal mapping is possible because XHTML 1.0 is nothing more than 
"a reformulation of the three HTML 4 document types as applications of XML 
1.0," <a  class="external-link" href="http://www.w3.org/TR/xhtml1/#xhtml"; 
rel="nofollow">as per the W3C</a>. Don't worry though &#8211; the original HTML 
4 doctype will still be emitted to the client!</p><p>The following are the most 
common (X)HTML doctypes:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
+</div></div><div class="sectionMacro"><div 
class="sectionMacroRow">&#160;</div></div><p>We'll cover the specific content 
of templates shortly, but first a few details about connecting a component to 
its template.</p><h2 id="ComponentTemplates-TemplateLocation">Template 
Location</h2><p>A component template shares the same name as its corresponding 
class file, but with a ".tml" ending (i.e., <strong>T</strong>apestry 
<strong>M</strong>arkup <strong>L</strong>anguage), and is stored in the same 
package as the corresponding component class.</p><p>Under a typical Maven 
directory structure, the Java class and template files for a <em>component</em> 
might be:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Java class:</strong></p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>src/main/java/org/example/myapp/components/MyComponent.java</code></p></td></tr><tr><td
 colspan="1" rowspan="1" class="c
 onfluenceTd"><p><strong>Template:</strong></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>src/main/resources/org/example/myapp/components/MyComponent.tml</code></p></td></tr></tbody></table></div><p>Likewise,
 the Java class and template files for a <em>page</em> might be:</p><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Java class:</strong></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>src/main/java/org/example/myapp/pages/MyPage.java</code></p></td></tr><tr><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Template:</strong></p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>src/main/resources/org/example/myapp/pages/MyPage.tml</code></p></td></tr></tbody></table></div><p>The
 template and the compiled class will be packaged together in the 
WEB-INF/classes folder of the application WAR.</p><p>For <em>pages</em> (but 
not other components), a 
 second location will be searched: in the web application context. The location 
is based on the logical name of the page, in the previous example, the template 
would be <code>MyPage.tml</code> in the root folder of the web 
application.</p><p>A template on the classpath takes precedence over a file in 
the web application context.</p><div class="confluence-information-macro 
confluence-information-macro-warning"><span class="aui-icon aui-icon-small 
aui-iconfont-error confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>Allowing pages to store their 
template in the web context is a feature that may go away at some point. It was 
included as a way for HTML designers to edit template directly and live preview 
the template directly, without executing the Tapestry application. This comes 
with a large number of limitations and leads to a false sense of security that 
a template that previews correctly will render properly (this is not always the 
case).</p>
 </div></div><h2 id="ComponentTemplates-TemplateLocalization">Template 
Localization</h2><p>Main Article: <a  
href="localization.html">Localization</a></p><p>Templates are handled in much 
the same way as individual files of a component's message catalog: the 
effective locale is inserted into the name of the file. Thus a German users 
will see the content generated from <code>MyPage_de.tml</code> and French users 
will see content generated from <code>MyPage_fr.tml</code>. When no specific 
localization is available, the default location (<code>MyPage.tml</code>) is 
used.</p><div class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>It is necessary to <a  
href="component-templates.html">enable support for a locale</a> before Tapestry 
will attempt to localize to that locale. This requires configuration in your 
application
  module (usually AppModule.java); if you are using the Tapestry Quickstart 
archetype, only locale "en" will be enabled by default.</p></div></div><p><span 
class="confluence-anchor-link" id="ComponentTemplates-doctypes"></span></p><h2 
id="ComponentTemplates-TemplateDoctypes">Template Doctypes</h2><p>As mentioned 
above, component templates are well-formed XML documents. This means that if 
you want to use any <a  class="external-link" 
href="http://www.w3.org/TR/html401/sgml/entities.html"; rel="nofollow">Named 
HTML entities</a> (such as &amp;amp; &amp;lt; &amp;gt; &amp;copy;), you must 
use an <a  class="external-link" 
href="http://www.w3.org/QA/2002/04/valid-dtd-list.html"; rel="nofollow">HTML or 
XHTML doctype</a> in your template <em>(starting in 5.3, this is more-or-less 
automatic, see notes below)</em>. If you choose to use (X)HTML doctypes in your 
templates, they will be passed on to the client in the resultant (X)HTML. Note 
that if your pages are composed of multiple components, eac
 h with a template, and each template contains a doctype declaration, only the 
first doctype encountered by the template parser will be passed on to the 
client.</p><p>It should also be noted that even though <strong>X</strong>HTML 
DTDs are valid XML DTDs, HTML DTDs aren't. This means that HTML doctypes cannot 
be used by XML parsers. Tapestry works around this limitation internally by 
using XHTML DTDs to parse templates that use HTML DTDs. This internal mapping 
is possible because XHTML 1.0 is nothing more than "a reformulation of the 
three HTML 4 document types as applications of XML 1.0," <a  
class="external-link" href="http://www.w3.org/TR/xhtml1/#xhtml"; 
rel="nofollow">as per the W3C</a>. Don't worry though &#8211; the original HTML 
4 doctype will still be emitted to the client!</p><p>The following are the most 
common (X)HTML doctypes:</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;">&lt;!DOCTYPE html&gt;
 
 &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
@@ -197,12 +197,7 @@
 
 <div class="aui-message aui-message-info">
 Added in 5.3 
-   Tapestry 5.3 introduced two significant improvements to template Doctypes.
-
-A template without a  is parsed as if it had the HTML Doctype ({{}}).  In 
fact, Tapestry creates an in-memory copy of the template that includes the 
doctype.
-
-A template with the HTML Doctype ({{}}) is parsed _as if_ it had the XHTML 
transitional Doctype. In fact, Tapestry creates an in-memory copy of the 
template that replaces the  line. This applies as well to a template without 
any Doctype, in which case the XHTML transitional Doctype is inserted at the 
top.  In either case, this means you can use arbitrary HTML entities, such as 
{{&amp;copy;}} or {{&amp;nbsp;}} without seeing the XML parsing errors that 
would occur in earlier releases.
-
+   Tapestry 5.3 introduced two significant improvements to template Doctypes. 
A template without a is parsed as if it had the HTML Doctype ({{}}). In fact, 
Tapestry creates an in-memory copy of the template that includes the doctype. A 
template with the HTML Doctype ({{}}) is parsed _as if_ it had the XHTML 
transitional Doctype. In fact, Tapestry creates an in-memory copy of the 
template that replaces the line. This applies as well to a template without any 
Doctype, in which case the XHTML transitional Doctype is inserted at the top. 
In either case, this means you can use arbitrary HTML entities, such as 
{{&amp;copy;}} or {{&amp;nbsp;}} without seeing the XML parsing errors that 
would occur in earlier releases.
 </div><h2 id="ComponentTemplates-TheTapestryNamespace">The Tapestry 
Namespace</h2><p>Component templates should include the Tapestry namespace, 
defining it in the root element of the template.</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;
     &lt;head&gt;
@@ -252,11 +247,11 @@ A template with the HTML Doctype ({{}})
 </div></div><p>Here, <code>${userId</code>} is the expansion. In this example, 
the userId property of the component is extracted, converted to a string, and 
streamed into the output.</p><p>Expansions are allowed inside text, and inside 
attributes of ordinary elements, and component elements. For example:</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="${request.contextPath}/images/catalog/product_${productId}.png"/&gt;
 </pre>
-</div></div><p>In this hypothetical example, the component class is providing 
a request property and a productId property, and these are being used inside 
the template to assemble the src attribute of the &lt;img&gt; element. This is 
component-like behavior without actual components.</p><p>Under the covers, 
expansions are the same as <a  href="component-templates.html">parameter 
bindings</a>. The default binding prefix for expansions is "prop:" (that is, 
the name of a property or a <a  href="component-templates.html">property 
expression</a>), but other binding prefixes are useful, especially "message:" 
(to access a localized message from the component's message catalog).</p><div 
class="confluence-information-macro confluence-information-macro-warning"><span 
class="aui-icon aui-icon-small aui-iconfont-error 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>Do not use expansions in component 
parameters if the parameter's default or explicit bi
 nding prefix is "prop:" or "var:". Expansions convert the value to an 
immutable string, resulting in a runtime exception if the component tries to 
update the value. Even for read-only parameters, expansions are not as 
desirable, since they always convert to a string, and from there to the 
parameter's declared type.</p></div></div><div 
class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>Tapestry 4 users will note that 
expansions are a concise, easy replacement for the Insert component, and for 
the &lt;span key="..."&gt; directive.</p></div></div><p>Note that expansions 
escape any HTML reserved characters. Specifically, any less-than (&lt;), 
greater than (&gt;) and ampersand (&amp;) are replaced with &amp;lt;, &amp;gt; 
and &amp;amp; respectively. That is usually what you want. However, if your 
property contains HTM
 L that you want rendered as raw markup, you can use the <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/OutputRaw.html";>OutputRaw</a>
 component instead, like this: <code>&lt;t:OutputRaw 
value="someContent"/&gt;</code> where <code>someContent</code> is a property 
containing HTML markup.</p><p><em>Caution: if the content comes from an 
untrusted source (like a public user), be sure to filter it before providing it 
to OutputRaw. Otherwise you've got a potential cross-site scripting 
vulnerability.</em></p><h2 id="ComponentTemplates-EmbeddedComponents">Embedded 
Components</h2><p>An embedded component is identified within the template as an 
element in the t: namespace. Example:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>In this hypothetical example, the component class is providing 
a request property and a productId property, and these are being used inside 
the template to assemble the src attribute of the &lt;img&gt; element. This is 
component-like behavior without actual components.</p><p>Under the covers, 
expansions are the same as <a  href="component-parameters.html">parameter 
bindings</a>. The default binding prefix for expansions is "prop:" (that is, 
the name of a property or a <a  href="property-expressions.html">property 
expression</a>), but other binding prefixes are useful, especially "message:" 
(to access a localized message from the component's message catalog).</p><div 
class="confluence-information-macro confluence-information-macro-warning"><span 
class="aui-icon aui-icon-small aui-iconfont-error 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>Do not use expansions in component 
parameters if the parameter's default or explicit 
 binding prefix is "prop:" or "var:". Expansions convert the value to an 
immutable string, resulting in a runtime exception if the component tries to 
update the value. Even for read-only parameters, expansions are not as 
desirable, since they always convert to a string, and from there to the 
parameter's declared type.</p></div></div><div 
class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>Tapestry 4 users will note that 
expansions are a concise, easy replacement for the Insert component, and for 
the &lt;span key="..."&gt; directive.</p></div></div><p>Note that expansions 
escape any HTML reserved characters. Specifically, any less-than (&lt;), 
greater than (&gt;) and ampersand (&amp;) are replaced with &amp;lt;, &amp;gt; 
and &amp;amp; respectively. That is usually what you want. However, if your 
property contains H
 TML that you want rendered as raw markup, you can use the <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/OutputRaw.html";>OutputRaw</a>
 component instead, like this: <code>&lt;t:OutputRaw 
value="someContent"/&gt;</code> where <code>someContent</code> is a property 
containing HTML markup.</p><p><em>Caution: if the content comes from an 
untrusted source (like a public user), be sure to filter it before providing it 
to OutputRaw. Otherwise you've got a potential cross-site scripting 
vulnerability.</em></p><h2 id="ComponentTemplates-EmbeddedComponents">Embedded 
Components</h2><p>An embedded component is identified within the template as an 
element in the t: namespace. Example:</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;">  You have ${cartItems.size()} items in your cart.
   &lt;t:actionlink t:id="clear"&gt;Remove All&lt;/t:actionlink&gt;.
 </pre>
-</div></div><p>The element name, "actionlink" is used to select the type of 
component, ActionLink.</p><div class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>As elsewhere, Tapestry is 
insensitive to case when mapping from a component type to a component 
class.</p></div></div><p>Embedded components may have two Tapestry-specific <a  
href="component-templates.html">parameters</a>:</p><ul><li>id: A unique id for 
the component (within its container).</li><li>mixins: An optional comma 
separated list of mixins for the the component.</li></ul><p>These attributes 
are specified inside the t: namespace (i.e., 
<code>t:id="clear"</code>).</p><p>If the id attribute is omitted, Tapestry will 
assign a unique id for the element.</p><div class="confluence-information-macro 
confluence-information-macro-note"><span class="aui-icon
  aui-icon-small aui-iconfont-warning 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>Non-trivial components should 
always be assigned a specific id, rather than letting Tapestry do it. You'll 
end up with shorter, more readable URLs and code that's easier to debug, 
because it will be more obvious how the request URL maps to your pages and 
components. This is even more strongly encouraged for form control components, 
where the component id will usually be the same as the query parameter that 
stores the value provided by the end user.</p></div></div><p>Ids must be valid 
Java identifiers: start with a letter, and contain only letters, numbers and 
underscores.</p><p>Any other attributes are used to <a  
href="component-templates.html">bind parameters of the component</a>. These may 
be formal parameters or informal parameters. Formal parameters will have a 
default binding prefix (usually "prop:"). Informal parameters will be assumed 
to be literal
 s (i.e., the "literal:" binding prefix).</p><p>Use of the t: prefix is 
optional for all other attributes. Some users implement a build process where 
the Tapestry template files are validated ... in that case, any 
Tapestry-specific attributes, not defined by the underlying DTD or schema, 
should be in the Tapestry namespace, to avoid validation errors.</p><p>The open 
and close tags of a Tapestry component element define the <strong>body</strong> 
of the component. It is quite common for additional components to be 
<strong>enclosed</strong> in the body of another component:</p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>The element name, "actionlink" is used to select the type of 
component, ActionLink.</p><div class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>As elsewhere, Tapestry is 
insensitive to case when mapping from a component type to a component 
class.</p></div></div><p>Embedded components may have two Tapestry-specific <a  
href="component-parameters.html">parameters</a>:</p><ul><li>id: A unique id for 
the component (within its container).</li><li>mixins: An optional comma 
separated list of mixins for the the component.</li></ul><p>These attributes 
are specified inside the t: namespace (i.e., 
<code>t:id="clear"</code>).</p><p>If the id attribute is omitted, Tapestry will 
assign a unique id for the element.</p><div class="confluence-information-macro 
confluence-information-macro-note"><span class="aui-ico
 n aui-icon-small aui-iconfont-warning 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>Non-trivial components should 
always be assigned a specific id, rather than letting Tapestry do it. You'll 
end up with shorter, more readable URLs and code that's easier to debug, 
because it will be more obvious how the request URL maps to your pages and 
components. This is even more strongly encouraged for form control components, 
where the component id will usually be the same as the query parameter that 
stores the value provided by the end user.</p></div></div><p>Ids must be valid 
Java identifiers: start with a letter, and contain only letters, numbers and 
underscores.</p><p>Any other attributes are used to <a  
href="component-parameters.html">bind parameters of the component</a>. These 
may be formal parameters or informal parameters. Formal parameters will have a 
default binding prefix (usually "prop:"). Informal parameters will be assumed 
to be liter
 als (i.e., the "literal:" binding prefix).</p><p>Use of the t: prefix is 
optional for all other attributes. Some users implement a build process where 
the Tapestry template files are validated ... in that case, any 
Tapestry-specific attributes, not defined by the underlying DTD or schema, 
should be in the Tapestry namespace, to avoid validation errors.</p><p>The open 
and close tags of a Tapestry component element define the <strong>body</strong> 
of the component. It is quite common for additional components to be 
<strong>enclosed</strong> in the body of another component:</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:form&gt;
   &lt;t:errors/&gt;
   &lt;t:label for="userId"/&gt;
@@ -297,7 +292,7 @@ A template with the HTML Doctype ({{}})
     &lt;/tr&gt;
   &lt;/tabel&gt;
 </pre>
-</div></div><p>Here, the loop component "merges into" the &lt;tr&gt; element. 
It will render out a &lt;tr&gt; for each <code>item</code> in the 
<code>items</code> list, with each &lt;tr&gt; including three &lt;td&gt; 
elements. It will also write a dynamic "class" attribute into each 
&lt;tr&gt;.</p><p><span class="confluence-anchor-link" 
id="ComponentTemplates-parameter-namespaces"></span></p><h2 
id="ComponentTemplates-ParameterNamespaces">Parameter Namespaces</h2><p>Main 
Article: <a  href="component-templates.html">Component 
Templates</a></p><p>Parameter namespaces (introduced in Tapestry 5.1) are a 
concise way of passing parameter blocks to components.</p><p>You must define a 
special namespace, usually with the prefix "p":</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Here, the loop component "merges into" the &lt;tr&gt; element. 
It will render out a &lt;tr&gt; for each <code>item</code> in the 
<code>items</code> list, with each &lt;tr&gt; including three &lt;td&gt; 
elements. It will also write a dynamic "class" attribute into each 
&lt;tr&gt;.</p><p><span class="confluence-anchor-link" 
id="ComponentTemplates-parameter-namespaces"></span></p><h2 
id="ComponentTemplates-ParameterNamespaces">Parameter Namespaces</h2><p>Main 
Article: <a  href="component-parameters.html">Component 
Parameters</a></p><p>Parameter namespaces (introduced in Tapestry 5.1) are a 
concise way of passing parameter blocks to components.</p><p>You must define a 
special namespace, usually with the prefix "p":</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_3.xsd"; 
xmlns:p="tapestry:parameter"&gt;
   . . .
 </pre>

Modified: 
websites/production/tapestry/content/ioc-cookbook-service-configurations.html
==============================================================================
--- 
websites/production/tapestry/content/ioc-cookbook-service-configurations.html 
(original)
+++ 
websites/production/tapestry/content/ioc-cookbook-service-configurations.html 
Tue Feb 13 03:21:20 2018
@@ -77,7 +77,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><h1 
id="IoCcookbook-ServiceConfigurations-ServiceConfigurations">Service 
Configurations</h1><p>This is an area of Tapestry IoC that is often least well 
understood. Tapestry services often must have some configuration to fine tune 
exactly what they do. One of the interactions between modules is that these 
service configurations are shared: they may be contributed into by any 
module.</p><p>Let's start with the most basic kind, the unordered 
configuration.</p><h1 
id="IoCcookbook-ServiceConfigurations-UnorderedServiceConfigurations">Unordered 
Service Configurations</h1><p>One of Tapestry's features is the ability to 
package assets (images, style sheets, JavaScript libraries, etc.) inside JAR 
files and expose those to the client. For example, an application URL 
/assets/org/example/mylib/mylib.js would refer to a file, myllib.js, stored on 
the classpath in the /org/example/mylib folder.</p><p>That's fine for most 
cases, but for certain file exte
 nsions, we don't want to allow a client browser to "troll" for the files, as 
the contents could compromise security. For example, downloading a .class file 
is bad: a clever client might download one that contains a hard-coded user name 
or password.</p><p>Thus, for certain file extensions, Tapestry guards the 
resource by attaching an MD5 digest for the resource to the URL. The checksum 
is derived from the file contents; thus it can't be spoofed from the client 
unless the client already has the file contents.</p><p>This is controlled by 
the <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ResourceDigestGenerator.html";>ResourceDigestGenerator</a>
 service, which uses its configuration to determine which file extensions 
require an MD5 digest.</p><h2 
id="IoCcookbook-ServiceConfigurations-ContributingtoaService">Contributing to a 
Service</h2><p>Main Article: <a  
href="ioc-cookbook-service-configurations.html">IoC cookbook - Service Co
 nfigurations</a></p><p>The Tapestry module makes a contribution into the 
service configuration:</p><div class="code panel pdl" style="border-style: 
solid;border-width: 1px;"><div class="codeContent panelContent pdl">
+                <div id="ConfluenceContent"><h1 
id="IoCcookbook-ServiceConfigurations-ServiceConfigurations">Service 
Configurations</h1><p>This is an area of Tapestry IoC that is often least well 
understood. Tapestry services often must have some configuration to fine tune 
exactly what they do. One of the interactions between modules is that these 
service configurations are shared: they may be contributed into by any 
module.</p><p>Let's start with the most basic kind, the unordered 
configuration.</p><h1 
id="IoCcookbook-ServiceConfigurations-UnorderedServiceConfigurations">Unordered 
Service Configurations</h1><p>One of Tapestry's features is the ability to 
package assets (images, style sheets, JavaScript libraries, etc.) inside JAR 
files and expose those to the client. For example, an application URL 
/assets/org/example/mylib/mylib.js would refer to a file, myllib.js, stored on 
the classpath in the /org/example/mylib folder.</p><p>That's fine for most 
cases, but for certain file exte
 nsions, we don't want to allow a client browser to "troll" for the files, as 
the contents could compromise security. For example, downloading a .class file 
is bad: a clever client might download one that contains a hard-coded user name 
or password.</p><p>Thus, for certain file extensions, Tapestry guards the 
resource by attaching an MD5 digest for the resource to the URL. The checksum 
is derived from the file contents; thus it can't be spoofed from the client 
unless the client already has the file contents.</p><p>This is controlled by 
the <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ResourceDigestGenerator.html";>ResourceDigestGenerator</a>
 service, which uses its configuration to determine which file extensions 
require an MD5 digest.</p><h2 
id="IoCcookbook-ServiceConfigurations-ContributingtoaService">Contributing to a 
Service</h2><p>Main Article: <a  
href="tapestry-ioc-configuration.html">Tapestry IoC Configuration</a></p>
 <p>The Tapestry module makes a contribution into the service 
configuration:</p><div class="code panel pdl" style="border-style: 
solid;border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">  public static void 
contributeResourceDigestGenerator(Configuration&lt;String&gt; configuration)
   {
     configuration.add("class");

Modified: websites/production/tapestry/content/property-expressions.html
==============================================================================
--- websites/production/tapestry/content/property-expressions.html (original)
+++ websites/production/tapestry/content/property-expressions.html Tue Feb 13 
03:21:20 2018
@@ -67,7 +67,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p>Tapestry uses <strong>property 
expressions</strong> to move data between components. Property expressions are 
the basis of the <a  href="property-expressions.html">component parameters</a> 
and <a  href="property-expressions.html">template expansions</a>.</p><div 
class="aui-label" style="float:right" title="Related Articles">
+                <div id="ConfluenceContent"><p>Tapestry uses <strong>property 
expressions</strong> to move data between components. Property expressions are 
the basis of the <a  href="property-expressions.html">component parameters</a> 
and <a  href="component-templates.html">template expansions</a>.</p><div 
class="aui-label" style="float:right" title="Related Articles">
 
 
 
@@ -140,7 +140,6 @@ mapKey : keyword | constant | propertyCh
 </p><div class="aui-message aui-message-info">
 Added in 5.3 
    Support for map literals was added in Tapestry 5.3.
-
 </div>Notes:<ul><li>Whitespace is ignored.</li><li>Integers and decimals may 
have a leading sign ('+' or '-').</li><li>Constants are in base 10 (octal and 
hex notation is not yet supported). Decimals may contain a decimal point 
(exponent notation not yet supported).</li><li>Literal strings are enclosed in 
single quotes.</li><li>The <code>rangeOp</code> creates a range object that 
will iterate between the two values. The upper and lower bounds may be literal 
integers, or property expressions.</li><li>An identifier by itself is a 
property name. An identifier with parenthesis is a method 
invocation.</li><li>Property names, method names, and keywords are 
case-insensitive.</li><li>'this' is the root object (i.e., the containing 
component).</li><li>The <code>not</code> operator coerces the expression to a 
<code>boolean</code> (so it can be used on strings, numbers, 
etc.).</li><li>Method matching is based on method name and number of 
parameters, but not parameter types. The <a  href="prope
 rty-expressions.html">TypeCoercer</a> service is used to convert parameters to 
the correct type to be passed into the method.</li></ul><h2 
id="PropertyExpressions-Examples">Examples</h2><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>&#160;</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Example</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Notes</p></th></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Keyword</p></th><td colspan="1" rowspan="1" 
class="confluenceTd"><p>this</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&#160;</p></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Keyword</p></th><td colspan="1" rowspan="1" 
class="confluenceTd"><p>null</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&#160;</p></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Property Name</p></th><td colspan="1" rowspan="1" 
class="confluen
 ceTd"><p>userName</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Calls getUserName() or setUserName, depending on 
context</p></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Property Chain</p></th><td colspan="1" rowspan="1" 
class="confluenceTd"><p>user.address.city</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Calls getUser().getAddress().getCity() or 
getUser().getAddress().setCity(), depending on context</p></td></tr><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Property Chain</p></th><td 
colspan="1" rowspan="1" class="confluenceTd"><p>user?.name</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Calls getUser() and, if the 
result is not null, calls getName() on the result</p></td></tr><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Method Invocation</p></th><td 
colspan="1" rowspan="1" class="confluenceTd"><p>groupList.size()</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>calls getGroupList().size(
 )</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Method 
Invocation</p></th><td colspan="1" rowspan="1" 
class="confluenceTd"><p>members.findById(<a  class="external-link" 
href="http://user.id"; rel="nofollow">user.id</a>)?.name</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Calls 
getMembers().findById(getUser().getId())?.getName() (unless findById returns 
null)</p></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Range</p></th><td colspan="1" rowspan="1" 
class="confluenceTd"><p>1..10</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Iterates between integers 1 and 10</p></td></tr><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Range</p></th><td colspan="1" 
rowspan="1" class="confluenceTd"><p>1..groupList.size()</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Iterates between 1 and the result of 
getGroupList().size()</p></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Literal String</p></t
 h><td colspan="1" rowspan="1" class="confluenceTd"><p>'Beer is proof that God 
loves us and wants us to be happy.'</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Use single quotes</p></td></tr><tr><th colspan="1" 
rowspan="1" class="confluenceTh"><p>List</p></th><td colspan="1" rowspan="1" 
class="confluenceTd"><p>[<a  class="external-link" href="http://user.name"; 
rel="nofollow">user.name</a>, user.email, user.phone]</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><th colspan="1" 
rowspan="1" class="confluenceTh"><p>Not Operator</p></th><td colspan="1" 
rowspan="1" class="confluenceTd"><p>! user.deleted</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>the boolean negation of 
getUser().getDeleted()</p></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Not, Coerced</p></th><td colspan="1" rowspan="1" 
class="confluenceTd"><p>! user.middleName</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>true only if ge
 tUser.getMiddleName() returns null or an empty string</p></td></tr><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Map</p></th><td colspan="1" 
rowspan="1" class="confluenceTd"><p>{ 'framework' : 'Tapestry', 'version' : 
version }</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Keys are 
string literals (in single quotes), but could be properties as 
well</p></td></tr></tbody></table></div></div>
       </div>
 

Modified: 
websites/production/tapestry/content/supported-environments-and-versions.html
==============================================================================
--- 
websites/production/tapestry/content/supported-environments-and-versions.html 
(original)
+++ 
websites/production/tapestry/content/supported-environments-and-versions.html 
Tue Feb 13 03:21:20 2018
@@ -67,7 +67,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p>Tapestry is compatible with a 
pretty wide range of app servers, Java versions, and open source libraries. Not 
all combinations are known to work, however.</p><p>Note: blanks in the support 
matrix tables below do NOT indicate incompatibility. They are just 
documentation gaps.</p><p>If you know of any other known compatibilities or 
incompatibilities, please add a comment at the bottom of this page, or on 
the&#160;<a  href="supported-environments-and-versions.html">Tapestry Users 
mailing list</a> mailing list.</p><h2 
id="SupportedEnvironmentsandVersions-Java&amp;ServletAPIVersions">Java &amp; 
Servlet API Versions</h2><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.5</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.4</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.8</th><th colspan
 ="1" rowspan="1" class="confluenceTh">5.3.0 - 5.3.7</th><th colspan="1" 
rowspan="1" class="confluenceTh">5.2</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.1</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.8</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0</th><th colspan="1" rowspan="1" 
class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Java JRE</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.8<sup>1</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">1.7, 1.8<sup>1</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6 - 1.8<sup>1,2</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6, 1.7</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.5, 1
 .6</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1.6</td><td 
colspan="1" rowspan="1" class="confluenceTd">1.4-1.6</td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd">Servlet API</td><td colspan="1" 
rowspan="1" class="confluenceTd">3.0+</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">2.2-2.3</td></tr></tbody></table></div><p 
class="confluence-link"><sup class="confluence-link">1</sup> Tapestry does not 
yet work with Java 1.9. See&#160;<a  clas
 s="external-link" href="https://issues.apache.org/jira/browse/TAP5-2588";><span 
class="confluence-link">TAP5-2588</span></a>.</p><p><sup>2</sup> For using 
Tapestry 5.3.8 with Java 1.8 see <a  
href="supported-environments-and-versions.html">Supported Environments and 
Versions</a></p><p><sup>3</sup> Servlet API 2.5 requires JDK 1.5+</p><h2 
id="SupportedEnvironmentsandVersions-AppServers">App Servers</h2><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" 
rowspan="1" class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" 
rowspan="1" class="confluenceTh">5.5</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.4</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.8</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.0 - 5.3.7</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.2</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.1</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" class="
 confluenceTh">5.0.8</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0</th><th colspan="1" rowspan="1" 
class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Apache Tomcat</td><td colspan="1" rowspan="1" 
class="confluenceTd">6+</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">6+</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Jetty</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;9</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;7-9</td
 ><td colspan="1" rowspan="1" class="confluenceTd">&#160;6-9</td><td 
 >colspan="1" rowspan="1" class="confluenceTd">&#160;6-8</td><td colspan="1" 
 >rowspan="1" class="confluenceTd">6-8</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">6-8</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">6-8</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">6-8</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">6-8</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">6-7</td></tr><tr><td colspan="1" rowspan="1" 
 >class="confluenceTd">Glassfish</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">2.1</td><td colspan="1" rowspan="1" 
 >class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="conf
 luenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Apache TomEE</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">JBoss EAP</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">
 4.2.3</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td 
colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" 
rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">4+</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Wildfly/JBoss AS</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan=
 "1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Heroku</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Google App Engine</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rows
 pan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">+</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Amazon AWS</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">
 &#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td 
colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" 
rowspan="1" class="confluenceTd">&#160;</td></tr></tbody></table></div><h2 
id="SupportedEnvironmentsandVersions-Libraries">Libraries</h2><p>These are the 
library versions known to work (and, in some cases, bundled with Tapestry). 
Unless otherwise noted, adjacent versions will often work fine as well.</p><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" 
rowspan="1" class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" 
rowspan="1" class="confluenceTh">5.5</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.4.1</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.4</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.8</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.7</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.3-5.3.6</th><th colspan="1" rowspan="1" 
class="confluence
 Th">5.3.2</th><th colspan="1" rowspan="1" class="confluenceTh">5.3 - 
5.3.1</th><th colspan="1" rowspan="1" class="confluenceTh">5.2.1</th><th 
colspan="1" rowspan="1" class="confluenceTh">5.2</th><th colspan="1" 
rowspan="1" class="confluenceTh">5.1</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.16</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.8</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0</th><th colspan="1" rowspan="1" 
class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Hibernate</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">?-4.3.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" row
 span="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">3.5.4-3.6.0</td><td colspan="1" rowspan="1" 
class="confluenceTd">-3.6.0</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">3.3.0+</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">JPA</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluence
 Td">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td 
colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" 
rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Spring</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="
 1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">3.1.0</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">jQuery.js</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.12.1</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="conf
 luenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Prototype.js</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.7.1</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><t
 d colspan="1" rowspan="1" class="confluenceTd">1.7</td><td colspan="1" 
rowspan="1" class="confluenceTd">1.7</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.7</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.7</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6.1</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6.1</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6.0.3</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6.0.3</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6.0.2</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Bootstrap CSS</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">3.3.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">3.0.2</td><td colspan="1" rowspan="1" class="conflue
 nceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Moment.js</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.12.0</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td col
 span="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" 
rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Less4J</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="
 confluenceTd">1.2.1-1.9</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Underscore.js</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#16
 0;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td 
colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" 
rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.3.3</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.17</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.17</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr></tbody></table></div></div>
+                <div id="ConfluenceContent"><p>Tapestry is compatible with a 
pretty wide range of app servers, Java versions, and open source libraries. Not 
all combinations are known to work, however.</p><p>Note: blanks in the support 
matrix tables below do NOT indicate incompatibility. They are just 
documentation gaps.</p><p>If you know of any other known compatibilities or 
incompatibilities, please add a comment at the bottom of this page, or on 
the&#160;<a  href="supported-environments-and-versions.html">Tapestry Users 
mailing list</a> mailing list.</p><h2 
id="SupportedEnvironmentsandVersions-Java&amp;ServletAPIVersions">Java &amp; 
Servlet API Versions</h2><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.5</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.4</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.8</th><th colspan
 ="1" rowspan="1" class="confluenceTh">5.3.0 - 5.3.7</th><th colspan="1" 
rowspan="1" class="confluenceTh">5.2</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.1</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.8</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0</th><th colspan="1" rowspan="1" 
class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Java JRE</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.8<sup>1</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">1.7, 1.8<sup>1</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6 - 1.8<sup>1,2</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6, 1.7</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.5, 1.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.5, 1
 .6</td><td colspan="1" rowspan="1" class="confluenceTd">1.5, 1.6</td><td 
colspan="1" rowspan="1" class="confluenceTd">1.4-1.6</td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd">Servlet API</td><td colspan="1" 
rowspan="1" class="confluenceTd">3.0+</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.5+</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">2.4+<sup>3</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd">2.2-2.3</td></tr></tbody></table></div><p 
class="confluence-link"><sup class="confluence-link">1</sup> Tapestry does not 
yet work with Java 1.9. See&#160;<a  clas
 s="external-link" href="https://issues.apache.org/jira/browse/TAP5-2588";><span 
class="confluence-link">TAP5-2588</span></a>.</p><p><sup>2</sup> For using 
Tapestry 5.3.8 with Java 1.8 see <a  href="release-notes-538.html">Release 
Notes 5.3.8</a></p><p><sup>3</sup> Servlet API 2.5 requires JDK 1.5+</p><h2 
id="SupportedEnvironmentsandVersions-AppServers">App Servers</h2><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" 
rowspan="1" class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" 
rowspan="1" class="confluenceTh">5.5</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.4</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.8</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.0 - 5.3.7</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.2</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.1</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.8</th><th colspa
 n="1" rowspan="1" class="confluenceTh">5.0</th><th colspan="1" rowspan="1" 
class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Apache Tomcat</td><td colspan="1" rowspan="1" 
class="confluenceTd">6+</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">6+</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Jetty</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;9</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;7-9</td><td colspan="1" rowspan="1" class
 ="confluenceTd">&#160;6-9</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;6-8</td><td colspan="1" rowspan="1" 
class="confluenceTd">6-8</td><td colspan="1" rowspan="1" 
class="confluenceTd">6-8</td><td colspan="1" rowspan="1" 
class="confluenceTd">6-8</td><td colspan="1" rowspan="1" 
class="confluenceTd">6-8</td><td colspan="1" rowspan="1" 
class="confluenceTd">6-8</td><td colspan="1" rowspan="1" 
class="confluenceTd">6-7</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Glassfish</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.1</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="
 1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Apache TomEE</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">JBoss EAP</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">4.2.3</td><td colspan="1" rowspan=
 "1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">4+</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Wildfly/JBoss AS</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceT
 d">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td 
colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd">Heroku</td><td colspan="1" 
rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Google App Engine</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160
 ;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td 
colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" 
rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">+</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Amazon AWS</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan
 ="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr></tbody></table></div><h2 
id="SupportedEnvironmentsandVersions-Libraries">Libraries</h2><p>These are the 
library versions known to work (and, in some cases, bundled with Tapestry). 
Unless otherwise noted, adjacent versions will often work fine as well.</p><div 
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" 
rowspan="1" class="confluenceTh">Tapestry Version &#8594;</th><th colspan="1" 
rowspan="1" class="confluenceTh">5.5</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.4.1</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.4</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.8</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.7</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.3-5.3.6</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.3.2</th><th colspan="1" rows
 pan="1" class="confluenceTh">5.3 - 5.3.1</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.2.1</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.2</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.1</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.16</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.10</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0.8</th><th colspan="1" rowspan="1" 
class="confluenceTh">5.0</th><th colspan="1" rowspan="1" 
class="confluenceTh">4.1</th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Hibernate</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">?-4.3.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#16
 0;</td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td 
colspan="1" rowspan="1" class="confluenceTd">3.5.4-3.6.0</td><td colspan="1" 
rowspan="1" class="confluenceTd">-3.6.0</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">3.3.0+</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">JPA</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" row
 span="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Spring</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd
 ">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd">3.1.0</td><td 
colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" 
rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">jQuery.js</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.12.1</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="
 1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Prototype.js</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.7.1</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="c
 onfluenceTd">1.7</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.7</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.7</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.7</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6.1</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6.1</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6.0.3</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6.0.3</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6.0.2</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Bootstrap CSS</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">3.3.6</td><td colspan="1" rowspan="1" 
class="confluenceTd">3.0.2</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" 
 rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Moment.js</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">2.12.0</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="conflu
 enceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Less4J</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.2.1-1.9</td><td co
 lspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" 
rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">Underscore.js</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1"
  class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.3.3</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.17</td><td colspan="1" rowspan="1" 
class="confluenceTd">1.17</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" 
class="confluenceTd">&#160;</td></tr></tbody></table></div></div>
       </div>
 
       <div class="clearer"></div>


Reply via email to