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 & 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><h:outputText
value="myBean.myValue"/></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"><t:outputRaw
value="myValue"/></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><h:message> and <h:messages></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"><t:error></a>
and <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Errors.html"><t:errors></a>
(for forms) or <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Alerts.html"><t:alerts></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><h:graphicImage></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><em>use standard <img> 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><ui:repeat></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"><t:loop></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><c:forEach></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"><t:loop></a></p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>Conditional</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><c:if
test="#{myBean.myValue}"></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"><t:if
test="myValue"></a></p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Conditional</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><ui:fragment
rendered="#{myBean.someCondition}"/>...</ui:fragment></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"><t:if
test="someCondition">...</t:if></a></p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>Switch</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><c:choose><c:when ...
></c:choose></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><ui:remove></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><a
href="component-templates.html"><t:remove></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><h:link
outcome="nextpage.xhtml"/></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"><t:pagelink
page="nextpage"/></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"><t:actionLink></a>
or <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/EventLink.html"><t:eventLink></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><h:commandLink></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"><t:linkSubmit></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><h:commandButton></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"><t:submit></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><h:outputScript></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><em><script> 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><h:outputStylesheet></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><em><style> 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 <table></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><h:datatable></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"><t:grid></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><h:panelGrid> with
<h:panelGroup></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><em>use standard <table>
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"><t:tree></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><h:form></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"><t:form></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><h:inputText></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"><t:textField></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><h:inputSecret></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"><t:passwordfield></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><h:selectOneMenu></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"><t:select></a></p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>Checkbox</p></td><td
colspan="1" rowspan="1"
class="confluenceTd"><p><h:selectBooleanCheckbox></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"><t:checkbox></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><h:selectManyCheckbox></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"><t:checklist></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><h:selectOneRadio></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"><t:radioGroup></a>
with <a class="external
-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Radio.html"><t:radio></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><h:selectManyListbox></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><h:inputHidden></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"><t:hidden></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><h:inputTextarea></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"><t:textArea></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><h:outputLabel
for="..."></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"><t:label
for="..."></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: <t:textfield value="myProperty"> instead of <t:textfield
value="${myProperty}">, 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 & 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><h:outputText
value="myBean.myValue"/></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"><t:outputRaw
value="myValue"/></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><h:message> and <h:messages></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"><t:error></a>
and <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Errors.html"><t:errors></a>
(for forms) or <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Alerts.html"><t:alerts></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><h:graphicImage></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><em>use standard <img> 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><ui:repeat></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"><t:loop></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><c:forEach></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"><t:loop></a></p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>Conditional</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><c:if
test="#{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/If.html"><t:if
test="myValue"></a></p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Conditional</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><ui:fragment
rendered="#{myBean.someCondition}"/>...</ui:fragment></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"><t:if
test="someCondition">...</t:if></a></p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>Switch</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><c:choose><c:when ...
></c:choose></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><ui:remove></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><a
href="component-templates.html"><t:remove></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><h:link
outcome="nextpage.xhtml"/></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"><t:pagelink
page="nextpage"/></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"><t:actionLink></a>
or <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/EventLink.html"><t:eventLink></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><h:commandLink></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"><t:linkSubmit></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><h:commandButt
on></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"><t:submit></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><h:outputScript></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><em><script> 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><h:outputStylesheet></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><em><style> 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 <table></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><h:datatable></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"><t:grid></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><h:panelGrid> with
<h:panelGroup></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><em>use standard <table>
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"><t:tree></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><h:form></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"><t:form></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><h:inputText></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"><t:textField></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><h:inputSecret></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"><t:passwordfield></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><h:selectOneMenu></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"><t:select></a></p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>Checkbox</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><h:selectBooleanCheckbox
></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"><t:checkbox></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><h:selectManyCheckbox></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"><t:checklist></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><h:selectOneRadio></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"><t:radioGroup></a>
with <
a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Radio.html"><t:radio></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><h:selectManyListbox></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><h:inputHidden></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"><t:hidden></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><h:inputTextarea></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"><t:textArea></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><h:outputLabel
for="..."></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"><t:label
for="..."></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: <t:textfield value="myProperty"> instead of <t:textfield
value="${myProperty}">, 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"><html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>
@@ -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 & 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 > gt <= le >=
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 < 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&PageNavigation">Event Handling &
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,
<h:commandButton value="Submit" action="employeeBean.saveChanges">). 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 "<t:actionlink>" 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 & 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 > gt <= le >=
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 < 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&PageNavigation">Event Handling
& 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, <h:commandButton value="Submit"
action="employeeBean.saveChanges">). 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
"<t:actionlink>" 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&nbsp;inmytemplate?">Why
do I get a SAXParseException when I use an HTML entity, such as &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&nbsp;inmytemplate?">Why
do I get a SAXParseException when I use an HTML entity, such as
<code>&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"><!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>