Author: buildbot
Date: Mon Jul 11 07:12:07 2022
New Revision: 1080106
Log:
Production update by buildbot for tapestry
Modified:
websites/production/tapestry/content/ajax-and-zones.html
websites/production/tapestry/content/cache/main.pageCache
websites/production/tapestry/content/community.html
websites/production/tapestry/content/component-mixins.html
websites/production/tapestry/content/demos.html
websites/production/tapestry/content/downloadboxes-v2.html
websites/production/tapestry/content/getting-started.html
websites/production/tapestry/content/indexv2-old.html
websites/production/tapestry/content/page-navigation.html
websites/production/tapestry/content/persistent-page-data.html
websites/production/tapestry/content/security.html
websites/production/tapestry/content/uploading-files.html
websites/production/tapestry/content/using-select-with-a-list.html
websites/production/tapestry/content/using-tapestry-with-hibernate.html
Modified: websites/production/tapestry/content/ajax-and-zones.html
==============================================================================
--- websites/production/tapestry/content/ajax-and-zones.html (original)
+++ websites/production/tapestry/content/ajax-and-zones.html Mon Jul 11
07:12:07 2022
@@ -298,9 +298,9 @@ Object onActionFromSomeLink()
return request.isXHR() ? myZone.getBody() : null;
}
</code></pre>
-</div></div><h3 id="AjaxandZones-MultipleZoneUpdates">Multiple Zone
Updates</h3><div class="navmenu" style="float:right; background:#eee;
margin:3px; padding:0 1em">
+</div></div><h3 id="AjaxandZones-MultipleZoneUpdates">Multiple Zone
Updates</h3><p></p><div class="navmenu" style="float:right; background:#eee;
margin:3px; padding:0 1em">
<p> <strong>JumpStart Demo:</strong>
- <span class="nobr"><a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/multiplezoneupdate"
rel="nofollow">AJAX Multiple Zone Update<sup><img align="middle"
class="rendericon" src="/images/confluence/icons/linkext7.gif" height="7"
width="7" alt="" border="0"></sup></a></span></p></div>An event handler often
needs to update multiple zones on the client side. To accomplish this, use an
<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.html">AjaxResponseRenderer</a>,
indicating the zones to update. You must know the client-side id for each zone
to update (the best way for this is to lock down the zone's id using the id
parameter of the Zone component).<p><em>AjaxResponseRenderer was introduced in
Tapestry 5.3. For Tapestry 5.2 and earlier, return a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ajax/MultiZoneUpdate.
html">MultiZoneUpdate</a> object instead.</em></p><p>The renderer for each
zone can be the zone itself, a block, a component, a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Renderable.html">Renderable</a>
or a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/runtime/RenderCommand.html">RenderCommand</a>
... or an object, such as String, that can be coerced to either of
these.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>For
Tapestry 5.3 and later</b></div><div class="codeContent panelContent pdl">
+ <span class="nobr"><a class="external-link"
href="https://tapestry-jumpstart.org/jumpstart/examples/ajax/multiplezoneupdate"
rel="nofollow">AJAX Multiple Zone Update<sup><img align="middle"
class="rendericon" src="/images/confluence/icons/linkext7.gif" height="7"
width="7" alt="" border="0"></sup></a></span></p></div>An event handler often
needs to update multiple zones on the client side. To accomplish this, use an
<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.html">AjaxResponseRenderer</a>,
indicating the zones to update. You must know the client-side id for each zone
to update (the best way for this is to lock down the zone's id using the id
parameter of the Zone component).<p></p><p><em>AjaxResponseRenderer was
introduced in Tapestry 5.3. For Tapestry 5.2 and earlier, return a <a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ajax/MultiZoneUpdate.h
tml">MultiZoneUpdate</a> object instead.</em></p><p>The renderer for each zone
can be the zone itself, a block, a component, a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Renderable.html">Renderable</a>
or a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/runtime/RenderCommand.html">RenderCommand</a>
... or an object, such as String, that can be coerced to either of
these.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>For
Tapestry 5.3 and later</b></div><div class="codeContent panelContent pdl">
<pre><code class="language-java">@InjectComponent
private Zone userInput;
@@ -324,11 +324,11 @@ void onActionFromRegister()
</div></div><p>You may also define and use your own JavaScript effect function
(with lower-case names), like this:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre><code class="language-js">Tapestry.ElementEffect.myeffectname =
function(element){ YourJavascriptCodeGoesHere; };
</code></pre>
-</div></div><h3 id="AjaxandZones-ZoneLimitations">Zone
Limitations</h3><p>Unlike many other situations, Tapestry relies on you to
specify useful and unique ids to Zone components, then reference those ids
inside EventLink (or ActionLink, or Form) components. Using Zone components
inside any kind of loop may cause additional problems, as Tapestry will
<em>uniqueify</em> the client id you specify (appending an index
number).</p><p>If you create a component that contains a zone, and you use that
component in a loop, you'll likely need to set the client-side id like
this:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+</div></div><h3 id="AjaxandZones-ZoneLimitations">Zone
Limitations</h3><p>Unlike many other situations, Tapestry relies on you to
specify useful and unique ids to Zone components, then reference those ids
inside EventLink (or ActionLink, or Form) components. Using Zone components
inside any kind of loop may cause additional problems, as Tapestry will
<em>uniqueify</em> the client id you specify (appending an index
number).</p><p>If you create a component that contains a zone, and you use that
component in a loop, you'll likely need to set the client-side id like
this:</p><p></p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<pre><code class="language-xml"><t:zone t:id="myzone"
id="prop:componentResources.id"></code></pre>
-</div></div><p>See <a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/components1"
rel="nofollow">this JumpStart Example</a> for details.</p><p>The show and
update function names (Tapestry 5.3 and earlier only) are converted to lower
case; all the methods of Tapestry.ElementEffect should have all lower-case
names. Because client-side JavaScript is so fluid (new methods may be added to
existing objects), Tapestry makes no attempt to validate the function names ...
however, if the names are not valid, then the default show and highlight
methods will be used.</p><p>Zones may only be used inside the <em>body</em> of
a page, not the head<em>.</em></p><h3 id="AjaxandZones-MoreInformation">More
Information</h3><p>For examples of extending a Form with a Zone and updating
multiple zones at once, see the <a href="ajax-components-faq.html">Ajax
Components FAQ</a>.</p><p>There are also a number of Ajax-related examples at
the  <a class="exter
nal-link" href="http://jumpstart.doublenegative.com.au/jumpstart/"
rel="nofollow"><span class="confluence-link">Tapestry JumpStart</span></a>
site.</p><p><span class="confluence-anchor-link"
id="AjaxandZones-autocomplete"></span></p><h2
id="AjaxandZones-AutocompleteMixin">Autocomplete Mixin</h2><div class="navmenu"
style="float:right; background:#eee; margin:3px; padding:0 1em">
+</div></div><p></p><p>See <a class="external-link"
href="https://tapestry-jumpstart.org/jumpstart/examples/ajax/components1"
rel="nofollow">this JumpStart Example</a> for details.</p><p>The show and
update function names (Tapestry 5.3 and earlier only) are converted to lower
case; all the methods of Tapestry.ElementEffect should have all lower-case
names. Because client-side JavaScript is so fluid (new methods may be added to
existing objects), Tapestry makes no attempt to validate the function names ...
however, if the names are not valid, then the default show and highlight
methods will be used.</p><p>Zones may only be used inside the <em>body</em> of
a page, not the head<em>.</em></p><h3 id="AjaxandZones-MoreInformation">More
Information</h3><p>For examples of extending a Form with a Zone and updating
multiple zones at once, see the <a href="ajax-components-faq.html">Ajax
Components FAQ</a>.</p><p>There are also a number of Ajax-related examples at
the  <a class="extern
al-link" href="https://tapestry-jumpstart.org/jumpstart/" rel="nofollow"><span
class="confluence-link">Tapestry JumpStart</span></a> site.</p><p><span
class="confluence-anchor-link" id="AjaxandZones-autocomplete"></span></p><h2
id="AjaxandZones-AutocompleteMixin">Autocomplete Mixin</h2><p></p><div
class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
<p> <strong>JumpStart Demo:</strong>
- <span class="nobr"><a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/autocompletemixin"
rel="nofollow">Autocomplete Mixin<sup><img align="middle" class="rendericon"
src="/images/confluence/icons/linkext7.gif" height="7" width="7" alt=""
border="0"></sup></a></span></p></div>The <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/Autocomplete.html">Autocomplete</a>
mixin exists to allow a text field to query the server for completions for a
partially entered phrase. It is often used in situations where the field exists
to select a single value from a large set, too large to successfully download
to the client as a drop down list; for example, when the number of values to
select from is numbered in the thousands.<p>Autocomplete can be added to an
existing text field:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+ <span class="nobr"><a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/autocompletemixin"
rel="nofollow">Autocomplete Mixin<sup><img align="middle" class="rendericon"
src="/images/confluence/icons/linkext7.gif" height="7" width="7" alt=""
border="0"></sup></a></span></p></div>The <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/Autocomplete.html">Autocomplete</a>
mixin exists to allow a text field to query the server for completions for a
partially entered phrase. It is often used in situations where the field exists
to select a single value from a large set, too large to successfully download
to the client as a drop down list; for example, when the number of values to
select from is numbered in the thousands.<p></p><p>Autocomplete can be added to
an existing text field:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<pre><code class="language-java"> <t:textfield t:id="accountName"
t:mixins="autocomplete" size="100"/>
</code></pre>
</div></div><p>The mixin can be configured in a number of ways, see the <a
href="component-reference.html">component reference</a>.</p><p>When the user
types into the field, the client-side JavaScript will send a request to the
server to get completions.</p><p>You must write an event handler to provide
these completions. The name of the event is "providecompletions". The context
is the partial input value, and the return value will be converted into the
selections for the user.</p><p>For example:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
@@ -346,7 +346,7 @@ void onActionFromRegister()
return result;
}
</code></pre>
-</div></div><p>This presumes that <code>findByPartialAccountName()</code> will
sort the values, otherwise you will probably want to sort them. The
Autocomplete mixin does <em>not</em> do any sorting.</p><p>You can return an
object array, a list, even a single object. You may return objects instead of
strings ... and <code>toString()</code> will be used to convert them into
client-side strings.</p><h2
id="AjaxandZones-Invokingserver-sideeventhandlermethodsfromJavaScript">Invoking
server-side event handler methods from JavaScript</h2><p>Tapestry 5.4.2
introduced an API which makes it easy for server-side events to be invoked from
JavaScript. On the server-side, you first need to annotate the event handler
methods you want to expose with
the <code>@PublishEvent</code> annotation. Then, in JavaScript, all
you need to do is to call the existing <code><a class="external-link"
href="http://tapestry.apache.org/current/coffeescript/ajax.html">t5/core/ajax</a></code> funct
ion, but with slightly different parameters.</p><p><code>The
t5/core/ajax</code> function has two parameters: <code>url</code>
and <code>options</code>. Prior to Tapestry 5.4.2, the first one was
difficult to get when doing AJAX requests to event handler methods. You needed
to inject <code>ComponentResources in your component class</code>,
call <code>componentResources.createEventLink()</code> for each event
handler method, then pass all this information back to the browser through one
of the <code>JavaScriptSupport</code> methods. For Tapestry 5.4.2 and
later, your JavaScript code only needs to know the event name (also called
<em>event type</em>) and optionally indicate a DOM element to be used as a
starting point for finding the event URL.</p><p>All event data is stored
in <code>data-componenent-events</code> attributes. For page classes, the
attribute is added to the <code><body></code> element. For
components, it's added to the first ele
ment rendered by the component. Given an HTML element, the search is performed
in the following order until information for the given event is first
found:</p><ol><li>The element itself</li><li>The element's previous siblings,
closest first (bottom-up)</li><li>The element's parents</li><li>The page's
<<code>body></code> element</li></ol><p>Here's one example:</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><p>This presumes that <code>findByPartialAccountName()</code> will
sort the values, otherwise you will probably want to sort them. The
Autocomplete mixin does <em>not</em> do any sorting.</p><p>You can return an
object array, a list, even a single object. You may return objects instead of
strings ... and <code>toString()</code> will be used to convert them into
client-side strings.</p><p></p><h2
id="AjaxandZones-Invokingserver-sideeventhandlermethodsfromJavaScript">Invoking
server-side event handler methods from JavaScript</h2><p>Tapestry 5.4.2
introduced an API which makes it easy for server-side events to be invoked from
JavaScript. On the server-side, you first need to annotate the event handler
methods you want to expose with
the <code>@PublishEvent</code> annotation. Then, in JavaScript, all
you need to do is to call the existing <code><a class="external-link"
href="http://tapestry.apache.org/current/coffeescript/ajax.html">t5/core/ajax</a></code>
0;function, but with slightly different parameters.</p><p><code>The
t5/core/ajax</code> function has two parameters: <code>url</code>
and <code>options</code>. Prior to Tapestry 5.4.2, the first one was
difficult to get when doing AJAX requests to event handler methods. You needed
to inject <code>ComponentResources in your component class</code>,
call <code>componentResources.createEventLink()</code> for each event
handler method, then pass all this information back to the browser through one
of the <code>JavaScriptSupport</code> methods. For Tapestry 5.4.2 and
later, your JavaScript code only needs to know the event name (also called
<em>event type</em>) and optionally indicate a DOM element to be used as a
starting point for finding the event URL.</p><p>All event data is stored
in <code>data-componenent-events</code> attributes. For page classes, the
attribute is added to the <code><body></code> element. For
components, it's added to the fi
rst element rendered by the component. Given an HTML element, the search is
performed in the following order until information for the given event is first
found:</p><ol><li>The element itself</li><li>The element's previous siblings,
closest first (bottom-up)</li><li>The element's parents</li><li>The page's
<<code>body></code> element</li></ol><p></p><p>Here's one
example:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<pre><code class="language-java">public class PublishEventDemoComponent
{
@OnEvent("answer")
Modified: websites/production/tapestry/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.
Modified: websites/production/tapestry/content/community.html
==============================================================================
--- websites/production/tapestry/content/community.html (original)
+++ websites/production/tapestry/content/community.html Mon Jul 11 07:12:07 2022
@@ -143,11 +143,11 @@
<!-- /// Content Start -->
<div id="content">
<div id="ConfluenceContent"><p>Tapestry has an
active community of users and developers. This is an overview of how to
participate, along with a list of some of the great contributions of the
community members.</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1648743109000 {padding: 0px;}
-div.rbtoc1648743109000 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1648743109000 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1657523513147 {padding: 0px;}
+div.rbtoc1657523513147 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1657523513147 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1648743109000">
+/*]]>*/</style></p><div class="toc-macro rbtoc1657523513147">
<ul class="toc-indentation"><li><a href="#Community-GettingInvolved">Getting
Involved</a>
<ul class="toc-indentation"><li><a
href="#Community-ReportingProblems/GettingSupport">Reporting Problems / Getting
Support</a></li><li><a
href="#Community-ContributingtranslationsforTapestrybuilt-inmessages">Contributing
translations for Tapestry built-in messages</a></li><li><a
href="#Community-SourceCodeAccess">Source Code Access</a></li><li><a
href="#Community-BecomingaContributor">Becoming a Contributor</a></li><li><a
href="#Community-BecomingaCommitter">Becoming a Committer</a></li></ul>
</li><li><a href="#Community-CommunityContributions">Community
Contributions</a>
@@ -156,7 +156,7 @@ div.rbtoc1648743109000 li {margin-left:
</div><h1 id="Community-GettingInvolved">Getting Involved</h1><h2
id="Community-ReportingProblems/GettingSupport">Reporting Problems / Getting
Support</h2><p>Like all Apache projects, Tapestry uses mailing lists for most
communication. You can subscribe by sending e-mail to the addresses below. For
each list, there are subscribe, unsubscribe, and archive links. All Tapestry
users are welcome to subscribe to any of these lists, however questions on how
to <em>use</em> Tapestry in your application are best sent to the <em>user</em>
mailing list.</p><div class="table-wrap"><table class="table table-bordered
table-responsive"><colgroup span="1"><col span="1"><col span="1"><col
span="1"><col span="1"><col span="1"></colgroup><tbody><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p></p></td><th colspan="1" rowspan="1"
class="confluenceTh"><p>Subscribe</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Unsubscribe</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>A
pache Archive</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>MarkMail Archive</p></th></tr><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Tapestry User List</p></th><td colspan="1"
rowspan="1" class="confluenceTd"><p><a class="external-link"
href="mailto:[email protected]"
rel="nofollow">Subscribe</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="mailto:[email protected]"
rel="nofollow">Unsubscribe</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://mail-archives.apache.org/mod_mbox/tapestry-users/">mail-archives.apache.org</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://tapestry.markmail.org/search/?q=list%3Aorg.apache.tapestry.users"
rel="nofollow">tapestry.markmail.org</a></p></td></tr><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Tapestry Developer List</p></th><t
d colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link"
href="mailto:[email protected]"
rel="nofollow">Subscribe</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="mailto:[email protected]"
rel="nofollow">Unsubscribe</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://mail-archives.apache.org/mod_mbox/tapestry-dev/">mail-archives.apache.org</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://tapestry.markmail.org/search/?q=list%3Aorg.apache.tapestry.dev"
rel="nofollow">tapestry.markmail.org</a></p></td></tr><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Tapestry Commits List</p></th><td
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link"
href="mailto:[email protected]"
rel="nofollow">Subscribe</a></p></td><td colspan="1" rowspan="1" class="
confluenceTd"><p><a class="external-link"
href="mailto:[email protected]"
rel="nofollow">Unsubscribe</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://mail-archives.apache.org/mod_mbox/tapestry-commits/">mail-archives.apache.org</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://tapestry.markmail.org/search/?q=list%3Aorg.apache.tapestry.commits"
rel="nofollow">tapestry.markmail.org</a></p></td></tr><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Search Multiple Lists</p></th><td
colspan="1" rowspan="1" class="confluenceTd"><p>-</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>-</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>-</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.markmail.org/search/?q=#query:+page:1+state:facets"
rel="nofollow">tapestry.markmail.org</a></p></t
d></tr></tbody></table></div><p>Tapestry issues are tracked in the <a
class="external-link" href="https://issues.apache.org/jira/browse/TAP5">Apache
JIRA</a>.</p><p>Unless your problem is clear as day, it's a good idea to
discuss it on the Tapestry Users mailing list first, before adding an issue. At
the same time, it's generally unlikely that a bug will be fixed <em>unless</em>
a JIRA Issue is created.</p><p>Eric Raymond has a detailed <a
class="external-link" href="http://catb.org/esr/faqs/smart-questions.html"
rel="nofollow">guide to asking questions the right way</a>. If you are not
getting a response to your problem, it's likely because you aren't asking it
the right way.</p><p>Just saying something is "broken" or "failed" is not
enough. How did it fail? Did it do the wrong thing? Throw an exception? Not
respond in any way? What exactly did you expect to happen? All of this
information should be made available when looking for help, plus context on the
general problem you were
trying to solve in the first place (there may be a better solution entirely).
Read Eric Raymond's guide ... it's fun and informative.</p><h2
id="Community-ContributingtranslationsforTapestrybuilt-inmessages">Contributing
translations for Tapestry built-in messages</h2><p>If Tapestry's built-in
messages aren't available in your language, you are welcome to contribute a new
translation of the message catalogs. For easy instructions, see <a
href="localization.html">Localization</a>.</p><h2
id="Community-SourceCodeAccess">Source Code Access</h2><p>Source code for
Tapestry can be <a href="download.html">downloaded</a> along with pre-compiled
binaries.</p><p>Tapestry uses <a class="external-link"
href="http://git-scm.com/" rel="nofollow">Git</a> to manage the project's
source code.</p><p>Web access to the Tapestry repository is available as <a
class="external-link"
href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git">GIT-WIP at
Apache</a>.</p><p>Access using Git client:</p><div
class="preformatted panel" style="border-width: 1px;"><div
class="preformattedContent panelContent">
<pre>$ git clone http://git-wip-us.apache.org/repos/asf/tapestry-5.git
</pre>
-</div></div><p>(See <a href="building-tapestry-from-source.html">Building
Tapestry from Source</a> for more info.)</p><h2
id="Community-BecomingaContributor">Becoming a Contributor</h2><p>The best way
to become a contributor is to become active on the mailing list; Tapestry is
known to have an active and helpful community on the mailing list, and the more
mentors we can add, the better.</p><p>If you want to help out with
documentation, you must sign an <a class="external-link"
href="http://www.apache.org/licenses/#clas">Apache Contributor License
Agreement</a>, at which point we can grant write access to the Confluence Wiki
(where official documentation is created).</p><p>Providing patches (with
tests!) is another way to become a contributor. (See the <a
href="developer-bible.html">Developer Bible</a> for important guidance on
source code formatting, class naming conventions, etc.)</p><h2
id="Community-BecomingaCommitter">Becoming a Committer</h2><p>Active
contributors may be a
sked to become full committers, with write access to the source code.
Generally, contributors who have been consistently active and helpful for three
to six months are eligible for committer access. If you think you are in that
category, don't be shy about contacting members of the Tapestry PMC (Project
Management Committee).</p><hr><h1
id="Community-CommunityContributions">Community Contributions</h1><div
class="sectionColumnWrapper"><div class="sectionMacro"><div
class="sectionMacroRow"><div class="columnMacro"
style="width:50%;min-width:50%;max-width:50%;"><p><span
class="confluence-anchor-link" id="Community-modules"></span></p><div
id="third-parties"><h2 id="Community-Modules">Modules</h2><p><a
class="external-link" href="https://github.com/chenillekit/chenillekit"
rel="nofollow">Chenille Kit</a> by Massimo Lusetti</p><blockquote><p>Collection
of modules, services, utilities and components (many of which require only
tapestry-ioc). Includes Accordion, ColorPicker, Editor, Kaptc
ha, MultipleSelect, RoundCornerContainer, ThumbNail, and many more useful
components. Also provides integrations with Google services, LDAP, Lucene,
Mail, Quartz, JasperReports, Bean Scripting Framework, and
more.</p></blockquote><p><a class="external-link"
href="http://equanda.org/equanda-tapestry5/"
rel="nofollow">Equanda-tapestry5</a> by Joachim Van der
Auwera</p><blockquote><p>Components useful for building enterprise
applications. Includes Accordion, Form Traversal, Tabs, TextAreaAutoExpander,
TreeTable, . Among other things, these focus on easy input of data without the
need for a mouse.</p></blockquote><p><a class="external-link"
href="http://tapestry.ioko.com/" rel="nofollow">ioko-tapestry-commons</a> by
Ben Gidley, et al.</p><blockquote><p>Provides components for caching, cache
control, and simple Flash movie integration.</p></blockquote><p><a
class="external-link" href="http://tapestry.formos.com/nightly/tapx/"
rel="nofollow">Tapx</a> by Howard M. Lewis Ship</p><blockquote
><p>Collection of modules and components: improved DatePicker, dynamic
>Tapestry templates, offline rendering using Tapestry, YUI integration,
>Confirm dialog mixin, Kaptcha components, and more!</p></blockquote><p><a
>class="external-link" href="http://tapestry5-jquery.com/"
>rel="nofollow">Tapestry5-jQuery</a> by
>GOT5</p><blockquote><p>Tapestry5-Jquery lets you use jQuery to completely
>replace Prototype, Scriptaculous and the base tapestry.js
>script.</p></blockquote><p><a class="external-link"
>href="http://exanpe-t5-lib.appspot.com/" rel="nofollow">Exanpe-T5-Lib</a> by
>Laurent Guérin et Julien Maupoux</p><blockquote><p>A library of
>components: accordion, ajax loader, slider, tab view, secured password, color
>picker, tooltip, hideable panel and more! Live demo is
>provided.</p></blockquote><p><a class="external-link"
>href="http://code.google.com/p/flowlogix/" rel="nofollow">FlowLogix</a> by
>Lenny Primak</p><blockquote><p>a collection of components, services and
>utilities that integ
rates Tapestry into JEE environments and provides other commonly needed
functionality.</p></blockquote><p><a href="modules.html">More
Modules</a>...</p><h1 id="Community-Extensions">Extensions</h1><p><a
class="external-link" href="http://www.arsmachina.com.br/" rel="nofollow">Ars
Machina</a> by Thiago H. de Paula
Figueiredo</p><blockquote><p>Tapestry/Hibernate extensions for Generic DAOs,
standard CRUD interfaces, and user access logging and
tracking.</p></blockquote><p><a class="external-link" href="http://tynamo.org/"
rel="nofollow">Tynamo project</a> by Tynamo Team / Kalle Korhonen &
Alejandro Scandroli</p><blockquote><p>Tynamo is model-driven, full-stack web
framework based on Tapestry 5, allowing you to jump directly from your
Hibernate entities to a full-blown CRUD application. Tynamo provides several
modules, including tapestry-model, tapestry-conversations,
tapestry-hibernate-seedentity, tapestry-resteasy and
tapestry-security.</p></blockquote></div><div class="columnMac
ro"><h1 id="Community-Tutorials">Tutorials</h1><p><a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart" rel="nofollow">Tapestry
JumpStart</a> by Geoff Callender</p><blockquote><p>JumpStart is an easy way to
learn Tapestry by example. It's an online demo application, and also a
downloadable open source app ready for you to explore and
modify.</p></blockquote><p><a class="external-link"
href="http://t5stitch-lazan.rhcloud.com/" rel="nofollow">Tapestry Stitch</a> by
Lance</p><blockquote><p>Sample components and concepts in Apache Tapestry
5</p></blockquote><p><a class="external-link"
href="http://code.google.com/p/shams/" rel="nofollow">Shams Examples</a> by
Mohammad H. Shamsi</p><blockquote><p>A variety of examples of Tapestry 5 pages
and components.</p></blockquote><p><a class="external-link"
href="http://wiki.apache.org/tapestry/FrontPage">Community's Wiki</a> (Moin
Moin)</p><blockquote><p>The wiki contains a wealth of user-generated tips and
techniques fo
r using Tapestry</p></blockquote><h1 id="Community-IDEIntegrations">IDE
Integrations</h1><p><a class="external-link"
href="https://github.com/anjlab/eclipse-tapestry5-plugin"
rel="nofollow">Eclipse-tapestry5-plugin</a></p><blockquote><p>An Eclipse plugin
for Tapestry 5 by Dmitry Gusev, with a "Quick Switch" between templates and
component classes, a Tapestry Context view, and many other convenience
features. <span style="color: rgb(112,112,112);">This is currently the best
choice for Eclipse users.</span></p></blockquote><p><a class="external-link"
href="http://code.google.com/p/tapestrytools/wiki/Install_Guide_Lightweight_TapestryTools"
rel="nofollow">Tapestry Tools</a> by Gavin Lei</p><blockquote><p>Tapestry
Tools is an Eclipse plugin for Tapestry 5 which has been built by Gavin Lei
within the timeframe of GSoC 2012.</p></blockquote><p><a class="external-link"
href="http://www.jetbrains.com/idea" rel="nofollow">IntelliJ 10</a> by
JetBrains</p><blockquote><p>IntelliJ has Tapestry 5
support included <a class="external-link"
href="http://www.jetbrains.com/idea/features/tapestry_5.html"
rel="nofollow">right out of the box</a>.</p></blockquote><p><a
class="external-link" href="http://code.google.com/p/loom-t5/"
rel="nofollow">loom-t5</a> by Chris Scheid</p><blockquote><p>Eclipse plugin for
building Tapestry 5 projects</p></blockquote><p><a class="external-link"
href="http://wiki.apache.org/tapestry/Tapestry5JSPEditorEclipse">Code
Completion in Eclipse</a></p><blockquote><p>How to use the built in JSP Eclipse
Editor and a custom tld file to get Tapestry 5 code completion in
Eclipse</p></blockquote></div></div></div></div></div></div>
+</div></div><p>(See <a href="building-tapestry-from-source.html">Building
Tapestry from Source</a> for more info.)</p><h2
id="Community-BecomingaContributor">Becoming a Contributor</h2><p>The best way
to become a contributor is to become active on the mailing list; Tapestry is
known to have an active and helpful community on the mailing list, and the more
mentors we can add, the better.</p><p>If you want to help out with
documentation, you must sign an <a class="external-link"
href="http://www.apache.org/licenses/#clas">Apache Contributor License
Agreement</a>, at which point we can grant write access to the Confluence Wiki
(where official documentation is created).</p><p>Providing patches (with
tests!) is another way to become a contributor. (See the <a
href="developer-bible.html">Developer Bible</a> for important guidance on
source code formatting, class naming conventions, etc.)</p><h2
id="Community-BecomingaCommitter">Becoming a Committer</h2><p>Active
contributors may be a
sked to become full committers, with write access to the source code.
Generally, contributors who have been consistently active and helpful for three
to six months are eligible for committer access. If you think you are in that
category, don't be shy about contacting members of the Tapestry PMC (Project
Management Committee).</p><hr><h1
id="Community-CommunityContributions">Community Contributions</h1><div
class="sectionColumnWrapper"><div class="sectionMacro"><div
class="sectionMacroRow"><div class="columnMacro"
style="width:50%;min-width:50%;max-width:50%;"><p><span
class="confluence-anchor-link" id="Community-modules"></span></p><p></p><div
id="third-parties"><p></p><h2 id="Community-Modules">Modules</h2><p><a
class="external-link" href="https://github.com/chenillekit/chenillekit"
rel="nofollow">Chenille Kit</a> by Massimo Lusetti</p><blockquote><p>Collection
of modules, services, utilities and components (many of which require only
tapestry-ioc). Includes Accordion, ColorPicker,
Editor, Kaptcha, MultipleSelect, RoundCornerContainer, ThumbNail, and many
more useful components. Also provides integrations with Google services, LDAP,
Lucene, Mail, Quartz, JasperReports, Bean Scripting Framework, and
more.</p></blockquote><p><a class="external-link"
href="http://equanda.org/equanda-tapestry5/"
rel="nofollow">Equanda-tapestry5</a> by Joachim Van der
Auwera</p><blockquote><p>Components useful for building enterprise
applications. Includes Accordion, Form Traversal, Tabs, TextAreaAutoExpander,
TreeTable, . Among other things, these focus on easy input of data without the
need for a mouse.</p></blockquote><p><a class="external-link"
href="http://tapestry.ioko.com/" rel="nofollow">ioko-tapestry-commons</a> by
Ben Gidley, et al.</p><blockquote><p>Provides components for caching, cache
control, and simple Flash movie integration.</p></blockquote><p><a
class="external-link" href="http://tapestry.formos.com/nightly/tapx/"
rel="nofollow">Tapx</a> by Howard M. Lewis Ship<
/p><blockquote><p>Collection of modules and components: improved DatePicker,
dynamic Tapestry templates, offline rendering using Tapestry, YUI integration,
Confirm dialog mixin, Kaptcha components, and more!</p></blockquote><p><a
class="external-link" href="http://tapestry5-jquery.com/"
rel="nofollow">Tapestry5-jQuery</a> by GOT5</p><blockquote><p>Tapestry5-Jquery
lets you use jQuery to completely replace Prototype, Scriptaculous and the base
tapestry.js script.</p></blockquote><p><a class="external-link"
href="http://exanpe-t5-lib.appspot.com/" rel="nofollow">Exanpe-T5-Lib</a> by
Laurent Guérin et Julien Maupoux</p><blockquote><p>A library of
components: accordion, ajax loader, slider, tab view, secured password, color
picker, tooltip, hideable panel and more! Live demo is
provided.</p></blockquote><p><a class="external-link"
href="http://code.google.com/p/flowlogix/" rel="nofollow">FlowLogix</a> by
Lenny Primak</p><blockquote><p>a collection of components, services and utilit
ies that integrates Tapestry into JEE environments and provides other commonly
needed functionality.</p></blockquote><p><a href="modules.html">More
Modules</a>...</p><h1 id="Community-Extensions">Extensions</h1><p><a
class="external-link" href="http://www.arsmachina.com.br/" rel="nofollow">Ars
Machina</a> by Thiago H. de Paula
Figueiredo</p><blockquote><p>Tapestry/Hibernate extensions for Generic DAOs,
standard CRUD interfaces, and user access logging and
tracking.</p></blockquote><p><a class="external-link" href="http://tynamo.org/"
rel="nofollow">Tynamo project</a> by Tynamo Team / Kalle Korhonen &
Alejandro Scandroli</p><blockquote><p>Tynamo is model-driven, full-stack web
framework based on Tapestry 5, allowing you to jump directly from your
Hibernate entities to a full-blown CRUD application. Tynamo provides several
modules, including tapestry-model, tapestry-conversations,
tapestry-hibernate-seedentity, tapestry-resteasy and
tapestry-security.</p></blockquote></div><div cl
ass="columnMacro"><h1 id="Community-Tutorials">Tutorials</h1><p><a
class="external-link" href="https://tapestry-jumpstart.org/jumpstart"
rel="nofollow">Tapestry JumpStart</a> by Geoff
Callender</p><blockquote><p>JumpStart is an easy way to learn Tapestry by
example. It's an online demo application, and also a downloadable open source
app ready for you to explore and modify.</p></blockquote><p><a
class="external-link" href="http://t5stitch-lazan.rhcloud.com/"
rel="nofollow">Tapestry Stitch</a> by Lance</p><blockquote><p>Sample components
and concepts in Apache Tapestry 5</p></blockquote><p><a class="external-link"
href="http://code.google.com/p/shams/" rel="nofollow">Shams Examples</a> by
Mohammad H. Shamsi</p><blockquote><p>A variety of examples of Tapestry 5 pages
and components.</p></blockquote><p><a class="external-link"
href="http://wiki.apache.org/tapestry/FrontPage">Community's Wiki</a> (Moin
Moin)</p><blockquote><p>The wiki contains a wealth of user-generated tips and
techniq
ues for using Tapestry</p></blockquote><h1 id="Community-IDEIntegrations">IDE
Integrations</h1><p><a class="external-link"
href="https://github.com/anjlab/eclipse-tapestry5-plugin"
rel="nofollow">Eclipse-tapestry5-plugin</a></p><blockquote><p>An Eclipse plugin
for Tapestry 5 by Dmitry Gusev, with a "Quick Switch" between templates and
component classes, a Tapestry Context view, and many other convenience
features. <span style="color: rgb(112,112,112);">This is currently the best
choice for Eclipse users.</span></p></blockquote><p><a class="external-link"
href="http://code.google.com/p/tapestrytools/wiki/Install_Guide_Lightweight_TapestryTools"
rel="nofollow">Tapestry Tools</a> by Gavin Lei</p><blockquote><p>Tapestry
Tools is an Eclipse plugin for Tapestry 5 which has been built by Gavin Lei
within the timeframe of GSoC 2012.</p></blockquote><p><a class="external-link"
href="http://www.jetbrains.com/idea" rel="nofollow">IntelliJ 10</a> by
JetBrains</p><blockquote><p>IntelliJ has Tape
stry 5 support included <a class="external-link"
href="http://www.jetbrains.com/idea/features/tapestry_5.html"
rel="nofollow">right out of the box</a>.</p></blockquote><p><a
class="external-link" href="http://code.google.com/p/loom-t5/"
rel="nofollow">loom-t5</a> by Chris Scheid</p><blockquote><p>Eclipse plugin for
building Tapestry 5 projects</p></blockquote><p><a class="external-link"
href="http://wiki.apache.org/tapestry/Tapestry5JSPEditorEclipse">Code
Completion in Eclipse</a></p><blockquote><p>How to use the built in JSP Eclipse
Editor and a custom tld file to get Tapestry 5 code completion in
Eclipse</p></blockquote></div></div></div></div></div></div>
</div>
<!-- /// Content End -->
</div>
Modified: websites/production/tapestry/content/component-mixins.html
==============================================================================
--- websites/production/tapestry/content/component-mixins.html (original)
+++ websites/production/tapestry/content/component-mixins.html Mon Jul 11
07:12:07 2022
@@ -187,7 +187,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>
@@ -196,7 +196,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>
@@ -303,7 +303,7 @@ private TextField userId;
@MixinClasses(value={Autocomplete.class,DefaultFromCookie.class},
order={"before:discardbody;after:renderdisabled","before:autocomplete")
</code></pre>
-</div></div><p>The ordering is always specified in terms of the order of the
"forward" rendering process (setupRender, beginRender, etc.). When the
"reverse" rendering phases (afterRender, etc.) occur, the mixin order is
exactly reversed. Mixins which have no associated ordering constraints will be
ordered in a manner which is consistent with the specified constraints for all
other mixins, but is otherwise unspecified.</p><h2
id="ComponentMixins-AvailableMixins">Available Mixins</h2><p>Tapestry includes
the following mixins out-of-the-box.</p><div class="table-wrap"><table
class="table table-bordered table-responsive"><tbody><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/Autocomplete.html">Autocomplete</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>modifies a text field to
provide for auto-completion of text using values retrieved from the server as
the user types. <a href="ajax-and-zones.html">See
instructions</a>.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/Confirm.html">Confirm</a></td><td
colspan="1" rowspan="1" class="confluenceTd">attached to a Form or link
component, runs a modal-dialog to force the user to confirm the behavior. New
for Tapestry 5.4.</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/DiscardBody.html">DiscardBody</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>discards a component's body.
Returns false from the BeforeRenderBody phase, which prevents the rendering of
the body.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5
/corelib/mixins/FormFieldFocus.html">FormFieldFocus</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>instruments the outer Form on
which component the focus should be activated. Replaced by OverrideFieldFocus
starting in Tapestry 5.4.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/FormGroup.html">FormGroup</a></td><td
colspan="1" rowspan="1" class="confluenceTd">attaches to a field to render an
enclosing <div> element and label for proper Bootstrap markup of text
fields, selects, and textareas</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/NotEmpty.html">NotEmpty</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>attaches to any component that
renders an element. At the end of the render, if the e
lement is empty, then a non-breaking space (&nbsp;) is injected into the
element.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/OverrideFieldFocus.html">OverrideFieldFocus</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>when attached to a form field,
causes that field to gain focus. Starting in Tapestry 5.4, this supersedes
FormFieldFocus.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/RenderClientId.html">RenderClientId</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>forces a client element to
render its client id by ensuring that "getClientId" is
called.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
class="external-link" href="http://tapestry.apache.org/curren
t/apidocs/org/apache/tapestry5/corelib/mixins/RenderDisabled.html">RenderDisabled</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>renders a "disabled" attribute
if the containing component is disabled</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/RenderInformals.html">RenderInformals</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>renders out all informal
parameters, at the end of the BeginRender phase. This mixin can be used with
components that render a single tag inside the BeginRender
phase.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/RenderNotification.html">RenderNotification</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>triggers component event
notifications when
the attached component enters its BeginRender and AfterRender render
phases.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/TriggerFragment.html">TriggerFragment</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>when applied to a Checkbox or
Radio component, links the input field and a FormFragment, making the field
control the client-side visibility of the FormFragment</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/ZoneRefresh.html">ZoneRefresh</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>periodically refreshes a Zone
by triggering an event on the server using ajax
requests.</p></td></tr></tbody></table></div><p>In addition, the following
mixins are available from other sources:</p><div cla
ss="table-wrap"><table class="table table-bordered
table-responsive"><tbody><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/creatingmixins1"
rel="nofollow">ClickOnce</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>From JumpStart, a mixin to apply to a submit button,
ensuring it can't be double-clicked</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://wiki.apache.org/tapestry/Tapestry5AndJavaScriptExplained">Confirm</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Adds a JavaScript
<em>confirm</em> prompt to any link</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/oneven"
rel="nofollow">ZoneUpdater</a></td><td colspan="1" rowspan="1"
class="confluenceTd">Updates a zone when a clien
t-side event occurs</td></tr></tbody></table></div><h2
id="ComponentMixins-AdditionalTools">Additional Tools</h2><p><a
class="external-link" href="http://tapestryxpath.sourceforge.net/"
rel="nofollow">Tapestry-Xpath</a> is a third-part Tapestry module that allows
XPath traversal of the Tapestry (server-side) DOM, which can be extremely
useful in certain mixins.</p></div>
+</div></div><p>The ordering is always specified in terms of the order of the
"forward" rendering process (setupRender, beginRender, etc.). When the
"reverse" rendering phases (afterRender, etc.) occur, the mixin order is
exactly reversed. Mixins which have no associated ordering constraints will be
ordered in a manner which is consistent with the specified constraints for all
other mixins, but is otherwise unspecified.</p><h2
id="ComponentMixins-AvailableMixins">Available Mixins</h2><p>Tapestry includes
the following mixins out-of-the-box.</p><div class="table-wrap"><table
class="table table-bordered table-responsive"><tbody><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/Autocomplete.html">Autocomplete</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>modifies a text field to
provide for auto-completion of text using values retrieved from the server as
the user types. <a href="ajax-and-zones.html">See
instructions</a>.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/Confirm.html">Confirm</a></td><td
colspan="1" rowspan="1" class="confluenceTd">attached to a Form or link
component, runs a modal-dialog to force the user to confirm the behavior. New
for Tapestry 5.4.</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/DiscardBody.html">DiscardBody</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>discards a component's body.
Returns false from the BeforeRenderBody phase, which prevents the rendering of
the body.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5
/corelib/mixins/FormFieldFocus.html">FormFieldFocus</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>instruments the outer Form on
which component the focus should be activated. Replaced by OverrideFieldFocus
starting in Tapestry 5.4.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/FormGroup.html">FormGroup</a></td><td
colspan="1" rowspan="1" class="confluenceTd">attaches to a field to render an
enclosing <div> element and label for proper Bootstrap markup of text
fields, selects, and textareas</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/NotEmpty.html">NotEmpty</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>attaches to any component that
renders an element. At the end of the render, if the e
lement is empty, then a non-breaking space (&nbsp;) is injected into the
element.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/OverrideFieldFocus.html">OverrideFieldFocus</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>when attached to a form field,
causes that field to gain focus. Starting in Tapestry 5.4, this supersedes
FormFieldFocus.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/RenderClientId.html">RenderClientId</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>forces a client element to
render its client id by ensuring that "getClientId" is
called.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
class="external-link" href="http://tapestry.apache.org/curren
t/apidocs/org/apache/tapestry5/corelib/mixins/RenderDisabled.html">RenderDisabled</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>renders a "disabled" attribute
if the containing component is disabled</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/RenderInformals.html">RenderInformals</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>renders out all informal
parameters, at the end of the BeginRender phase. This mixin can be used with
components that render a single tag inside the BeginRender
phase.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/RenderNotification.html">RenderNotification</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>triggers component event
notifications when
the attached component enters its BeginRender and AfterRender render
phases.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/TriggerFragment.html">TriggerFragment</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>when applied to a Checkbox or
Radio component, links the input field and a FormFragment, making the field
control the client-side visibility of the FormFragment</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/ZoneRefresh.html">ZoneRefresh</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>periodically refreshes a Zone
by triggering an event on the server using ajax
requests.</p></td></tr></tbody></table></div><p>In addition, the following
mixins are available from other sources:</p><div cla
ss="table-wrap"><table class="table table-bordered table-responsive"><colgroup
span="1"><col span="1"><col span="1"></colgroup><tbody><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a class="external-link"
href="https://tapestry-jumpstart.org/jumpstart/examples/javascript/creatingmixins1"
rel="nofollow">ClickOnce</a></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>From JumpStart, a mixin to apply to a submit button,
ensuring it can't be double-clicked</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><a class="external-link"
href="http://wiki.apache.org/tapestry/Tapestry5AndJavaScriptExplained">Confirm</a></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Adds a JavaScript
<em>confirm</em> prompt to any link</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><a class="external-link"
href="https://tapestry-jumpstart.org/jumpstart/examples/ajax/oneven"
rel="nofollow">ZoneUpdater</a></td><td colspan="1" rowspan="1" class=
"confluenceTd">Updates a zone when a client-side event
occurs</td></tr></tbody></table></div><h2
id="ComponentMixins-AdditionalTools">Additional Tools</h2><p><a
class="external-link" href="http://tapestryxpath.sourceforge.net/"
rel="nofollow">Tapestry-Xpath</a> is a third-part Tapestry module that allows
XPath traversal of the Tapestry (server-side) DOM, which can be extremely
useful in certain mixins.</p></div>
</div>
<!-- /// Content End -->
</div>
Modified: websites/production/tapestry/content/demos.html
==============================================================================
--- websites/production/tapestry/content/demos.html (original)
+++ websites/production/tapestry/content/demos.html Mon Jul 11 07:12:07 2022
@@ -142,7 +142,7 @@
<!-- /// Content Start -->
<div id="content">
- <div id="ConfluenceContent"><p>Tapestry
contributors have developed the following applications to demonstrate the some
of the framework's capabilities.</p><ul><li><a class="external-link"
href="https://tapestry-app.apache.org/hotels/">Hotel Booking</a></li><li><a
class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart"
rel="nofollow">JumpStart</a></li><li><a class="external-link"
href="https://github.com/uklance/tapestry-stitch"
rel="nofollow">Stitch</a></li><li><a class="external-link"
href="http://tapestry5.dev-util.com/" rel="nofollow">Tapestry5
Dev-Util</a></li></ul><h2 id="Demos-Otherdemonstrations">Other
demonstrations</h2><p>More demonstrations are listed at <a
class="external-link"
href="http://wiki.apache.org/tapestry/Tapestry5ModuleRegistry">http://wiki.apache.org/tapestry/Tapestry5ModuleRegistry</a></p></div>
+ <div id="ConfluenceContent"><p>Tapestry
contributors have developed the following applications to demonstrate the some
of the framework's capabilities.</p><ul><li><a class="external-link"
href="https://tapestry-app.apache.org/hotels/">Hotel Booking</a></li><li><a
class="external-link" href="https://tapestry-jumpstart.org/jumpstart"
rel="nofollow">JumpStart</a></li><li><a class="external-link"
href="https://github.com/uklance/tapestry-stitch"
rel="nofollow">Stitch</a></li><li><a class="external-link"
href="http://tapestry5.dev-util.com/" rel="nofollow">Tapestry5
Dev-Util</a></li></ul><h2 id="Demos-Otherdemonstrations">Other
demonstrations</h2><p>More demonstrations are listed at <a
class="external-link"
href="http://wiki.apache.org/tapestry/Tapestry5ModuleRegistry">http://wiki.apache.org/tapestry/Tapestry5ModuleRegistry</a></p></div>
</div>
<!-- /// Content End -->
</div>
Modified: websites/production/tapestry/content/downloadboxes-v2.html
==============================================================================
--- websites/production/tapestry/content/downloadboxes-v2.html (original)
+++ websites/production/tapestry/content/downloadboxes-v2.html Mon Jul 11
07:12:07 2022
@@ -142,19 +142,19 @@
<!-- /// Content Start -->
<div id="content">
- <div id="ConfluenceContent"><div class="row"
id="downloadbox"><div class="col-md-4" id="download"><p><a
class="external-link" href="http://tapestry.apache.org/download.html"><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
src="downloadboxes-v2.data/download.png"></span></a></p><ul><li><a
class="external-link" href="http://tapestry.apache.org/download.html">Download
Tapestry</a></li></ul></div>
+ <div id="ConfluenceContent"><div class="row"
id="downloadbox"><div class="col-md-4" id="download"><p><a
class="external-link" href="http://tapestry.apache.org/download.html"><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
draggable="false"
src="downloadboxes-v2.data/download.png"></span></a></p><ul><li><a
class="external-link" href="http://tapestry.apache.org/download.html">Download
Tapestry</a></li></ul></div>
-<div class="col-md-4" id="plugins"><p> <a class="external-link"
href="http://tapestry.apache.org/modules.html"><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
src="downloadboxes-v2.data/plugins.png"></span></a></p><ul><li><a
class="external-link" href="https://github.com/got5/tapestry5-jquery"
rel="nofollow">Tapestry5-jQuery</a></li><li><a class="external-link"
href="http://www.tynamo.org/tapestry-security+guide/"
rel="nofollow">Tapestry-security</a></li><li><a class="external-link"
href="https://github.com/uklance/tapestry-cometd"
rel="nofollow">Tapestry-comentd</a></li></ul><p><a class="external-link"
href="http://tapestry.apache.org/modules.html">More modules and
components...</a></p></div>
+<div class="col-md-4" id="plugins"><p> <a class="external-link"
href="http://tapestry.apache.org/modules.html"><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
draggable="false"
src="downloadboxes-v2.data/plugins.png"></span></a></p><ul><li><a
class="external-link" href="https://github.com/got5/tapestry5-jquery"
rel="nofollow">Tapestry5-jQuery</a></li><li><a class="external-link"
href="http://www.tynamo.org/tapestry-security+guide/"
rel="nofollow">Tapestry-security</a></li><li><a class="external-link"
href="https://github.com/uklance/tapestry-cometd"
rel="nofollow">Tapestry-comentd</a></li></ul><p><a class="external-link"
href="http://tapestry.apache.org/modules.html">More modules and
components...</a></p></div>
-<div class="col-md-4" id="demos"><p><a class="external-link"
href="http://tapestry.apache.org/demos.html"><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
src="downloadboxes-v2.data/demos.png"></span></a></p><ul><li><a
class="external-link" href="http://tapestry-vm.apache.org/hotels">Hotel
Booking</a></li><li><a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/"
rel="nofollow">JumpStart</a></li><li><a class="external-link"
href="https://github.com/uklance/tapestry-stitch"
rel="nofollow">Stitch</a></li></ul><p><a class="external-link"
href="http://tapestry.apache.org/demos.html">More demos...</a></p></div>
+<div class="col-md-4" id="demos"><p><a class="external-link"
href="http://tapestry.apache.org/demos.html"><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
draggable="false"
src="downloadboxes-v2.data/demos.png"></span></a></p><ul><li><a
class="external-link" href="http://tapestry-vm.apache.org/hotels">Hotel
Booking</a></li><li><a class="external-link"
href="https://tapestry-jumpstart.org/jumpstart/"
rel="nofollow">JumpStart</a></li><li><a class="external-link"
href="https://github.com/uklance/tapestry-stitch"
rel="nofollow">Stitch</a></li></ul><p><a class="external-link"
href="http://tapestry.apache.org/demos.html">More demos...</a></p></div>
</div>
-</div>
+<p></p><p></p></div>
</div>
<!-- /// Content End -->
</div>
Modified: websites/production/tapestry/content/getting-started.html
==============================================================================
--- websites/production/tapestry/content/getting-started.html (original)
+++ websites/production/tapestry/content/getting-started.html Mon Jul 11
07:12:07 2022
@@ -204,7 +204,7 @@
</div>
-<p></p><p>Getting started with Tapestry is easy, and you have lots of ways to
begin: watch a video, browse the source code of a working demo app, create a
skeleton app using Maven, or step through the tutorial.</p><h2
id="GettingStarted-Watchashortvideo">Watch a short video</h2><p>For a
fast-paced introduction, watch Mark W. Shead's <a class="external-link"
href="http://blog.markshead.com/900/tapestry-5-10-minute-demo/"
rel="nofollow">10 Minute Demo</a>. This video shows how to set up a simple
Tapestry application, complete with form validation, Hibernate-based
persistence, and Ajax. The video provides a preview of the development speed
and productivity that experienced Tapestry users enjoy.</p><h2
id="GettingStarted-Playwithaworkingdemoapp">Play with a working demo
app</h2><p>You can also play with Tapestry via our live demonstration
applications. To start, have a look at the <a class="external-link"
href="https://tapestry-app.apache.org/hotels/">Hotel Booking Demo</a>. The <a
clas
s="external-link"
href="http://github.com/bobharner/tapestry5-hotel-booking-5.4/"
rel="nofollow">source code</a> is provided so you can download and play with
it. Also check out the <a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/"
rel="nofollow">Jumpstart demonstration site</a>.</p><h2
id="GettingStarted-CreateyourfirstTapestryproject">Create your first Tapestry
project</h2><p>The easiest way to start a new app is to use <a
class="external-link" href="http://maven.apache.org">Apache Maven</a> to create
your initial project; Maven can use an <em>archetype</em> (a kind of project
template) to create a bare-bones Tapestry application for you.</p><p>Once you
have Maven installed, execute the following command:</p><div
class="preformatted panel" style="border-width: 1px;"><div
class="preformattedContent panelContent">
+<p></p><p>Getting started with Tapestry is easy, and you have lots of ways to
begin: watch a video, browse the source code of a working demo app, create a
skeleton app using Maven, or step through the tutorial.</p><h2
id="GettingStarted-Watchashortvideo">Watch a short video</h2><p>For a
fast-paced introduction, watch Mark W. Shead's <a class="external-link"
href="http://blog.markshead.com/900/tapestry-5-10-minute-demo/"
rel="nofollow">10 Minute Demo</a>. This video shows how to set up a simple
Tapestry application, complete with form validation, Hibernate-based
persistence, and Ajax. The video provides a preview of the development speed
and productivity that experienced Tapestry users enjoy.</p><h2
id="GettingStarted-Playwithaworkingdemoapp">Play with a working demo
app</h2><p>You can also play with Tapestry via our live demonstration
applications. To start, have a look at the <a class="external-link"
href="https://tapestry-app.apache.org/hotels/">Hotel Booking Demo</a>. The <a
clas
s="external-link"
href="http://github.com/bobharner/tapestry5-hotel-booking-5.4/"
rel="nofollow">source code</a> is provided so you can download and play with
it. Also check out the <a class="external-link"
href="https://tapestry-jumpstart.org/jumpstart/" rel="nofollow">Jumpstart
demonstration site</a>.</p><h2
id="GettingStarted-CreateyourfirstTapestryproject">Create your first Tapestry
project</h2><p>The easiest way to start a new app is to use <a
class="external-link" href="http://maven.apache.org">Apache Maven</a> to create
your initial project; Maven can use an <em>archetype</em> (a kind of project
template) to create a bare-bones Tapestry application for you.</p><p>Once you
have Maven installed, execute the following command:</p><div
class="preformatted panel" style="border-width: 1px;"><div
class="preformattedContent panelContent">
<pre>mvn archetype:generate -Dfilter=org.apache.tapestry:quickstart</pre>
</div></div><p><span>(Alternatively, <span> if you want to get an archetype
for a not-yet-released version of Tapestry</span> – most users
don't – you can use the staging URI, <code><span
class="nolink"><span class="nolink"><a class="external-link"
href="https://repository.apache.org/content/repositories/staging">https://repository.apache.org/content/repositories/staging</a></span></span></code>
).</span></p><p><span><span>Maven will prompt you for the archetype to create
("Tapestry 5 Quickstart Project") and the exact version number (e.g., "5.5.0").
It also asks you for a group id, an artifact id, and a version number.</span>
You can see this in the following transcript:</span></p><div class="code panel
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre><code class="language-text">$ mvn archetype:generate
-DarchetypeCatalog=http://tapestry.apache.org
@@ -289,7 +289,7 @@ Application 'app' (version 1.0-SNAPSHOT-
[INFO] Started [email protected]:8080
[INFO] Started Jetty Server</code></pre>
-</div></div><p></p><p>After some more one-time downloads you can open your
browser to <a class="external-link" href="http://localhost:8080/newapp"
rel="nofollow">http://localhost:8080/newapp</a> to see the application
running:</p><p><span class="confluence-embedded-file-wrapper
image-center-wrapper confluence-embedded-manual-size"><img
class="confluence-embedded-image confluence-external-resource
confluence-content-image-border image-center" width="375"
src="getting-started.data/newapp_Index.png"
data-image-src="https://cwiki.apache.org/confluence/download/attachments/23334911/newapp_Index.png?version=1&modificationDate=1428074330000&api=v2"></span></p><p>The
application consists of three pages sharing a common look and feel. The
initial page, Index, allows you to perform some basic operations.</p><p>You can
also load the newly-created project it into any IDE and start coding. See the
next section on where to find the different components of the
application.</p><h2 id="Getti
ngStarted-Exploringthegeneratedproject">Exploring the generated
project</h2><p>The archetype creates the following files:</p><div
class="preformatted panel" style="border-width: 1px;"><div
class="preformattedContent panelContent">
+</div></div><p></p><p>After some more one-time downloads you can open your
browser to <a class="external-link" href="http://localhost:8080/newapp"
rel="nofollow">http://localhost:8080/newapp</a> to see the application
running:</p><p><span class="confluence-embedded-file-wrapper
image-center-wrapper confluence-embedded-manual-size"><img
class="confluence-embedded-image confluence-external-resource
confluence-content-image-border image-center" draggable="false" width="375"
src="getting-started.data/newapp_Index.png"
data-image-src="https://cwiki.apache.org/confluence/download/attachments/23334911/newapp_Index.png?version=1&modificationDate=1428074330000&api=v2"></span></p><p>The
application consists of three pages sharing a common look and feel. The
initial page, Index, allows you to perform some basic operations.</p><p>You can
also load the newly-created project it into any IDE and start coding. See the
next section on where to find the different components of the application
.</p><h2 id="GettingStarted-Exploringthegeneratedproject">Exploring the
generated project</h2><p>The archetype creates the following files:</p><div
class="preformatted panel" style="border-width: 1px;"><div
class="preformattedContent panelContent">
<pre>newapp/
├── build.gradle
├── gradle
Modified: websites/production/tapestry/content/indexv2-old.html
==============================================================================
--- websites/production/tapestry/content/indexv2-old.html (original)
+++ websites/production/tapestry/content/indexv2-old.html Mon Jul 11 07:12:07
2022
@@ -192,7 +192,7 @@
<div class="col-sm-4" id="plugins"><p> <a class="external-link"
href="http://tapestry.apache.org/modules.html"><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
draggable="false" src="indexv2-old.data/plugins.png"></span></a></p><ul><li><a
class="external-link" href="https://github.com/got5/tapestry5-jquery"
rel="nofollow">Tapestry5-jQuery</a></li><li><a class="external-link"
href="http://www.tynamo.org/tapestry-security+guide/"
rel="nofollow">Tapestry-security</a></li><li><a class="external-link"
href="https://github.com/uklance/tapestry-cometd"
rel="nofollow">Tapestry-comentd</a></li></ul><p><a class="external-link"
href="http://tapestry.apache.org/modules.html">More modules and
components...</a></p></div>
-<div class="col-sm-4" id="demos"><p><a class="external-link"
href="http://tapestry.apache.org/demos.html"><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
draggable="false" src="indexv2-old.data/demos.png"></span></a></p><ul><li><a
class="external-link" href="http://tapestry-vm.apache.org/hotels">Hotel
Booking</a></li><li><a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/"
rel="nofollow">JumpStart</a></li><li><a class="external-link"
href="https://github.com/uklance/tapestry-stitch"
rel="nofollow">Stitch</a></li></ul><p><a class="external-link"
href="http://tapestry.apache.org/demos.html">More demos...</a></p></div>
+<div class="col-sm-4" id="demos"><p><a class="external-link"
href="http://tapestry.apache.org/demos.html"><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
draggable="false" src="indexv2-old.data/demos.png"></span></a></p><ul><li><a
class="external-link" href="http://tapestry-vm.apache.org/hotels">Hotel
Booking</a></li><li><a class="external-link"
href="https://tapestry-jumpstart.org/jumpstart/"
rel="nofollow">JumpStart</a></li><li><a class="external-link"
href="https://github.com/uklance/tapestry-stitch"
rel="nofollow">Stitch</a></li></ul><p><a class="external-link"
href="http://tapestry.apache.org/demos.html">More demos...</a></p></div>
</div>
Modified: websites/production/tapestry/content/page-navigation.html
==============================================================================
--- websites/production/tapestry/content/page-navigation.html (original)
+++ websites/production/tapestry/content/page-navigation.html Mon Jul 11
07:12:07 2022
@@ -187,7 +187,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="rest-support-580.html">REST Support
(5.8.0+)</a>
+ <a href="component-events.html">Component Events</a>
</div>
@@ -196,7 +196,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="component-events.html">Component Events</a>
+ <a href="rest-support-580.html">REST Support
(5.8.0+)</a>
</div>
@@ -232,11 +232,11 @@
<p>In essence, a Tapestry application is a number of related pages, working
together. To some degree, each page is like an application unto
itself.</p><p>Any individual request will be targeted at a single page.
Requests come in two forms: </p><ul><li><em>component event</em> requests
target a specific component on a specific page, triggering an event within that
component</li><li><em>render</em> requests target a specific page, and stream
the HTML markup for that page back to the client</li></ul><p>This dichotomy
between component event requests and render requests alleviates a number of
problems in traditional web applications related to the browser back button, or
to the user hitting the refresh button in their browser.</p><h3
id="PageNavigation-Contents">Contents</h3><h2
id="PageNavigation-Contents|RelatedArticlesLogicalPageNameShortening"><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1654279907670 {padding: 0px;}
-div.rbtoc1654279907670 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1654279907670 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1657523507816 {padding: 0px;}
+div.rbtoc1657523507816 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1657523507816 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></h2><div class="toc-macro rbtoc1654279907670">
+/*]]>*/</style></h2><div class="toc-macro rbtoc1657523507816">
<ul class="toc-indentation"><li><a
href="#PageNavigation-Contents|RelatedArticlesLogicalPageNameShortening">Logical
Page Name Shortening</a></li><li><a
href="#PageNavigation-ComponentEventRequests&Responses">Component Event
Requests & Responses</a>
<ul class="toc-indentation"><li><a href="#PageNavigation-1.Nullresponse">1.
Null response</a></li><li><a href="#PageNavigation-2.Stringresponse">2. String
response</a></li><li><a href="#PageNavigation-3.Classresponse">3. Class
response</a></li><li><a href="#PageNavigation-4.Pageresponse">4. Page
response</a></li><li><a href="#PageNavigation-5.HttpError">5.
HttpError</a></li><li><a href="#PageNavigation-6.Linkresponse">6. Link
response</a></li><li><a href="#PageNavigation-7.Streamresponse">7. Stream
response</a></li><li><a href="#PageNavigation-8.URLresponse">8. URL
response</a></li><li><a href="#PageNavigation-9.Objectresponse">9. Object
response</a></li></ul>
</li><li><a href="#PageNavigation-PageRenderRequests">Page Render
Requests</a></li><li><a href="#PageNavigation-PageActivation">Page
Activation</a></li><li><a href="#PageNavigation-PageNavigationPatterns">Page
Navigation Patterns</a>
@@ -292,8 +292,8 @@ public Object onAction(){
</code></pre>
</div></div><p>The activation context may consist of a series of values, in
which case the return value of the method should be an array or a List.</p><div
class="confluence-information-macro
confluence-information-macro-information"><span class="aui-icon aui-icon-small
aui-iconfont-info confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>Note: If you are using the <a
href="hibernate-user-guide.html">tapestry-hibernate</a> integration library and
your passivate context is a Hibernate entity, then you can just use the entity
itself, not its id. Tapestry will automatically extract the entity's id into
the URL, and convert it back for the "activate" event handler
method.</p></div></div><h2 id="PageNavigation-PageActivation">Page
Activation</h2><p>When a page render request arrives, the page is
<em>activated</em> before it is rendered.</p><div class="navmenu"
style="float:right; background:#eee; margin:3px; padding:0 1em">
<p> <strong>JumpStart Demos:</strong>
- <span class="nobr"><a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/navigation/onactivateandonpassivate/3"
rel="nofollow">onActivate and onPassivate<sup><img align="middle"
class="rendericon" src="/images/confluence/icons/linkext7.gif" height="7"
width="7" alt="" border="0"></sup></a></span>
- <span class="nobr"><a class="external-link"
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/infrastructure/handlingabadcontext/1"
rel="nofollow">Handling A Bad Context<sup><img align="middle"
class="rendericon" src="/images/confluence/icons/linkext7.gif" height="7"
width="7" alt="" border="0"></sup></a></span></p></div><p>Activation serves two
purposes:</p><p></p><ul><li>It allows the page to restore its internal state
from data encoded into the URL (the activation context discussed
above).</li><li>It provides coarse approach to validating access to the
page.</li></ul><p>The later case – validation – is generally
concerned with user identity and access; if you have pages that may only be
accessed by certain users, you may use the page's activate event handler for
verifying that access.</p><p>Page activation uses Tapestry's <em>Component
Event</em> mechanism. See <a href="component-events.html">Component
Events</a> for details.</p><p>A page's
activate event handler mirrors its passivate handler:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+ <span class="nobr"><a class="external-link"
href="https://tapestry-jumpstart.org/jumpstart/examples/navigation/onactivateandonpassivate/3"
rel="nofollow">onActivate and onPassivate<sup><img align="middle"
class="rendericon" src="/images/confluence/icons/linkext7.gif" height="7"
width="7" alt="" border="0"></sup></a></span>
+ <span class="nobr"><a class="external-link"
href="https://tapestry-jumpstart.org/jumpstart/examples/infrastructure/handlingabadcontext/1"
rel="nofollow">Handling A Bad Context<sup><img align="middle"
class="rendericon" src="/images/confluence/icons/linkext7.gif" height="7"
width="7" alt="" border="0"></sup></a></span></p></div>Activation serves two
purposes:<p></p><ul><li>It allows the page to restore its internal state from
data encoded into the URL (the activation context discussed above).</li><li>It
provides coarse approach to validating access to the page.</li></ul><p>The
later case – validation – is generally concerned with user
identity and access; if you have pages that may only be accessed by certain
users, you may use the page's activate event handler for verifying that
access.</p><p>Page activation uses Tapestry's <em>Component Event</em>
mechanism. See <a href="component-events.html">Component Events</a> for
details.</p><p>A page's activate event
handler mirrors its passivate handler:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre><code class="language-java"> private Product product;
. . .
void onActivate(long productId)