Modified: websites/production/tapestry/content/tapestry-for-jsf-users.html
==============================================================================
--- websites/production/tapestry/content/tapestry-for-jsf-users.html (original)
+++ websites/production/tapestry/content/tapestry-for-jsf-users.html Fri May  1 
00:29:08 2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Tapestry for JSF Users - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -204,7 +204,7 @@
 </div>
 
 
-<p>Since almost all modern JSF applications use Facelets as their view 
technology, we assume the use of Facelets here when discussing JSF 
features.</p><p>JSF is a rich, mature web framework specification, and there 
are lots of smart people who use it productively. This guide isn't intended as 
a pro-versus-con comparison or as advocacy of any kind. Instead, it just 
attempts to make transitions between the two frameworks easier, regardless of 
the reason for doing so.</p><h2 
id="TapestryforJSFUsers-Side-by-sideComparison">Side-by-side 
Comparison</h2><p>JSF and Tapestry have a lot of superficial similarities, so 
the first steps in that transition are all about relating similar concepts, 
terms and components in your mind:</p><div class="table-wrap"><table 
class="table table-bordered"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Concepts &amp; Terminology</p></th><th colspan="1" 
rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" 
class="confluence
 Th"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Java class associated with a page or 
component</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"Backing 
Bean"</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"<a 
href="component-classes.html">Component Class</a>"</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Component 
attributes/parameters</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>"attributes"</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>"<a 
href="component-parameters.html">parameters</a>"</p></td></tr><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Common 
Attributes/Parameters</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>HTML Attribute used for invisible 
instrumentation</p></td><td colspan="1" rowspan="1" cl
 ass="confluenceTd"><p>jsfc="someComponentType"</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a 
