Modified: websites/production/tapestry/content/component-events-faq.html
==============================================================================
--- websites/production/tapestry/content/component-events-faq.html (original)
+++ websites/production/tapestry/content/component-events-faq.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
@@ -143,11 +144,11 @@
<!-- /// Content Start -->
<div id="content">
<div id="ConfluenceContent"><h1
id="ComponentEventsFAQ-ComponentEvents">Component Events</h1><p>Main Article:
<a href="component-events.html">Component Events</a></p><h2
id="ComponentEventsFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1711667532134 {padding: 0px;}
-div.rbtoc1711667532134 ul {margin-left: 0px;}
-div.rbtoc1711667532134 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1712222140924 {padding: 0px;}
+div.rbtoc1712222140924 ul {margin-left: 0px;}
+div.rbtoc1712222140924 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1711667532134">
+/*]]>*/</style></p><div class="toc-macro rbtoc1712222140924">
<ul class="toc-indentation"><li><a
href="#ComponentEventsFAQ-WhydoesTapestrysendaredirectafteraformissubmitted?">Why
does Tapestry send a redirect after a form is submitted?</a></li><li><a
href="#ComponentEventsFAQ-IspecifiedazoneinmyActionLink/EventLink,sowhydoesn'tmyeventfireviaajax(request.isXHR()isfalse)?">I
specified a zone in my ActionLink/EventLink, so why doesn't my event fire via
ajax (request.isXHR() is false)?</a></li></ul>
</div><h2
id="ComponentEventsFAQ-WhydoesTapestrysendaredirectafteraformissubmitted?">Why
does Tapestry send a redirect after a form is submitted?</h2><p>This is an
extension of the <a class="external-link"
href="http://en.wikipedia.org/wiki/Post/Redirect/Get"
rel="nofollow">Post/Redirect/Get</a> approach. It ensures that after an
operation that updates server-side state, such as a form submission, if the
user resubmits the resulting page, the operation is <strong>not</strong>
performed a second time; instead just the results of the operation, reflecting
the changed server-side state, is re-rendered.</p><p>This has the unwanted
requirement that any data needed to render the response must persist between
the event request (the form submission) and the render request; this often
means that fields must be annotated with @<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Persist.html">Persist</a>.
Modified: websites/production/tapestry/content/component-events.html
==============================================================================
--- websites/production/tapestry/content/component-events.html (original)
+++ websites/production/tapestry/content/component-events.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/component-libraries.html
==============================================================================
--- websites/production/tapestry/content/component-libraries.html (original)
+++ websites/production/tapestry/content/component-libraries.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/component-mixins.html
==============================================================================
--- websites/production/tapestry/content/component-mixins.html (original)
+++ websites/production/tapestry/content/component-mixins.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
@@ -187,7 +188,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="component-parameters.html">Component
Parameters</a>
+ <a href="component-cheat-sheet.html">Component Cheat
Sheet</a>
</div>
@@ -196,7 +197,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="component-cheat-sheet.html">Component Cheat
Sheet</a>
+ <a href="component-parameters.html">Component
Parameters</a>
</div>
Modified: websites/production/tapestry/content/component-parameters.html
==============================================================================
--- websites/production/tapestry/content/component-parameters.html (original)
+++ websites/production/tapestry/content/component-parameters.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
@@ -247,11 +248,11 @@
</div></div><p>A component may have any number of parameters. Each parameter
has a specific name, a specific Java type (which may be a primitive value), and
may be <em>optional</em> or <em>required</em>.</p><p>Within a component class,
parameters are declared by using the @<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Parameter.html">Parameter</a>
annotation on a private field, as we'll see below.</p><p><span
class="confluence-anchor-link"
id="ComponentParameters-bindingparameters"></span></p><h1
id="ComponentParameters-ParameterBindings">Parameter Bindings</h1><p>In
Tapestry, a parameter is not a slot into which data is pushed: it is a
<em>connection</em> between a field of the component (marked with the
@Parameter annotation) and a property or resource of the component's container.
(Components can be nested, so the container can be either the page or another
component.)</p><div class="navmenu" style="float:right; backgro
und:white; margin:3px; padding:3px">
<div class="panel" style="border-width: 1px;"><div class="panelHeader"
style="border-bottom-width: 1px;"><b>Contents</b></div><div
class="panelContent">
<style type="text/css">/*<![CDATA[*/
-div.rbtoc1711667508603 {padding: 0px;}
-div.rbtoc1711667508603 ul {margin-left: 0px;}
-div.rbtoc1711667508603 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1712221973700 {padding: 0px;}
+div.rbtoc1712221973700 ul {margin-left: 0px;}
+div.rbtoc1712221973700 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style><div class="toc-macro rbtoc1711667508603">
+/*]]>*/</style><div class="toc-macro rbtoc1712221973700">
<ul class="toc-indentation"><li><a
href="#ComponentParameters-ParameterBindings">Parameter Bindings</a></li><li><a
href="#ComponentParameters-BindingExpressions">Binding
Expressions</a></li><li><a
href="#ComponentParameters-@Parameterannotation">@Parameter
annotation</a></li><li><a
href="#ComponentParameters-Don'tusethe${...}syntax!">Don't use the ${...}
syntax!</a></li><li><a href="#ComponentParameters-InformalParameters">Informal
Parameters</a></li><li><a
href="#ComponentParameters-ParametersAreBi-Directional">Parameters Are
Bi-Directional</a></li><li><a
href="#ComponentParameters-InheritedParameterBindings">Inherited Parameter
Bindings</a></li><li><a
href="#ComponentParameters-ComputedParameterBindingDefaults">Computed Parameter
Binding Defaults</a></li><li><a
href="#ComponentParameters-UnboundParameters">Unbound Parameters</a></li><li><a
href="#ComponentParameters-ParameterTypeCoercion">Parameter Type
Coercion</a></li><li><a href="#ComponentParameters-ParameterNames">Parameter N
ames</a></li><li><a href="#ComponentParameters-DeterminingifBound">Determining
if Bound</a></li><li><a
href="#ComponentParameters-PublishingParameters">Publishing
Parameters</a></li></ul>
</div>
</div></div></div> <p>The connection between a component and a property
(or resource) of its container is called a <em>binding</em>. The binding is
two-way: the component can read the bound property by reading its parameter
field. Likewise, a component that updates its parameter field will update the
bound property.</p><p>This is important in a lot of cases; for example a
TextField component can read <em>and update</em> the property bound to its
value parameter. It reads the value when rendering, but updates the value when
the form is submitted.</p><p>The component listed below is a looping component;
it renders its body a number of times, defined by its <code>start</code> and
<code>end</code> parameters (which set the boundaries of the loop). The
component can update a <code>result</code> parameter bound to a property of its
container; it will automatically count up or down depending on whether
<code>start</code> or <code>end</code> is larger.</p><div class="code panel
pdl" st
yle="border-width: 1px;"><div class="codeContent panelContent pdl">
Modified: websites/production/tapestry/content/component-reference.html
==============================================================================
--- websites/production/tapestry/content/component-reference.html (original)
+++ websites/production/tapestry/content/component-reference.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
@@ -187,11 +188,11 @@
<p></p><p><strong>Contents</strong></p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1680624701132 {padding: 0px;}
-div.rbtoc1680624701132 ul {margin-left: 0px;}
-div.rbtoc1680624701132 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1712222021591 {padding: 0px;}
+div.rbtoc1712222021591 ul {margin-left: 0px;}
+div.rbtoc1712222021591 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1680624701132">
+/*]]>*/</style></p><div class="toc-macro rbtoc1712222021591">
<ul class="toc-indentation"><li><a
href="#ComponentReference-Tapestry-providedComponents">Tapestry-provided
Components</a>
<ul class="toc-indentation"><li><a
href="#ComponentReference-AJAX-specificComponents">AJAX-specific
Components</a></li><li><a
href="#ComponentReference-BeanDisplaying&Editing">Bean Displaying &
Editing</a></li><li><a
href="#ComponentReference-ConditionalandLoopingComponents">Conditional and
Looping Components</a></li><li><a
href="#ComponentReference-FormComponents">Form Components</a></li><li><a
href="#ComponentReference-Grids,TablesandTrees">Grids, Tables and
Trees</a></li><li><a href="#ComponentReference-LinksandButtons">Links and
Buttons</a></li><li><a href="#ComponentReference-OutputandMessages">Output and
Messages</a></li><li><a
href="#ComponentReference-Miscellaneous">Miscellaneous</a></li></ul>
</li><li><a href="#ComponentReference-TapestryMixins">Tapestry
Mixins</a></li><li><a href="#ComponentReference-TapestryPages">Tapestry
Pages</a></li><li><a href="#ComponentReference-BaseComponents">Base
Components</a></li><li><a
href="#ComponentReference-OtherComponentLibraries">Other Component
Libraries</a></li></ul>
Modified: websites/production/tapestry/content/component-rendering.html
==============================================================================
--- websites/production/tapestry/content/component-rendering.html (original)
+++ websites/production/tapestry/content/component-rendering.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/component-report.html
==============================================================================
--- websites/production/tapestry/content/component-report.html (original)
+++ websites/production/tapestry/content/component-report.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/component-templates.html
==============================================================================
--- websites/production/tapestry/content/component-templates.html (original)
+++ websites/production/tapestry/content/component-templates.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
@@ -178,7 +179,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="component-classes.html">Component Classes</a>
+ <a href="component-reference.html">Component
Reference</a>
</div>
@@ -187,7 +188,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="component-reference.html">Component
Reference</a>
+ <a href="component-classes.html">Component Classes</a>
</div>
@@ -223,7 +224,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="component-parameters.html">Component
Parameters</a>
+ <a href="assets.html">Assets</a>
</div>
@@ -232,7 +233,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="assets.html">Assets</a>
+ <a href="component-parameters.html">Component
Parameters</a>
</div>
Modified: websites/production/tapestry/content/configuration.html
==============================================================================
--- websites/production/tapestry/content/configuration.html (original)
+++ websites/production/tapestry/content/configuration.html Thu Apr 4 09:17:08
2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
@@ -142,12 +143,83 @@
<!-- /// Content Start -->
<div id="content">
- <div id="ConfluenceContent"><img
class="wysiwyg-unknown-macro"
src="https://cwiki.apache.org/confluence/plugins/servlet/confluence/placeholder/unknown-macro?name=div&locale=en_GB&version=2"><h1
id="Configuration-ConfiguringTapestry">Configuring Tapestry</h1><p>This page
discusses all the ways in which Tapestry can be configured. Tapestry
applications are configured almost entirely using Java, with very little XML at
all.</p><p><strong>Contents</strong></p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1678158706991 {padding: 0px;}
-div.rbtoc1678158706991 ul {margin-left: 0px;}
-div.rbtoc1678158706991 li {margin-left: 0px;padding-left: 0px;}
+ <div id="ConfluenceContent"><div class="aui-label"
style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+ <div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
+
+ <div class="details">
+ <a href="tapestry-ioc-configuration.html">Tapestry IoC
Configuration</a>
+
+
+ </div>
+ </li><li>
+ <div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
+
+ <div class="details">
+ <a href="response-compression.html">Response
Compression</a>
+
+
+ </div>
+ </li><li>
+ <div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
+
+ <div class="details">
+ <a href="symbols.html">Symbols</a>
+
+
+ </div>
+ </li><li>
+ <div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
+
+ <div class="details">
+ <a
href="application-module-class-cheat-sheet.html">Application Module Class Cheat
Sheet</a>
+
+
+ </div>
+ </li><li>
+ <div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
+
+ <div class="details">
+ <a href="ioc-cookbook-service-configurations.html">IoC
cookbook - Service Configurations</a>
+
+
+ </div>
+ </li><li>
+ <div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
+
+ <div class="details">
+ <a href="configuration.html">Configuration</a>
+
+
+ </div>
+ </li></ul>
+</div>
+
+
+<h1 id="Configuration-ConfiguringTapestry">Configuring Tapestry</h1><p>This
page discusses all the ways in which Tapestry can be configured. Tapestry
applications are configured almost entirely using Java, with very little XML at
all.</p><p><strong>Contents</strong></p><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1712221937435 {padding: 0px;}
+div.rbtoc1712221937435 ul {margin-left: 0px;}
+div.rbtoc1712221937435 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1678158706991">
+/*]]>*/</style></p><div class="toc-macro rbtoc1712221937435">
<ul class="toc-indentation"><li><a
href="#Configuration-XMLconfiguration(web.xml)">XML configuration
(web.xml)</a></li><li><a
href="#Configuration-YourApplication'sModuleClass">Your Application's Module
Class</a></li><li><a
href="#Configuration-ConfigurationSymbolNames">Configuration Symbol
Names</a></li><li><a
href="#Configuration-SettingComponentParameterDefaults">Setting Component
Parameter Defaults</a></li><li><a
href="#Configuration-ConfiguringIgnoredPaths">Configuring Ignored
Paths</a></li><li><a
href="#Configuration-ConfiguringContentTypeMapping">Configuring Content Type
Mapping</a></li><li><a href="#Configuration-SettingExecutionModes">Setting
Execution Modes</a></li><li><a
href="#Configuration-SegregatingApplicationsIntoFolders">Segregating
Applications Into Folders</a></li></ul>
</div><h2 id="Configuration-XMLconfiguration(web.xml)">XML configuration
(web.xml)</h2><p>Tapestry runs on top of the standard Java Servlet API. To the
servlet container, such as Tomcat, Tapestry appears as a <em>servlet
filter</em>. This gives Tapestry great flexibility in matching URLs without
requiring lots of XML configuration.</p><p>Although most configuration is done
with Java, a small but necessary amount of configuration occurs inside the
servlet deployment descriptor, WEB-INF/web.xml. Most of the configuration is
boilerplate, nearly the same for all applications.</p><div class="code panel
pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>web.xml (partial)</b></div><div
class="codeContent panelContent pdl">
<pre><code class="language-xml"><!DOCTYPE web-app
Modified: websites/production/tapestry/content/confluence-site-setup.html
==============================================================================
--- websites/production/tapestry/content/confluence-site-setup.html (original)
+++ websites/production/tapestry/content/confluence-site-setup.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/content-type-and-markup.html
==============================================================================
--- websites/production/tapestry/content/content-type-and-markup.html (original)
+++ websites/production/tapestry/content/content-type-and-markup.html Thu Apr
4 09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/contributors.html
==============================================================================
--- websites/production/tapestry/content/contributors.html (original)
+++ websites/production/tapestry/content/contributors.html Thu Apr 4 09:17:08
2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
@@ -154,7 +155,7 @@
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" href="https://github.com/bobharner"
rel="nofollow">https://github.com/bobharner</a></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>Christophe Cordenier</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>ccordenier</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>committer</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
-</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" rel="nofollow"
href="http://spreadthesource.com">http://spreadthesource.com</a></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>Dan Adams</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>dadams</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>committer</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><div class="content-wrapper">
+</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" href="http://spreadthesource.com"
rel="nofollow">http://spreadthesource.com</a></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>Dan Adams</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>dadams</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>committer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align: right;">[email protected]</div>
</div></td><td colspan="1" rowspan="1"
class="confluenceTd"><p></p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Daniel Gredler</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>gredler</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>committer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
@@ -168,9 +169,9 @@
<div class="cfm-align-right" style="text-align: right;">[email protected]</div>
</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link"
href="http://people.apache.org/~ffacon/">http://people.apache.org/~ffacon/</a></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>Howard M. Lewis
Ship</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>hlship</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>PMC member and former chair</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align: right;">[email protected]</div>
-</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" rel="nofollow"
href="http://howardlewisship.com">http://howardlewisship.com</a></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>Igor Drobiazko</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>drobiazko</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>PMC member</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><div class="content-wrapper">
+</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" href="http://howardlewisship.com"
rel="nofollow">http://howardlewisship.com</a></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>Igor Drobiazko</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>drobiazko</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>PMC member</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
-</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" rel="nofollow"
href="http://tapestry5.de">http://tapestry5.de</a></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>Jesse Kuhnert</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>jkuhnert</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>PMC member</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><div class="content-wrapper">
+</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" href="http://tapestry5.de"
rel="nofollow">http://tapestry5.de</a></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Jesse Kuhnert</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>jkuhnert</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>PMC member</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
</div></td><td colspan="1" rowspan="1"
class="confluenceTd"><p></p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">Jochen Kemnade</td><td colspan="1" rowspan="1"
class="confluenceTd">jkemnade</td><td colspan="1" rowspan="1"
class="confluenceTd">PMC member</td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
@@ -178,7 +179,7 @@
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
</div></td><td colspan="1" rowspan="1"
class="confluenceTd"><p></p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Kalle Korhonen</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>kaosko</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>committer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align: right;">[email protected]</div>
-</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" rel="nofollow"
href="http://tynamo.org">http://tynamo.org</a></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>Kevin Menard</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>kmenard</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>committer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
+</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" href="http://tynamo.org"
rel="nofollow">http://tynamo.org</a></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Kevin Menard</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>kmenard</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>committer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
</div></td><td colspan="1" rowspan="1"
class="confluenceTd"><p></p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Marcus Schulte</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>mschulte</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>PMC member</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
@@ -190,13 +191,13 @@
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
</div></td><td colspan="1" rowspan="1"
class="confluenceTd"><p></p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Robin Komiwes</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>robinkomiwes</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>committer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
-</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" rel="nofollow"
href="http://spreadthesource.com">http://spreadthesource.com</a></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>Taha Hafeez</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>tawus</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>committer</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><div class="content-wrapper">
+</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" href="http://spreadthesource.com"
rel="nofollow">http://spreadthesource.com</a></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>Taha Hafeez</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>tawus</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>committer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align: right;">[email protected]</div>
</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" href="http://tawus.wordpress.com"
rel="nofollow">http://tawus.wordpress.com</a></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>Ted Steen</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>tedst</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>committer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align: right;">[email protected]</div>
</div></td><td colspan="1" rowspan="1"
class="confluenceTd"><p></p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>Thiago H. de Paula Figueiredo</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>thiagohp</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>PMC chair</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align:
right;">[email protected]</div>
-</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" rel="nofollow"
href="http://machina.com.br">http://machina.com.br</a></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>Ulrich Stärk</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>uli</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Former PMC member</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><div class="content-wrapper">
+</div></td><td colspan="1" rowspan="1" class="confluenceTd"><a
class="external-link" href="http://machina.com.br"
rel="nofollow">http://machina.com.br</a></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>Ulrich Stärk</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>uli</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Former PMC member</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><div class="content-wrapper">
<div class="cfm-align-right" style="text-align: right;">[email protected]</div>
</div></td><td colspan="1" rowspan="1"
class="confluenceTd"><p></p></td></tr></tbody></table></div>
Modified: websites/production/tapestry/content/cookbook.html
==============================================================================
--- websites/production/tapestry/content/cookbook.html (original)
+++ websites/production/tapestry/content/cookbook.html Thu Apr 4 09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified:
websites/production/tapestry/content/cors-cross-origin-resource-sharing-support-582.html
==============================================================================
---
websites/production/tapestry/content/cors-cross-origin-resource-sharing-support-582.html
(original)
+++
websites/production/tapestry/content/cors-cross-origin-resource-sharing-support-582.html
Thu Apr 4 09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified:
websites/production/tapestry/content/creating-the-skeleton-application.html
==============================================================================
--- websites/production/tapestry/content/creating-the-skeleton-application.html
(original)
+++ websites/production/tapestry/content/creating-the-skeleton-application.html
Thu Apr 4 09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/css.html
==============================================================================
--- websites/production/tapestry/content/css.html (original)
+++ websites/production/tapestry/content/css.html Thu Apr 4 09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/default-parameter.html
==============================================================================
--- websites/production/tapestry/content/default-parameter.html (original)
+++ websites/production/tapestry/content/default-parameter.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified:
websites/production/tapestry/content/defining-tapestry-ioc-services.html
==============================================================================
--- websites/production/tapestry/content/defining-tapestry-ioc-services.html
(original)
+++ websites/production/tapestry/content/defining-tapestry-ioc-services.html
Thu Apr 4 09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/demos.html
==============================================================================
--- websites/production/tapestry/content/demos.html (original)
+++ websites/production/tapestry/content/demos.html Thu Apr 4 09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified:
websites/production/tapestry/content/dependencies-tools-and-plugins.html
==============================================================================
--- websites/production/tapestry/content/dependencies-tools-and-plugins.html
(original)
+++ websites/production/tapestry/content/dependencies-tools-and-plugins.html
Thu Apr 4 09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/developer-bible.html
==============================================================================
--- websites/production/tapestry/content/developer-bible.html (original)
+++ websites/production/tapestry/content/developer-bible.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
@@ -213,7 +214,7 @@
</div>
-<h2 id="DeveloperBible-IDEChoices">IDE Choices</h2><h3
id="DeveloperBible-IntelliJ">IntelliJ</h3><p>It's a free license for all
committers and it's just better. Yes, the first few days can be an unpleasant
fumble because everything is almost, but not quite, familiar. Pretty soon
you'll love IDEA and recognize that Eclipse has been bending you over and doing
unspeakable things.</p><p>There are shared code formatting settings in the <a
class="external-link"
href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git;a=tree;f=support">support
directory</a> (idea-settings.jar). This will prevent unexpected conflicts due
to formatting.</p><h3 id="DeveloperBible-Eclipse">Eclipse</h3><p>Howard uses
this ... because he can't manage to switch IDEs constantly (he uses Eclipse for
training). Lately its gotten better.</p><p>As with IntelliJ, there are shared
code formatting settings for Eclipse in the <a class="external-link"
href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git;a=t
ree;f=support">support directory</a> (tapestry-indent-eclipse.xml).</p><h2
id="DeveloperBible-Copyrights">Copyrights</h2><p>All source files should have
the ASF copyright comment on top, except where such a comment would interfere
with its behavior. For example, component template files omit the
comment.</p><p>As you make changes to files, update the copyright to add the
current year to the list. The goal is that the copyright notice includes the
year in which files change. When creating a new file, don't back date the
copyright year ... start with the current year. Try not to change the copyright
year on files that haven't actually changed.</p><p>IntelliJ has a great
comparison view: Cmd-9 to see the local changes, the Cmd-D to see the
differences. You can whip through the changes (using Cmd-forward arrow) and
make sure copyrights are up to date as you review the changes prior to a
commit.</p><h2 id="DeveloperBible-CommitMessages">Commit Messages</h2><p>Always
provide a commit mess
age. Howard generally tries to work off the JIRA, so his commit message is
often:</p><blockquote><p>TAP5-1234: Make the Foo Widget more
Ajax-tastic!</p></blockquote><p>It is <em>very important</em> to include the
JIRA issue id in the commit. This is used in many places: JIRA links issues to
the Git commits for that issue (very handy for seeing what changed as part
of a bug fix). The Hudson CI server does as well, and will actually link
Git commits to issues after succesfully building.</p><h2
id="DeveloperBible-JIRAProcedures">JIRA Procedures</h2><p>All Tapestry
committers should be registerred with JIRA and part of the tapestry-developers
JIRA group.</p><p>Every committer is invited to look at the list of <a
class="external-link"
href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?mode=hide&requestId=12317068">'Review
for closing'</a> issues and review them as it contains probably outdated or no
more valid issues.</p><p>There's also a list of all <a class="
external-link"
href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?mode=hide&requestId=12316792">Open</a>
issue about the project.</p><p>Ideally, we would always work top priortity to
low priority. Howard sometimes jump out of order, if there's something cool to
work on that fits in an available time slot. Alternately, you are always
allowed to change the priority of a bug before or as you work it.</p><p>As a
general rule issues which are "<em>Invalid</em>" or "<em>Won't</em>
<em>Fix</em>" shouldn't have a "<em>Fix</em> <em>version</em>".</p><h3
id="DeveloperBible-Startingwork">Starting work</h3><p>When you start to work on
an issue, make sure it is <em>assigned to you</em> and use the <em>start
progress</em> option.</p><p>Add comments about the state of the fix, or the
challenges in creating a fix. This often spurs the Issue's adder to provide
more details.</p><p>Update the issue description to make it more legible and
more precise if needed, i.e., "NPE in CheckUpda
tes" might become "NullPointerException when checking for updates to files
that have been deleted". Verbose is good.</p><h3
id="DeveloperBible-Closingbugs">Closing bugs</h3><p>Is it a bug fix without
tests? <strong>No.</strong> A good plan is to write a test that fails then work
the code until the test passes. Often code works in a unit test but fails
unexpectedly in an integration test. As the G-Man says <em>"Expect unforeseen
consequences"</em>.</p><p>When you check in a fix, you should
<strong>close</strong> the issue and make sure the <strong>fix release</strong>
is correct.</p><p>We're playing fast and loose – a better procedure would
be to mark the bug resolved and verify the fix before closing it. That's ok, we
have a community to double check our work <img class="emoticon emoticon-smile"
src="https://cwiki.apache.org/confluence/s/-wgxcy0/8703/98yf4s/_/images/icons/emoticons/smile.svg"
data-emoticon-name="smile" alt="(smile)">.</p><p>For anything non-trivial,
wait for t
he Hudson CI server to build. It catches a lot of things ... such as files
that were not added to Git. And even IntelliJ has a bit of trouble with wildly
refactored code. Hudson will catch all that.</p><h3
id="DeveloperBible-Invalidissuesandduplicates">Invalid issues and
duplicates</h3><p>Always provide comments about why_ an issue is invalid
(<em>"A Ruby implementation of Tapestry is out of scope for the
project."</em>), or at least, a link to the duplicate issues.</p><p>Consider
writing new tests to prove that an issue is not valid and then leave the tests
in place – then close the bug as invalid.</p><p>Close the issue but
<em>make sure the fix release is blank</em>. Otherwise, the issue <em>will be
listed in the release notes</em>, which we don't want.</p><h2
id="DeveloperBible-Publicvs.Private/Internal">Public vs.
Private/Internal</h2><p>This is a real big deal. As long as code is in the
internal package, we have a high degree of carte-blanche to change it. As soon
as code
is public, we become handcuffed to backwards
compatibility.</p><p><em>Interfaces are public, implementations are
private</em>. You can see this is the bulk of the code, where
org.apache.tapestry5.services is almost all interfaces and the implementations
are in org.apache.tapestry5.internal.services.</p><p>Many more services have
both the interface and the implementation in
org.apache.tapestry5.internal.services.</p><p>We absolutely <em>do not</em>
want to make Page or ComponentPageElement public. You will often see public
service facades that take a page name as a method parameter, and convert it to
a page instance before invoking methods on internal services.</p><h2
id="DeveloperBible-EvolvingComponents">Evolving Components</h2><p>We do not
have a specific plan for this yet. Future Tapestry 5 will add features to allow
clean renames of parameters, and a way to deprecated and eventually remove
components.</p><h2 id="DeveloperBible-EvolvingInterfaces">Evolving
Interfaces</h2><p>Tape
stry uses interfaces quite extensively.</p><p>Interfaces fall into two
categories: service interfaces called by user code, and interfaces implemented
by user code.</p><p>Internal interfaces may be changed at any time. That's why
so much is kept internal.</p><h3 id="DeveloperBible-ServiceInterfaces">Service
Interfaces</h3><p>New methods may be added if absolutely necessary, but this
should be avoided if at all possible. Don't forget the <code>@since</code>
Javadoc annotation.</p><p>Consider having a stable public facade service whose
implementation calls into one or more internal service.</p><h3
id="DeveloperBible-UserInterfaces">User Interfaces</h3><p>These should be
frozen, no changes once released. Failure to do so causes <em>non-backwards
compatible upgrade problems</em>; that is, classes that implement the (old)
interface are suddenly invalid, missing methods from the (new)
interface.</p><p>Consider introducing a new interface that extends the old one
and adds new methods. Make
sure you support both.</p><p>You can see this with ServiceDef and ServiceDef2
(which extends ServiceDef). Yes this can be a bit ugly.</p><p>Howard uses
utility methods that convert from ServiceDef to ServiceDef2, adding a wrapper
implementation around a ServiceDef instance if necessary:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<h2 id="DeveloperBible-IDEChoices">IDE Choices</h2><h3
id="DeveloperBible-IntelliJ">IntelliJ</h3><p>It's a free license for all
committers and it's just better. Yes, the first few days can be an unpleasant
fumble because everything is almost, but not quite, familiar. Pretty soon
you'll love IDEA and recognize that Eclipse has been bending you over and doing
unspeakable things.</p><p>There are shared code formatting settings in the <a
class="external-link"
href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git;a=tree;f=support">support
directory</a> (idea-settings.jar). This will prevent unexpected conflicts due
to formatting.</p><h3 id="DeveloperBible-Eclipse">Eclipse</h3><p>Howard uses
this ... because he can't manage to switch IDEs constantly (he uses Eclipse for
training). Lately its gotten better.</p><p>As with IntelliJ, there are shared
code formatting settings for Eclipse in the <a class="external-link"
href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git;a=t
ree;f=support">support directory</a> (tapestry-indent-eclipse.xml).</p><h2
id="DeveloperBible-Copyrights">Copyrights</h2><p>All source files should have
the ASF copyright comment on top, except where such a comment would interfere
with its behavior. For example, component template files omit the
comment.</p><p>As you make changes to files, update the copyright to add the
current year to the list. The goal is that the copyright notice includes the
year in which files change. When creating a new file, don't back date the
copyright year ... start with the current year. Try not to change the copyright
year on files that haven't actually changed.</p><p>IntelliJ has a great
comparison view: Cmd-9 to see the local changes, the Cmd-D to see the
differences. You can whip through the changes (using Cmd-forward arrow) and
make sure copyrights are up to date as you review the changes prior to a
commit.</p><h2 id="DeveloperBible-CommitMessages">Commit Messages</h2><p>Always
provide a commit mess
age. Howard generally tries to work off the JIRA, so his commit message is
often:</p><blockquote><p>TAP5-1234: Make the Foo Widget more
Ajax-tastic!</p></blockquote><p>It is <em>very important</em> to include the
JIRA issue id in the commit. This is used in many places: JIRA links issues to
the Git commits for that issue (very handy for seeing what changed as part
of a bug fix). The Hudson CI server does as well, and will actually link
Git commits to issues after succesfully building.</p><h2
id="DeveloperBible-JIRAProcedures">JIRA Procedures</h2><p>All Tapestry
committers should be registerred with JIRA and part of the tapestry-developers
JIRA group.</p><p>Every committer is invited to look at the list of <a
class="external-link"
href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?mode=hide&requestId=12317068">'Review
for closing'</a> issues and review them as it contains probably outdated or no
more valid issues.</p><p>There's also a list of all <a class="
external-link"
href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?mode=hide&requestId=12316792">Open</a>
issue about the project.</p><p>Ideally, we would always work top priortity to
low priority. Howard sometimes jump out of order, if there's something cool to
work on that fits in an available time slot. Alternately, you are always
allowed to change the priority of a bug before or as you work it.</p><p>As a
general rule issues which are "<em>Invalid</em>" or "<em>Won't</em>
<em>Fix</em>" shouldn't have a "<em>Fix</em> <em>version</em>".</p><h3
id="DeveloperBible-Startingwork">Starting work</h3><p>When you start to work on
an issue, make sure it is <em>assigned to you</em> and use the <em>start
progress</em> option.</p><p>Add comments about the state of the fix, or the
challenges in creating a fix. This often spurs the Issue's adder to provide
more details.</p><p>Update the issue description to make it more legible and
more precise if needed, i.e., "NPE in CheckUpda
tes" might become "NullPointerException when checking for updates to files
that have been deleted". Verbose is good.</p><h3
id="DeveloperBible-Closingbugs">Closing bugs</h3><p>Is it a bug fix without
tests? <strong>No.</strong> A good plan is to write a test that fails then work
the code until the test passes. Often code works in a unit test but fails
unexpectedly in an integration test. As the G-Man says <em>"Expect unforeseen
consequences"</em>.</p><p>When you check in a fix, you should
<strong>close</strong> the issue and make sure the <strong>fix release</strong>
is correct.</p><p>We're playing fast and loose – a better procedure would
be to mark the bug resolved and verify the fix before closing it. That's ok, we
have a community to double check our work <img class="emoticon emoticon-smile"
src="https://cwiki.apache.org/confluence/s/-577jzc/8804/10mvnxf/_/images/icons/emoticons/smile.svg"
data-emoticon-name="smile" alt="(smile)">.</p><p>For anything non-trivial,
wait for
the Hudson CI server to build. It catches a lot of things ... such as files
that were not added to Git. And even IntelliJ has a bit of trouble with wildly
refactored code. Hudson will catch all that.</p><h3
id="DeveloperBible-Invalidissuesandduplicates">Invalid issues and
duplicates</h3><p>Always provide comments about why_ an issue is invalid
(<em>"A Ruby implementation of Tapestry is out of scope for the
project."</em>), or at least, a link to the duplicate issues.</p><p>Consider
writing new tests to prove that an issue is not valid and then leave the tests
in place – then close the bug as invalid.</p><p>Close the issue but
<em>make sure the fix release is blank</em>. Otherwise, the issue <em>will be
listed in the release notes</em>, which we don't want.</p><h2
id="DeveloperBible-Publicvs.Private/Internal">Public vs.
Private/Internal</h2><p>This is a real big deal. As long as code is in the
internal package, we have a high degree of carte-blanche to change it. As soon
as cod
e is public, we become handcuffed to backwards
compatibility.</p><p><em>Interfaces are public, implementations are
private</em>. You can see this is the bulk of the code, where
org.apache.tapestry5.services is almost all interfaces and the implementations
are in org.apache.tapestry5.internal.services.</p><p>Many more services have
both the interface and the implementation in
org.apache.tapestry5.internal.services.</p><p>We absolutely <em>do not</em>
want to make Page or ComponentPageElement public. You will often see public
service facades that take a page name as a method parameter, and convert it to
a page instance before invoking methods on internal services.</p><h2
id="DeveloperBible-EvolvingComponents">Evolving Components</h2><p>We do not
have a specific plan for this yet. Future Tapestry 5 will add features to allow
clean renames of parameters, and a way to deprecated and eventually remove
components.</p><h2 id="DeveloperBible-EvolvingInterfaces">Evolving
Interfaces</h2><p>Tap
estry uses interfaces quite extensively.</p><p>Interfaces fall into two
categories: service interfaces called by user code, and interfaces implemented
by user code.</p><p>Internal interfaces may be changed at any time. That's why
so much is kept internal.</p><h3 id="DeveloperBible-ServiceInterfaces">Service
Interfaces</h3><p>New methods may be added if absolutely necessary, but this
should be avoided if at all possible. Don't forget the <code>@since</code>
Javadoc annotation.</p><p>Consider having a stable public facade service whose
implementation calls into one or more internal service.</p><h3
id="DeveloperBible-UserInterfaces">User Interfaces</h3><p>These should be
frozen, no changes once released. Failure to do so causes <em>non-backwards
compatible upgrade problems</em>; that is, classes that implement the (old)
interface are suddenly invalid, missing methods from the (new)
interface.</p><p>Consider introducing a new interface that extends the old one
and adds new methods. Make
sure you support both.</p><p>You can see this with ServiceDef and ServiceDef2
(which extends ServiceDef). Yes this can be a bit ugly.</p><p>Howard uses
utility methods that convert from ServiceDef to ServiceDef2, adding a wrapper
implementation around a ServiceDef instance if necessary:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre><code class="language-java"> public static ServiceDef2
toServiceDef2(final ServiceDef sd)
{
if (sd instanceof ServiceDef2)
@@ -235,7 +236,7 @@
};
}
</code></pre>
-</div></div><h2 id="DeveloperBible-Useof@since">Use of @since</h2><p>When
adding new classes or interface, or adding new methods to existing types, add
an @since Javadoc comment.</p><p>Use the complete version number of the release
in which the type or method was added: i.e., <em>@since 5.1.0.3</em>.</p><h2
id="DeveloperBible-CodeStyle&Formatting">Code Style &
Formatting</h2><p>Yes, at one time Howard used leading underscores for field
names. He has since changed my mind, but this unfortunately infected other
people; please try to make your code blend in when modifying existing
source.</p><p>Long ago, Tapestry (3) code used the regrettable
"leading-I-on-interfaces" style. Don't do that. Instead, name the
implementation class with an "Impl" at the end.</p><p>Howard prefers braces on
a new line (and thus, open braces lined up with close braces), so that's what
the default code formatting is set up for. It's okay to omit braces for trivial
one-liner if statements, such as <code
>if (!test) return;</code>.</p><p>Indent with 4 spaces instead of
>tabs.</p><p>Use a lot of vertical whitespace to break methods into logical
>sections.</p><p>We're coding Java, not Pascal; it's better to have a few
>checks early on with quick returns or exceptions than have ten-levels deep
>block nesting just so a method can have a single return statement. In other
>words, <em>else considered harmful</em>. Low code complexity is better, more
>readable, more maintainable code.</p><p>Don't bother alphabetizing things,
>because the IDE lets you jump around easily.</p><p><em>Final is the new
>private.</em> Final fields are great for multi-threaded code. Especially when
>creating service implementations with dependencies, store those dependencies
>into final fields. Once we're all running on 100 core workstations, you'll
>thank me. Seriously, Java's memory model is seriously twisted stuff, and
>assigning to a non-final field from a constructor opens up a tiny window of
>non-thread safety.</p><h2 id=
"DeveloperBible-Comments">Comments</h2><p>Comments are overwhelmingly
important. Try to capture the <em>why</em> of a class or method. Add lots of
links, to code that will be invoked by the method, to related methods or
classes, and so forth. For instance, you may often have an annotation, a worker
class for the annotation, and a related service all cross-linked.</p><p>Comment
the <em>interfaces</em> and don't get worked up on the
<em>implementations</em>. Javadoc does a perfectly good job of copying
interface comments to implementations, so this falls under the <em>Don't Repeat
Yourself</em> guideline.</p><p>Be very careful about documenting what methods
can accept null, and what methods may return null. Generally speaking, people
will assume that null is not allowed for parameters, and method will never
return null, unless it is explicitly documented that null is allowed (or
potentially returned).</p><h2
id="DeveloperBible-Documentation">Documentation</h2><p>Try and keep the docum
entation up-to date as you make changes; it is <em>much</em> harder to do so
later. This is now much easier using the Confluence wiki (you're reading the
result <img class="emoticon emoticon-smile"
src="https://cwiki.apache.org/confluence/s/-wgxcy0/8703/98yf4s/_/images/icons/emoticons/smile.svg"
data-emoticon-name="smile" alt="(smile)">).</p><p>Documentation was at one
point the <em>#1 criticism</em> of Tapestry!</p><h2
id="DeveloperBible-ClassandMethodNamingConventions">Class and Method Naming
Conventions</h2><p>Naming things is hard. Names that make sense to one person
won't to another.</p><p>That being said, Howard has tried to be somewhat
consistent with naming. Not perfectly.</p><h3
id="DeveloperBible-Factory,Creator">Factory, Creator</h3><p>A factory class
creates new objects. Methods will often be prefixed with "create" or "new".
Don't expect a Factory to cache anything, it just creates new things.</p><h3
id="DeveloperBible-Source">Source</h3><p>A source is a level up from a
Factory. It <em>may</em> combine multiple factories together. It
<em>usually</em> will cache the result. Method are often prefixed with
"get".</p><h3 id="DeveloperBible-Findvs.Get">Find vs. Get</h3><p>For methods: A
"find" prefix indicates that a non-match is valid and null may be returned. A
"get" prefix indicates that a non-match is invalid and an exception will be
thrown in that case (and null will never be returned).</p><h3
id="DeveloperBible-Contribution">Contribution</h3><p>A data object usually
associated with a Tapestry IoC service's configuration.</p><h3
id="DeveloperBible-Filter">Filter</h3><p>Part of a pipeline, where there's an
associated main interface, and the Filter wraps around that main interface.
Each main interface method is duplicated in the Filter, with an extra parameter
used to chain the interface.</p><h3
id="DeveloperBible-Manager">Manager</h3><p>Often a wrapper around a service
configuration, it provides access to the contributed values (possibly after
some
transformation).</p><h3 id="DeveloperBible-To">To</h3><p>A method prefix that
indicates a conversion or coersion from one type to another. I.e.,
<code>toUserPresentable()</code>.</p><h3
id="DeveloperBible-Worker">Worker</h3><p>An object that peforms a specific job.
Workers will be stateless, but will be passed a stateful object to perform some
operation upon.</p><h3 id="DeveloperBible-Builder">Builder</h3><p>An object
whose job is to create other objects, typically in the context of creating a
core service implementation for a Tapestry IoC service (such as PipelineBuilder
or ChainBuilder).</p><h3 id="DeveloperBible-Support">Support</h3><p>An object
that provides supporting operations to other objects; this is a kind of "loose
aggregation".</p><h3 id="DeveloperBible-Parameters">Parameters</h3><p>A data
object that holds a number of related values that would otherwise be separate
parameter values to a method. This tends to streamline code (especially when
using a Filter interface) and
allows the parameters to be evolved without changing the method
signature.</p><h3 id="DeveloperBible-Strategy">Strategy</h3><p>An object that
"plugs into" some other code, allowing certain decisions to be deferred to the
Strategy. Often a Strategy is selected based on the type of some object being
operated upon.</p><h3 id="DeveloperBible-Context">Context</h3><p>Captures some
stateful information that may be passed around between stateless
services.</p><h3 id="DeveloperBible-Constants">Constants</h3><p>A
non-instantiable class that contains public static fields that are referenced
in multiple places.</p><h3 id="DeveloperBible-Hub">Hub</h3><p>An object that
allows listeners to be registered. Often includes a method prefixed with
"trigger" that will send notifications to listeners.</p><h2
id="DeveloperBible-ImplementtoString()">Implement
<code>toString()</code></h2><p>Objects that are exposed to user code should
generally implement a meaningful toString() method. And that method shoul
d be tested.</p><h2 id="DeveloperBible-Subclassing">Subclassing</h2><p>You'll
notice there isn't a lot of inheritance in Tapestry. Given the function of the
IoC container, it is much more common to use some variation of
<em>aggregation</em> rather than <em>inheritance</em>.</p><p>Where subclassing
exists, the guideline for constructor parameters is: the subclass should
include all the constructor parameters of the superclass, in the same
positions. Thus subclass constructor parameters are appended to the list of
super-class constructor parameters.</p></div>
+</div></div><h2 id="DeveloperBible-Useof@since">Use of @since</h2><p>When
adding new classes or interface, or adding new methods to existing types, add
an @since Javadoc comment.</p><p>Use the complete version number of the release
in which the type or method was added: i.e., <em>@since 5.1.0.3</em>.</p><h2
id="DeveloperBible-CodeStyle&Formatting">Code Style &
Formatting</h2><p>Yes, at one time Howard used leading underscores for field
names. He has since changed my mind, but this unfortunately infected other
people; please try to make your code blend in when modifying existing
source.</p><p>Long ago, Tapestry (3) code used the regrettable
"leading-I-on-interfaces" style. Don't do that. Instead, name the
implementation class with an "Impl" at the end.</p><p>Howard prefers braces on
a new line (and thus, open braces lined up with close braces), so that's what
the default code formatting is set up for. It's okay to omit braces for trivial
one-liner if statements, such as <code
>if (!test) return;</code>.</p><p>Indent with 4 spaces instead of
>tabs.</p><p>Use a lot of vertical whitespace to break methods into logical
>sections.</p><p>We're coding Java, not Pascal; it's better to have a few
>checks early on with quick returns or exceptions than have ten-levels deep
>block nesting just so a method can have a single return statement. In other
>words, <em>else considered harmful</em>. Low code complexity is better, more
>readable, more maintainable code.</p><p>Don't bother alphabetizing things,
>because the IDE lets you jump around easily.</p><p><em>Final is the new
>private.</em> Final fields are great for multi-threaded code. Especially when
>creating service implementations with dependencies, store those dependencies
>into final fields. Once we're all running on 100 core workstations, you'll
>thank me. Seriously, Java's memory model is seriously twisted stuff, and
>assigning to a non-final field from a constructor opens up a tiny window of
>non-thread safety.</p><h2 id=
"DeveloperBible-Comments">Comments</h2><p>Comments are overwhelmingly
important. Try to capture the <em>why</em> of a class or method. Add lots of
links, to code that will be invoked by the method, to related methods or
classes, and so forth. For instance, you may often have an annotation, a worker
class for the annotation, and a related service all cross-linked.</p><p>Comment
the <em>interfaces</em> and don't get worked up on the
<em>implementations</em>. Javadoc does a perfectly good job of copying
interface comments to implementations, so this falls under the <em>Don't Repeat
Yourself</em> guideline.</p><p>Be very careful about documenting what methods
can accept null, and what methods may return null. Generally speaking, people
will assume that null is not allowed for parameters, and method will never
return null, unless it is explicitly documented that null is allowed (or
potentially returned).</p><h2
id="DeveloperBible-Documentation">Documentation</h2><p>Try and keep the docum
entation up-to date as you make changes; it is <em>much</em> harder to do so
later. This is now much easier using the Confluence wiki (you're reading the
result <img class="emoticon emoticon-smile"
src="https://cwiki.apache.org/confluence/s/-577jzc/8804/10mvnxf/_/images/icons/emoticons/smile.svg"
data-emoticon-name="smile" alt="(smile)">).</p><p>Documentation was at one
point the <em>#1 criticism</em> of Tapestry!</p><h2
id="DeveloperBible-ClassandMethodNamingConventions">Class and Method Naming
Conventions</h2><p>Naming things is hard. Names that make sense to one person
won't to another.</p><p>That being said, Howard has tried to be somewhat
consistent with naming. Not perfectly.</p><h3
id="DeveloperBible-Factory,Creator">Factory, Creator</h3><p>A factory class
creates new objects. Methods will often be prefixed with "create" or "new".
Don't expect a Factory to cache anything, it just creates new things.</p><h3
id="DeveloperBible-Source">Source</h3><p>A source is a level up from a
Factory. It <em>may</em> combine multiple factories together. It
<em>usually</em> will cache the result. Method are often prefixed with
"get".</p><h3 id="DeveloperBible-Findvs.Get">Find vs. Get</h3><p>For methods: A
"find" prefix indicates that a non-match is valid and null may be returned. A
"get" prefix indicates that a non-match is invalid and an exception will be
thrown in that case (and null will never be returned).</p><h3
id="DeveloperBible-Contribution">Contribution</h3><p>A data object usually
associated with a Tapestry IoC service's configuration.</p><h3
id="DeveloperBible-Filter">Filter</h3><p>Part of a pipeline, where there's an
associated main interface, and the Filter wraps around that main interface.
Each main interface method is duplicated in the Filter, with an extra parameter
used to chain the interface.</p><h3
id="DeveloperBible-Manager">Manager</h3><p>Often a wrapper around a service
configuration, it provides access to the contributed values (possibly after some
transformation).</p><h3 id="DeveloperBible-To">To</h3><p>A method prefix that
indicates a conversion or coersion from one type to another. I.e.,
<code>toUserPresentable()</code>.</p><h3
id="DeveloperBible-Worker">Worker</h3><p>An object that peforms a specific job.
Workers will be stateless, but will be passed a stateful object to perform some
operation upon.</p><h3 id="DeveloperBible-Builder">Builder</h3><p>An object
whose job is to create other objects, typically in the context of creating a
core service implementation for a Tapestry IoC service (such as PipelineBuilder
or ChainBuilder).</p><h3 id="DeveloperBible-Support">Support</h3><p>An object
that provides supporting operations to other objects; this is a kind of "loose
aggregation".</p><h3 id="DeveloperBible-Parameters">Parameters</h3><p>A data
object that holds a number of related values that would otherwise be separate
parameter values to a method. This tends to streamline code (especially when
using a Filter interface) an
d allows the parameters to be evolved without changing the method
signature.</p><h3 id="DeveloperBible-Strategy">Strategy</h3><p>An object that
"plugs into" some other code, allowing certain decisions to be deferred to the
Strategy. Often a Strategy is selected based on the type of some object being
operated upon.</p><h3 id="DeveloperBible-Context">Context</h3><p>Captures some
stateful information that may be passed around between stateless
services.</p><h3 id="DeveloperBible-Constants">Constants</h3><p>A
non-instantiable class that contains public static fields that are referenced
in multiple places.</p><h3 id="DeveloperBible-Hub">Hub</h3><p>An object that
allows listeners to be registered. Often includes a method prefixed with
"trigger" that will send notifications to listeners.</p><h2
id="DeveloperBible-ImplementtoString()">Implement
<code>toString()</code></h2><p>Objects that are exposed to user code should
generally implement a meaningful toString() method. And that method shou
ld be tested.</p><h2 id="DeveloperBible-Subclassing">Subclassing</h2><p>You'll
notice there isn't a lot of inheritance in Tapestry. Given the function of the
IoC container, it is much more common to use some variation of
<em>aggregation</em> rather than <em>inheritance</em>.</p><p>Where subclassing
exists, the guideline for constructor parameters is: the subclass should
include all the constructor parameters of the superclass, in the same
positions. Thus subclass constructor parameters are appended to the list of
super-class constructor parameters.</p></div>
</div>
<!-- /// Content End -->
</div>
Modified: websites/production/tapestry/content/developer-information.html
==============================================================================
--- websites/production/tapestry/content/developer-information.html (original)
+++ websites/production/tapestry/content/developer-information.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache
Modified: websites/production/tapestry/content/development-dashboard.html
==============================================================================
--- websites/production/tapestry/content/development-dashboard.html (original)
+++ websites/production/tapestry/content/development-dashboard.html Thu Apr 4
09:17:08 2024
@@ -99,7 +99,8 @@
<div class="dropdown-menu"
aria-labelledby="developmentNavbarDropdown">
<a class="dropdown-item"
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git">Source Code</a>
<a class="dropdown-item"
href="https://issues.apache.org/jira/browse/TAP5">Issues</a>
- </div>
+ <a class="dropdown-item" href="/development-roadmap.html"
title="Development Roadmap">Roadmap</a>
+                </div>
</li><li class="nav-item dropdown">
<a class="nav-link dropdown-toggle active"
id="apacheNavbarDropdown" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Apache