href="component-templates.html">t:type="someComponentType"</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>CSS "class" attribute 
name</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>styleClass</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>class</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Alternating "zebra" striped rows</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>rowclasses="class1,class2"</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>class="${cycle:class1,class2}" using <a 
class="external-link" 
href="https://wiki.apache.org/tapestry/Tapestry5HowToAddBindingPrefixCycle";>cycle
 binding prefix</a>, or with CSS: .rowClass:nth-child(even) {background-color: 
#e8e8e8;}</p></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Output and Messages</p></th><th colspan="
 1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Escaped HTML from property</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&lt;h:outputText 
value="myBean.myValue"/&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>${myValue}</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Raw HTML from property</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>#{myBean.myValue}</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/OutputRaw.html";>&lt;t:outputRaw
 value="myValue"/&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Error messages</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:message&gt; and &lt;h:messages&gt;</p></td><td 
colspan="1" row
 span="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Error.html";>&lt;t:error&gt;</a>
 and <a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Errors.html";>&lt;t:errors&gt;</a>
 (for forms) or <a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Alerts.html";>&lt;t:alerts&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Image display</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:graphicImage&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><em>use standard &lt;img&gt; tag, but see 
<a href="assets.html">Assets</a></em></p></td></tr><tr><th colspan="1" 
rowspan="1" class="confluenceTh"><p>Conditionals and Looping</p></th><th 
colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" 
rowspan="1" cla
 ss="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Render-time loop</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;ui:repeat&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Loop.html";>&lt;t:loop&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Compile-time loop</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&lt;c:forEach&gt;</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Loop.html";>&lt;t:loop&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Conditional</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&lt;c:if 
test="#{myBean.myValue}"&gt;</p></td><td colspan="1" rowspan="1" class="confluen
 ceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html";>&lt;t:if
 test="myValue"&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Conditional</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;ui:fragment 
rendered="#{myBean.someCondition}"/&gt;...&lt;/ui:fragment&gt;</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html";>&lt;t:if
 test="someCondition"&gt;...&lt;/t:if&gt;</a></p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Switch</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;c:choose&gt;&lt;c:when ... 
&gt;&lt;/c:choose&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>See <a href="switching-cases.html">Switching 
Cases</a></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Ser
 ver-side comment</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;ui:remove&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a 
href="component-templates.html">&lt;t:remove&gt;</a></p></td></tr><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Links and Buttons</p></th><th 
colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" 
rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Navigational link</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&lt;h:link 
outcome="nextpage.xhtml"/&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/PageLink.html";>&lt;t:pagelink
 page="nextpage"/&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Event-triggering link, without form 
submission</p></td><td colspan="1" rowspan="
 1" class="confluenceTd"><p><em>not available</em></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/ActionLink.html";>&lt;t:actionLink&gt;</a>
 or <a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/EventLink.html";>&lt;t:eventLink&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Form submission 
link</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:commandLink&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/LinkSubmit.html";>&lt;t:linkSubmit&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Form submission 
button</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:commandButton&gt;</p></td><t
 d colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Submit.html";>&lt;t:submit&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Link to Javascript 
file</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:outputScript&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><em>&lt;script&gt; or use @Import in 
component class</em></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Link to CSS file</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:outputStylesheet&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><em>&lt;style&gt; or use @Import in 
component class</em></p></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Grids, Tables and Trees</p></th><th colspan="1" 
rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><
 p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Tabular data in &lt;table&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&lt;h:datatable&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Grid.html";>&lt;t:grid&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Table used for 
layout</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:panelGrid&gt; with 
&lt;h:panelGroup&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><em>use standard &lt;table&gt; 
tag</em></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Hierarchical tree</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><em>depends on component library</em></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/cur
 
rent/apidocs/org/apache/tapestry5/corelib/components/Tree.html">&lt;t:tree&gt;</a></p></td></tr><tr><th
 colspan="1" rowspan="1" class="confluenceTh"><p>Form 
Tags/Components</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Form</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:form&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Form.html";>&lt;t:form&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Single-line text input 
field</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:inputText&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corel
 ib/components/TextField.html">&lt;t:textField&gt;</a></p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Password field</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:inputSecret&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/PasswordField.html";>&lt;t:passwordfield&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Select menu</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:selectOneMenu&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Select.html";>&lt;t:select&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Checkbox</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:selectBooleanCheckbox&gt;</p></td><td 
 colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Checkbox.html";>&lt;t:checkbox&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Checkbox list</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:selectManyCheckbox&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Checklist.html";>&lt;t:checklist&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Radio button list</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:selectOneRadio&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/RadioGroup.html";>&lt;t:radioGroup&gt;</a>
 with <a class="external
 -link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Radio.html";>&lt;t:radio&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Multiple select 
menu</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:selectManyListbox&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><em>not available</em> (but see Palette and 
Checklist)</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Hidden field</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:inputHidden&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Hidden.html";>&lt;t:hidden&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>textarea tag</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:inputTextarea&gt;</p></td><td colspan="1" 
rowspan="1" cl
 ass="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/TextArea.html";>&lt;t:textArea&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Label tag</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:outputLabel 
for="..."&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a 
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Label.html";>&lt;t:label
 for="..."&gt;</a></p></td></tr></tbody></table></div><p>Some important 
notes:</p><ul><li>With Tapestry, you don't use the ${...} syntax with 
parameters of components. Just use a bare expression within the quotes. For 
example: &lt;t:textfield value="myProperty"&gt; instead of &lt;t:textfield 
value="${myProperty}"&gt;, because in the latter case the expression is 
converted to a read-only string before the textfield component gets 
it.</li></ul><h2 id="T
 apestryforJSFUsers-HelloWorldComparison">Hello World Comparison</h2><p>Faces 
templates and Tapestry templates are superficially quite similar.</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>JSF template 
(helloworld.xhtml)</b></div><div class="codeContent panelContent pdl">
+<p>Since almost all modern JSF applications use Facelets as their view 
technology, we assume the use of Facelets here when discussing JSF 
features.</p><p>JSF is a rich, mature web framework specification, and there 
are lots of smart people who use it productively. This guide isn't intended as 
a pro-versus-con comparison or as advocacy of any kind. Instead, it just 
attempts to make transitions between the two frameworks easier, regardless of 
the reason for doing so.</p><h2 
id="TapestryforJSFUsers-Side-by-sideComparison">Side-by-side 
Comparison</h2><p>JSF and Tapestry have a lot of superficial similarities, so 
the first steps in that transition are all about relating similar concepts, 
terms and components in your mind:</p><div class="table-wrap"><table 
class="table table-bordered table-responsive"><tbody><tr><th colspan="1" 
rowspan="1" class="confluenceTh"><p>Concepts &amp; Terminology</p></th><th 
colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" 
rowspan="1" 
 class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Java class associated with a page or 
component</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"Backing 
Bean"</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"<a 
href="component-classes.html">Component Class</a>"</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Component 
attributes/parameters</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>"attributes"</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>"<a 
href="component-parameters.html">parameters</a>"</p></td></tr><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Common 
Attributes/Parameters</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>HTML Attribute used for invisible 
instrumentation</p></td><td colspan="
 1" rowspan="1" class="confluenceTd"><p>jsfc="someComponentType"</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a 
href="component-templates.html">t:type="someComponentType"</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>CSS "class" attribute 
name</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>styleClass</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>class</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Alternating "zebra" striped rows</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>rowclasses="class1,class2"</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>class="${cycle:class1,class2}" using <a 
class="external-link" 
href="https://wiki.apache.org/tapestry/Tapestry5HowToAddBindingPrefixCycle";>cycle
 binding prefix</a>, or with CSS: .rowClass:nth-child(even) {background-color: 
#e8e8e8;}</p></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Output and Messages</p><
 /th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Escaped HTML from 
property</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:outputText 
value="myBean.myValue"/&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>${myValue}</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Raw HTML from property</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>#{myBean.myValue}</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/OutputRaw.html";>&lt;t:outputRaw
 value="myValue"/&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Error messages</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:message&gt; and &lt;h:messages&gt;</p></td><t
 d colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Error.html";>&lt;t:error&gt;</a>
 and <a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Errors.html";>&lt;t:errors&gt;</a>
 (for forms) or <a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Alerts.html";>&lt;t:alerts&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Image display</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:graphicImage&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><em>use standard &lt;img&gt; tag, but see 
<a href="assets.html">Assets</a></em></p></td></tr><tr><th colspan="1" 
rowspan="1" class="confluenceTh"><p>Conditionals and Looping</p></th><th 
colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1
 " rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Render-time loop</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&lt;ui:repeat&gt;</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Loop.html";>&lt;t:loop&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Compile-time loop</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&lt;c:forEach&gt;</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Loop.html";>&lt;t:loop&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Conditional</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&lt;c:if 
test="#{myBean.myValue}"&gt;</p></td><td colspan="1" rowspan="1
 " class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html";>&lt;t:if
 test="myValue"&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Conditional</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;ui:fragment 
rendered="#{myBean.someCondition}"/&gt;...&lt;/ui:fragment&gt;</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html";>&lt;t:if
 test="someCondition"&gt;...&lt;/t:if&gt;</a></p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Switch</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;c:choose&gt;&lt;c:when ... 
&gt;&lt;/c:choose&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>See <a href="switching-cases.html">Switching 
Cases</a></p></td></tr><tr><td colspan="1" rowspan="1" class="con
 fluenceTd"><p>Server-side comment</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;ui:remove&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a 
href="component-templates.html">&lt;t:remove&gt;</a></p></td></tr><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Links and Buttons</p></th><th 
colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" 
rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Navigational link</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&lt;h:link 
outcome="nextpage.xhtml"/&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/PageLink.html";>&lt;t:pagelink
 page="nextpage"/&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Event-triggering link, without form 
submission</p></td><td cols
 pan="1" rowspan="1" class="confluenceTd"><p><em>not available</em></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/ActionLink.html";>&lt;t:actionLink&gt;</a>
 or <a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/EventLink.html";>&lt;t:eventLink&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Form submission 
link</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:commandLink&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/LinkSubmit.html";>&lt;t:linkSubmit&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Form submission 
button</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:commandButt
 on&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a 
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Submit.html";>&lt;t:submit&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Link to Javascript 
file</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:outputScript&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><em>&lt;script&gt; or use @Import in 
component class</em></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Link to CSS file</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:outputStylesheet&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><em>&lt;style&gt; or use @Import in 
component class</em></p></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Grids, Tables and Trees</p></th><th colspan="1" 
rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" 
class
 ="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Tabular data in &lt;table&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&lt;h:datatable&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Grid.html";>&lt;t:grid&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Table used for 
layout</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:panelGrid&gt; with 
&lt;h:panelGroup&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><em>use standard &lt;table&gt; 
tag</em></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Hierarchical tree</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><em>depends on component library</em></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapest
 
ry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Tree.html">&lt;t:tree&gt;</a></p></td></tr><tr><th
 colspan="1" rowspan="1" class="confluenceTh"><p>Form 
Tags/Components</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Form</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:form&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Form.html";>&lt;t:form&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Single-line text input 
field</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:inputText&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apach
 
e/tapestry5/corelib/components/TextField.html">&lt;t:textField&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Password field</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:inputSecret&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/PasswordField.html";>&lt;t:passwordfield&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Select menu</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:selectOneMenu&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Select.html";>&lt;t:select&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Checkbox</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectBooleanCheckbox
 &gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a 
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Checkbox.html";>&lt;t:checkbox&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Checkbox list</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:selectManyCheckbox&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Checklist.html";>&lt;t:checklist&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Radio button list</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:selectOneRadio&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/RadioGroup.html";>&lt;t:radioGroup&gt;</a>
 with <
 a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Radio.html";>&lt;t:radio&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Multiple select 
menu</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:selectManyListbox&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><em>not available</em> (but see Palette and 
Checklist)</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Hidden field</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:inputHidden&gt;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Hidden.html";>&lt;t:hidden&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>textarea tag</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;h:inputTextarea&gt;</p></td><td colspan="
 1" rowspan="1" class="confluenceTd"><p><a class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/TextArea.html";>&lt;t:textArea&gt;</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p>Label tag</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:outputLabel 
for="..."&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a 
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Label.html";>&lt;t:label
 for="..."&gt;</a></p></td></tr></tbody></table></div><p>Some important 
notes:</p><ul><li>With Tapestry, you don't use the ${...} syntax with 
parameters of components. Just use a bare expression within the quotes. For 
example: &lt;t:textfield value="myProperty"&gt; instead of &lt;t:textfield 
value="${myProperty}"&gt;, because in the latter case the expression is 
converted to a read-only string before the textfield component gets it.</
 li></ul><h2 id="TapestryforJSFUsers-HelloWorldComparison">Hello World 
Comparison</h2><p>Faces templates and Tapestry templates are superficially 
quite similar.</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>JSF template 
(helloworld.xhtml)</b></div><div class="codeContent panelContent pdl">
 <pre><code class="language-xml">&lt;html xmlns="http://www.w3.org/1999/xhtml";
         xmlns:h="http://java.sun.com/jsf/html"&gt;
   &lt;h:body&gt;
@@ -235,7 +235,7 @@ public class HelloWorldBean {
     }
 }
 </code></pre>
-</div></div></div></div></div></div><h2 
id="TapestryforJSFUsers-Expressionsintemplates">Expressions in 
templates</h2><p>JSF uses the Unified Expression Language with the #{...} or 
${...} syntax for accessing Backing Bean properties. For its part, Tapestry 
uses the ${...} syntax with a similar but intentionally limited expression 
language called <a href="property-expressions.html">Property Expressions</a>. 
Both allow easy access to properties via the usual JavaBean conventions, but 
with Tapestry you don't have to specify which class the expression starts at 
(because it always starts at the component class corresponding to the 
template). Some comparisons:</p><div class="table-wrap"><table class="table 
table-bordered"><tbody><tr><td colspan="1" rowspan="1" 
class="confluenceTd"></td><th colspan="1" rowspan="1" 
class="confluenceTh"><p>JSF Syntax</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry Syntax</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p
 >Property (calls getEmployeeName() or setEmployeeName())</p></td><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p>#{employeeBean.employeeName}</p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p>${employeeName}</p></td></tr><tr><td 
 >colspan="1" rowspan="1" class="confluenceTd"><p>Boolean property (calls 
 >isHourly() or setHourly())</p></td><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p>#{employeeBean.hourly}</p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p>${hourly}</p></td></tr><tr><td 
 >colspan="1" rowspan="1" class="confluenceTd"><p>Property chain</p></td><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p>#{employeeBean.address.street}</p></td><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p>${address.street}</p></td></tr><tr><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p>Null-safe property chain</p></td><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p>#{employeeBean.address.street}</p></td><td 
 >colspan="1" rowspan="1" class="confluenceTd"><p>${ad
 dress?.street}</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>5th element in a List</p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p>#{employeeBean.employees[5].name}</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>${employees.get(5).name}</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Negation</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>#{! 
employeeBean.hourly}</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>${! hourly}</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Arithmetic &amp; relational 
operators</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>+-*/% div 
mod</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not 
available</em></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Relational operators</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>== != ne &lt; lt &gt; gt &lt;= le &gt;= 
ge</p></td><td colspan=
 "1" rowspan="1" class="confluenceTd"><p><em>not 
available</em></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Ternary operator</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>#{myBean.foo &lt; 0 ? 'bar' : 'baz'}</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><em>not 
available</em></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Method calling</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>#{myBean.employees.size()}</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>${employees.size()}</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Iterated Range</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><em>not 
avaialble</em></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>${1..10}</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Iterated Range (calculated)</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><em>not avaialble</em></
 p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>${1..groupList.size()}</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>List</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><em>not available</em></p></td><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></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Map</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><em>not available</em></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>${ { 'id':'4039','type':'hourly' } 
}</p></td></tr></tbody></table></div><p>Features shown as <em>not 
available</em> above are absent by design, because (in both Tapestry and JSF) 
it is considered best to keep complex logic in the component class rather than 
in the template.</p><h2 
id="TapestryforJSFUsers-EventHandling&amp;PageNavigation">Event Handling &amp; 
Page Navig
 ation</h2><h3 id="TapestryforJSFUsers-Eventhandling">Event handling</h3><p>In 
JSF, you specify the event via the <code>action</code> parameter (for example, 
&lt;h:commandButton value="Submit" action="employeeBean.saveChanges"&gt;). For 
Tapestry, event handler methods are found by method naming conventions 
(onSomeEvent() or by method annotations (@Event), based on a combination of the 
"t:id" attribute and event name, and the action name used depends on the 
component. For example, the "&lt;t:actionlink&gt;" component in Tapestry emits 
an "action" event when clicked, and you handle that event in your "onAction()" 
method.</p><h2 id="TapestryforJSFUsers-Validation">Validation</h2><p>Tapestry 
applications can use JSR 303 Bean Validation annotations that JSF users should 
be familiar with:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
+</div></div></div></div></div></div><h2 
id="TapestryforJSFUsers-Expressionsintemplates">Expressions in 
templates</h2><p>JSF uses the Unified Expression Language with the #{...} or 
${...} syntax for accessing Backing Bean properties. For its part, Tapestry 
uses the ${...} syntax with a similar but intentionally limited expression 
language called <a href="property-expressions.html">Property Expressions</a>. 
Both allow easy access to properties via the usual JavaBean conventions, but 
with Tapestry you don't have to specify which class the expression starts at 
(because it always starts at the component class corresponding to the 
template). Some comparisons:</p><div class="table-wrap"><table class="table 
table-bordered table-responsive"><tbody><tr><td colspan="1" rowspan="1" 
class="confluenceTd"></td><th colspan="1" rowspan="1" 
class="confluenceTh"><p>JSF Syntax</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry Syntax</p></th></tr><tr><td colspan="1" 
rowspan="1" class=
 "confluenceTd"><p>Property (calls getEmployeeName() or 
setEmployeeName())</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>#{employeeBean.employeeName}</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>${employeeName}</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Boolean property (calls 
isHourly() or setHourly())</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>#{employeeBean.hourly}</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>${hourly}</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Property chain</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>#{employeeBean.address.street}</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>${address.street}</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Null-safe property chain</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>#{employeeBean.address.street}</p></td><td colspan="1" 
rowspan="1" class="conf
 luenceTd"><p>${address?.street}</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>5th element in a List</p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p>#{employeeBean.employees[5].name}</p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p>${employees.get(5).name}</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Negation</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>#{! 
employeeBean.hourly}</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>${! hourly}</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Arithmetic &amp; relational 
operators</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>+-*/% div 
mod</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not 
available</em></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Relational operators</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>== != ne &lt; lt &gt; gt &lt;= le &gt;= 
ge</p>
 </td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not 
available</em></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Ternary operator</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>#{myBean.foo &lt; 0 ? 'bar' : 'baz'}</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><em>not 
available</em></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Method calling</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>#{myBean.employees.size()}</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>${employees.size()}</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Iterated Range</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><em>not 
avaialble</em></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>${1..10}</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Iterated Range (calculated)</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><em>not
  avaialble</em></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>${1..groupList.size()}</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>List</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><em>not available</em></p></td><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></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Map</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><em>not available</em></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>${ { 'id':'4039','type':'hourly' } 
}</p></td></tr></tbody></table></div><p>Features shown as <em>not 
available</em> above are absent by design, because (in both Tapestry and JSF) 
it is considered best to keep complex logic in the component class rather than 
in the template.</p><h2 
id="TapestryforJSFUsers-EventHandling&amp;PageNavigation">Event Handling
  &amp; Page Navigation</h2><h3 id="TapestryforJSFUsers-Eventhandling">Event 
handling</h3><p>In JSF, you specify the event via the <code>action</code> 
parameter (for example, &lt;h:commandButton value="Submit" 
action="employeeBean.saveChanges"&gt;). For Tapestry, event handler methods are 
found by method naming conventions (onSomeEvent() or by method annotations 
(@Event), based on a combination of the "t:id" attribute and event name, and 
the action name used depends on the component. For example, the 
"&lt;t:actionlink&gt;" component in Tapestry emits an "action" event when 
clicked, and you handle that event in your "onAction()" method.</p><h2 
id="TapestryforJSFUsers-Validation">Validation</h2><p>Tapestry applications can 
use JSR 303 Bean Validation annotations that JSF users should be familiar 
with:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
 <pre><code class="language-java">public class Employee {
     @Validate("required,minlength=2,maxlength=100")
     private String lastName;
@@ -295,4 +295,4 @@ public class HelloWorldBean {
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: 
websites/production/tapestry/content/tapestry-inversion-of-control-container.html
==============================================================================
--- 
websites/production/tapestry/content/tapestry-inversion-of-control-container.html
 (original)
+++ 
websites/production/tapestry/content/tapestry-inversion-of-control-container.html
 Fri May  1 00:29:08 2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Tapestry Inversion of Control Container - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -196,4 +196,4 @@
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: 
websites/production/tapestry/content/tapestry-inversion-of-control-faq.html
==============================================================================
--- websites/production/tapestry/content/tapestry-inversion-of-control-faq.html 
(original)
+++ websites/production/tapestry/content/tapestry-inversion-of-control-faq.html 
Fri May  1 00:29:08 2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Tapestry Inversion of Control FAQ - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -143,11 +143,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="TapestryInversionofControlFAQ-TapestryInversionofControlContainer">Tapestry 
Inversion of Control Container</h1><p>Main article: <a 
href="tapestry-inversion-of-control-faq.html">Tapestry IoC</a></p><h2 
id="TapestryInversionofControlFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1588040501717 {padding: 0px;}
-div.rbtoc1588040501717 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1588040501717 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1588292533787 {padding: 0px;}
+div.rbtoc1588292533787 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1588292533787 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1588040501717">
+/*]]>*/</style></p><div class="toc-macro rbtoc1588292533787">
 <ul class="toc-indentation"><li><a 
href="#TapestryInversionofControlFAQ-WhydoIneedtodefineaninterfaceformyservices?Whycan'tIjustusetheclassitself?">Why
 do I need to define an interface for my services? Why can't I just use the 
class itself?</a></li><li><a 
href="#TapestryInversionofControlFAQ-Myservicestartsathread;howdoIknowwhentheapplicationisshuttingdown,tostopthatthread?">My
 service starts a thread; how do I know when the application is shutting down, 
to stop that thread?</a></li><li><a 
href="#TapestryInversionofControlFAQ-HowdoImakemyservicestartupwiththerestoftheapplication,ratherthanlazily?">How
 do I make my service startup with the rest of the application, rather than 
lazily?</a></li></ul>
 </div><div class="aui-label" style="float:right" title="Related Articles">
 
@@ -285,4 +285,4 @@ div.rbtoc1588040501717 li {margin-left:
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: websites/production/tapestry/content/tapestry-ioc-configuration.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-configuration.html 
(original)
+++ websites/production/tapestry/content/tapestry-ioc-configuration.html Fri 
May  1 00:29:08 2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Tapestry IoC Configuration - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -374,4 +374,4 @@ public static void arbitraryMethodName(M
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: websites/production/tapestry/content/tapestry-ioc-decorators.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-decorators.html (original)
+++ websites/production/tapestry/content/tapestry-ioc-decorators.html Fri May  
1 00:29:08 2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Tapestry IoC Decorators - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -353,4 +353,4 @@ public class AppModule
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: websites/production/tapestry/content/tapestry-ioc-modules.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-modules.html (original)
+++ websites/production/tapestry/content/tapestry-ioc-modules.html Fri May  1 
00:29:08 2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Tapestry IoC Modules - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -271,4 +271,4 @@ public @interface Builtin
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: websites/production/tapestry/content/tapestry-ioc-overview.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-overview.html (original)
+++ websites/production/tapestry/content/tapestry-ioc-overview.html Fri May  1 
00:29:08 2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Tapestry IoC Overview - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -355,4 +355,4 @@
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: websites/production/tapestry/content/tapestry-tutorial.html
==============================================================================
--- websites/production/tapestry/content/tapestry-tutorial.html (original)
+++ websites/production/tapestry/content/tapestry-tutorial.html Fri May  1 
00:29:08 2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Tapestry Tutorial - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -258,4 +258,4 @@
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: websites/production/tapestry/content/templating-and-markup-faq.html
==============================================================================
--- websites/production/tapestry/content/templating-and-markup-faq.html 
(original)
+++ websites/production/tapestry/content/templating-and-markup-faq.html Fri May 
 1 00:29:08 2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Templating and Markup FAQ - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -143,11 +143,11 @@
             <!-- /// Content Start -->
             <div id="content">
                             <div id="ConfluenceContent"><h1 
id="TemplatingandMarkupFAQ-TemplatingandMarkup">Templating and 
Markup</h1><p>Main Article: <a href="component-templates.html">Component 
Templates</a></p><h2 
id="TemplatingandMarkupFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1588040605326 {padding: 0px;}
-div.rbtoc1588040605326 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1588040605326 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1588292635298 {padding: 0px;}
+div.rbtoc1588292635298 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1588292635298 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1588040605326">
+/*]]>*/</style></p><div class="toc-macro rbtoc1588292635298">
 <ul class="toc-indentation"><li><a 
href="#TemplatingandMarkupFAQ-WhydoIgetaSAXParseExceptionwhenIuseanHTMLentity,suchas&amp;nbsp;inmytemplate?">Why
 do I get a SAXParseException when I use an HTML entity, such as &amp;nbsp; in 
my template?</a></li><li><a 
href="#TemplatingandMarkupFAQ-Whydosomeimagesinmypageshowupasbrokenlinks?">Why 
do some images in my page show up as broken links?</a></li><li><a 
href="#TemplatingandMarkupFAQ-What'sthedifferencebetweenidandt:id?">What's the 
difference between id and t:id?</a></li><li><a 
href="#TemplatingandMarkupFAQ-WhydomyimagesandstylesheetsendupwithaweirdURLslike/assets/meta/zeea17aee26bc0cae/layout/layout.css?">Why
 do my images and stylesheets end up with a weird URLs like 
/assets/meta/zeea17aee26bc0cae/layout/layout.css?</a></li><li><a 
href="#TemplatingandMarkupFAQ-HowdoIaddaCSSclasstoaTapestrycomponent?">How do I 
add a CSS class to a Tapestry component?</a></li></ul>
 </div><h2 
id="TemplatingandMarkupFAQ-WhydoIgetaSAXParseExceptionwhenIuseanHTMLentity,suchas&amp;nbsp;inmytemplate?">Why
 do I get a SAXParseException when I use an HTML entity, such as 
<code>&amp;nbsp;</code> in my template?</h2><p>Tapestry uses a standard SAX 
parser to read your templates. This means that your templates must be <em>well 
formed</em>: open and close tags must balance, attribute values must be quoted, 
and entities must be declared. The easiest way to accomplish this is to add a 
DOCTYPE to your the top of your template:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre><code class="language-xml">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
1.0 Strict//EN"
@@ -247,4 +247,4 @@ div.rbtoc1588040605326 li {margin-left:
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: websites/production/tapestry/content/test-page-2.html
==============================================================================
--- websites/production/tapestry/content/test-page-2.html (original)
+++ websites/production/tapestry/content/test-page-2.html Fri May  1 00:29:08 
2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Test Page 2 - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -240,4 +240,4 @@
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: websites/production/tapestry/content/test-page.html
==============================================================================
--- websites/production/tapestry/content/test-page.html (original)
+++ websites/production/tapestry/content/test-page.html Fri May  1 00:29:08 2020
@@ -19,24 +19,24 @@
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="keywords" content="tapestry, apache, apache tapestry, frameowrk, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
+  <meta name="keywords" content="tapestry, apache, apache tapestry, framework, 
java, web, component, open source, application, dynamic, scalable, robust, 
servlet">
   <meta name="description" content="Apache Tapestry is a open-source 
component-oriented framework for creating dynamic, robust, highly scalable web 
applications in Java. Tapestry complements and builds upon the standard Java 
Servlet API, and so it works in any servlet container or application server.">
 
   <title>
           Test Page - Apache Tapestry
       </title>
 
-  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="images/apache-tapestry-5-icon-144.png">
-  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="images/apache-tapestry-5-icon-114.png">
-  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="images/apache-tapestry-5-icon-72.png">
-  <link rel="apple-touch-icon-precomposed" 
href="images/apache-tapestry-5-icon-57.png">
-  <link rel="shortcut icon" href="images/apache-tapestry-5-icon-32.png">
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/images/apache-tapestry-5-icon-144.png">
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/images/apache-tapestry-5-icon-114.png">
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/images/apache-tapestry-5-icon-72.png">
+  <link rel="apple-touch-icon-precomposed" 
href="/images/apache-tapestry-5-icon-57.png">
+  <link rel="shortcut icon" href="/images/apache-tapestry-5-icon-32.png">
 
   <link rel="stylesheet" 
href="https://fonts.googleapis.com/css2?family=Sarabun:ital,wght@0,400;0,700;1,400;1,700&display=swap";>
 
   <link rel="stylesheet" 
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"; 
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
 crossorigin="anonymous">
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css";>
   <link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.20.0/themes/prism.min.css";>
-    <link rel="stylesheet" href="/styles/main.css">
+  <link rel="stylesheet" href="/styles/main.css">
 
   <script type="text/javascript">
     if (window.location.protocol === 'http:' && window.location.hostname !== 
'localhost') {
@@ -55,7 +55,7 @@
     ga('create', 'UA-400821-1', 'auto');
     ga('send', 'pageview');
   </script>
-  <script async src='https://www.google-analytics.com/analytics.js'></script>
+  <script async src="https://www.google-analytics.com/analytics.js";></script>
 </head>
 <body>
   <!-- /// Navigation Start -->
@@ -239,4 +239,4 @@ deck.startHidden=false
 </footer><br clear="none"></p><p><br clear="none"></p></div>
   <!-- /// Footer End -->
 </body>
-</html>
\ No newline at end of file
+</html>


Reply via email to