Modified: websites/production/tapestry/content/hibernate-core-conf.html
==============================================================================
--- websites/production/tapestry/content/hibernate-core-conf.html (original)
+++ websites/production/tapestry/content/hibernate-core-conf.html Sun Apr 26
21:22:55 2020
@@ -84,56 +84,58 @@
+
+
<h3>Related Articles</h3>
<ul class="content-by-label"><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="using-tapestry-with-hibernate.html">Using
Tapestry With Hibernate</a>
+ <a href="hibernate-user-guide.html">Hibernate User
Guide</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-support-faq.html">Hibernate
Support FAQ</a>
+ <a href="using-tapestry-with-hibernate.html">Using
Tapestry With Hibernate</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate.html">Hibernate</a>
+ <a href="hibernate-statistics.html">Hibernate
Statistics</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-statistics.html">Hibernate
Statistics</a>
+ <a href="hibernate.html">Hibernate</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-user-guide.html">Hibernate User
Guide</a>
+ <a href="hibernate-core.html">Hibernate - Core</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
<a href="hibernate-core-conf.html">Hibernate - Core -
Conf</a>
@@ -142,10 +144,10 @@
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-core.html">Hibernate - Core</a>
+ <a href="hibernate-support-faq.html">Hibernate
Support FAQ</a>
</div>
@@ -154,11 +156,11 @@
<h2
id="Hibernate-Core-Conf-HibernateSessionSourceConfiguration">HibernateSessionSource
Configuration</h2><p>One way to configure hibernate is to create a
<code>hibernate.cfg.xml</code> file and place it in the root of your
application (i.e., under src/main/resources). Most Hibernate-specific
configuration occurs in this file. Another way is to contribute objects that
perform configuration (such as setting event listeners). Example:</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">public static void
contributeHibernateSessionSource(OrderedConfiguration<HibernateConfigurer>
config)
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default">public static void
contributeHibernateSessionSource(OrderedConfiguration<HibernateConfigurer>
config)
{
config.add("Widget", new WidgetHibernateConfigurer());
}</pre>
-</div></div><p>Note that the configuration is an OrderedConfiguration. The
library contributes two configurers by
default:</p><ul><li><strong>Default</strong> - performs default hibernate
configuration</li><li><strong>PackageName</strong> - loads entities by package
name as contributed to the HibernateEntityPackageManager service</li></ul><h2
id="Hibernate-Core-Conf-HibernateEntityPackageManagerConfiguration">HibernateEntityPackageManager
Configuration</h2><p>This configuration is a set of package names, identifying
where to search for entity classes.</p><p>For each package contributed, the
library will:</p><ul><li><a class="external-link"
href="http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/cfg/AnnotationConfiguration.html#addPackage(java.lang.String)"
rel="nofollow">Add the package to the configuration</a>, which will load
annotations from the package-info class within the named package, if
present.</li><li>Every Java class in the package (or any subpackage) will b
e <a class="external-link"
href="http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/cfg/AnnotationConfiguration.html#addAnnotatedClass(java.lang.Class)"
rel="nofollow">added as an annotated class</a>. This excludes inner classes,
but includes all other classes.</li></ul><p>By default, the package
<em>application-root-package.entities</em> is scanned as described above. If
you have additional packages containing entities, you must <a
href="configuration.html">contribute</a> them to the
tapestry.hibernate.HibernateEntityPackageManager service
configuration.</p><p>Example:</p>Error rendering macro 'code': Invalid value
specified for parameter 'firstline'<pre>public static void
contributeHibernateEntityPackageManager(Configuration<String>
configuration)
+</div></div><p>Note that the configuration is an OrderedConfiguration. The
library contributes two configurers by
default:</p><ul><li><strong>Default</strong> - performs default hibernate
configuration</li><li><strong>PackageName</strong> - loads entities by package
name as contributed to the HibernateEntityPackageManager service</li></ul><h2
id="Hibernate-Core-Conf-HibernateEntityPackageManagerConfiguration">HibernateEntityPackageManager
Configuration</h2><p>This configuration is a set of package names, identifying
where to search for entity classes.</p><p>For each package contributed, the
library will:</p><ul><li><a class="external-link"
href="http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/cfg/AnnotationConfiguration.html#addPackage(java.lang.String)"
rel="nofollow">Add the package to the configuration</a>, which will load
annotations from the package-info class within the named package, if
present.</li><li>Every Java class in the package (or any subpackage) will b
e <a class="external-link"
href="http://docs.jboss.org/hibernate/stable/core/api/org/hibernate/cfg/AnnotationConfiguration.html#addAnnotatedClass(java.lang.Class)"
rel="nofollow">added as an annotated class</a>. This excludes inner classes,
but includes all other classes.</li></ul><p>By default, the package
<em>application-root-package.entities</em> is scanned as described above. If
you have additional packages containing entities, you must <a
href="configuration.html">contribute</a> them to the
tapestry.hibernate.HibernateEntityPackageManager service
configuration.</p><p>Example:</p>Error rendering macro 'code': Invalid value
specified for parameter
'com.atlassian.confluence.ext.code.render.InvalidValueException'<pre>public
static void contributeHibernateEntityPackageManager(Configuration<String>
configuration)
{
configuration.add("org.example.myapp.domain");
}</pre><p>You may add as many packages in this manner as you wish. This option
is most often used when the entities themselves are contained in a library
included within an application, rather than part of the application
directly.</p><h1 id="Hibernate-Core-Conf-HibernateSymbols">Hibernate
Symbols</h1><p>The Hibernate integration includes a number of <a
href="symbols.html">symbols</a> used to control certain features:</p><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p>tapestry.hibernate.provide-entity-value-encoders</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If true (the default) then
ValueEncoders are automatically provided for all Hibernate entities
(ValueEncoders are used to encode the primary keys of entities as strings that
can be included in URLs). Set to false if you want direct control over this
feature.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>tapestry.hiberna
te.default-configuration</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>If true (the default), then the application must
include a <code>hibernate.cfg.xml</code> file. If your application configures
itself entirely in code, you should set this symbol to
false.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>tapestry.hibernate.early-startup</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>If "true", the Hibernate is
initialized when the application starts up. The default is "false", to start
Hibernate up lazily, on first use.</p></td></tr></tbody></table></div></div>
Modified: websites/production/tapestry/content/hibernate-core.html
==============================================================================
--- websites/production/tapestry/content/hibernate-core.html (original)
+++ websites/production/tapestry/content/hibernate-core.html Sun Apr 26
21:22:55 2020
@@ -76,56 +76,58 @@
+
+
<h3>Related Articles</h3>
<ul class="content-by-label"><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="using-tapestry-with-hibernate.html">Using
Tapestry With Hibernate</a>
+ <a href="hibernate-user-guide.html">Hibernate User
Guide</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-support-faq.html">Hibernate
Support FAQ</a>
+ <a href="using-tapestry-with-hibernate.html">Using
Tapestry With Hibernate</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate.html">Hibernate</a>
+ <a href="hibernate-statistics.html">Hibernate
Statistics</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-statistics.html">Hibernate
Statistics</a>
+ <a href="hibernate.html">Hibernate</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-user-guide.html">Hibernate User
Guide</a>
+ <a href="hibernate-core.html">Hibernate - Core</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
<a href="hibernate-core-conf.html">Hibernate - Core -
Conf</a>
@@ -134,10 +136,10 @@
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-core.html">Hibernate - Core</a>
+ <a href="hibernate-support-faq.html">Hibernate
Support FAQ</a>
</div>
Modified: websites/production/tapestry/content/hibernate-support-faq.html
==============================================================================
--- websites/production/tapestry/content/hibernate-support-faq.html (original)
+++ websites/production/tapestry/content/hibernate-support-faq.html Sun Apr 26
21:22:55 2020
@@ -78,11 +78,11 @@
<div id="content">
<div id="ConfluenceContent"><h1
id="HibernateSupportFAQ-HibernateSupport">Hibernate Support</h1><p>Main
article: <a href="hibernate.html">Hibernate</a></p><h2
id="HibernateSupportFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1587536401683 {padding: 0px;}
-div.rbtoc1587536401683 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1587536401683 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1587936063847 {padding: 0px;}
+div.rbtoc1587936063847 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1587936063847 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1587536401683">
+/*]]>*/</style></p><div class="toc-macro rbtoc1587936063847">
<ul class="toc-indentation"><li><a
href="#HibernateSupportFAQ-HowdoIgetHibernatetostartupupwhentheapplicationstartsup,ratherthanlazilywiththefirstrequestfortheapplication?">How
do I get Hibernate to startup up when the application starts up, rather than
lazily with the first request for the application?</a></li></ul>
</div><h2
id="HibernateSupportFAQ-HowdoIgetHibernatetostartupupwhentheapplicationstartsup,ratherthanlazilywiththefirstrequestfortheapplication?">How
do I get Hibernate to startup up when the application starts up, rather than
lazily with the first request for the application?</h2><p>This was a minor
problem in 5.0; by 5.1 it is just a matter of overriding the configuration
system <code>tapestry.hibernate-early-startup</code> to "true".</p></div>
</div>
Modified: websites/production/tapestry/content/hibernate-user-guide.html
==============================================================================
--- websites/production/tapestry/content/hibernate-user-guide.html (original)
+++ websites/production/tapestry/content/hibernate-user-guide.html Sun Apr 26
21:22:55 2020
@@ -103,7 +103,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-support-faq.html">Hibernate
Support FAQ</a>
+ <a href="hibernate-statistics.html">Hibernate
Statistics</a>
</div>
@@ -112,7 +112,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-statistics.html">Hibernate
Statistics</a>
+ <a href="hibernate.html">Hibernate</a>
</div>
@@ -121,7 +121,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate.html">Hibernate</a>
+ <a href="hibernate-core.html">Hibernate - Core</a>
</div>
@@ -130,7 +130,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-core.html">Hibernate - Core</a>
+ <a href="hibernate-core-conf.html">Hibernate - Core -
Conf</a>
</div>
@@ -139,7 +139,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-core-conf.html">Hibernate - Core -
Conf</a>
+ <a href="hibernate-support-faq.html">Hibernate
Support FAQ</a>
</div>
Modified: websites/production/tapestry/content/hibernate.html
==============================================================================
--- websites/production/tapestry/content/hibernate.html (original)
+++ websites/production/tapestry/content/hibernate.html Sun Apr 26 21:22:55 2020
@@ -76,56 +76,58 @@
+
+
<h3>Related Articles</h3>
<ul class="content-by-label"><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="using-tapestry-with-hibernate.html">Using
Tapestry With Hibernate</a>
+ <a href="hibernate-user-guide.html">Hibernate User
Guide</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-support-faq.html">Hibernate
Support FAQ</a>
+ <a href="using-tapestry-with-hibernate.html">Using
Tapestry With Hibernate</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate.html">Hibernate</a>
+ <a href="hibernate-statistics.html">Hibernate
Statistics</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-statistics.html">Hibernate
Statistics</a>
+ <a href="hibernate.html">Hibernate</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-user-guide.html">Hibernate User
Guide</a>
+ <a href="hibernate-core.html">Hibernate - Core</a>
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
<a href="hibernate-core-conf.html">Hibernate - Core -
Conf</a>
@@ -134,10 +136,10 @@
</div>
</li><li>
<div>
- <span class="icon aui-icon aui-icon-small
aui-iconfont-page-default" title="Page">Page:</span> </div>
+ <span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="hibernate-core.html">Hibernate - Core</a>
+ <a href="hibernate-support-faq.html">Hibernate
Support FAQ</a>
</div>
Modified: websites/production/tapestry/content/https.html
==============================================================================
--- websites/production/tapestry/content/https.html (original)
+++ websites/production/tapestry/content/https.html Sun Apr 26 21:22:55 2020
@@ -102,7 +102,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="security.html">Security</a>
+ <a href="security-faq.html">Security FAQ</a>
</div>
@@ -111,7 +111,7 @@
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="security-faq.html">Security FAQ</a>
+ <a href="security.html">Security</a>
</div>
Modified:
websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html
==============================================================================
---
websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html
(original)
+++
websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html
Sun Apr 26 21:22:55 2020
@@ -77,7 +77,7 @@
<div id="content">
<div id="ConfluenceContent"><p><span><br
clear="none"></span></p><p><span>Let's start building a basic Hi-Lo Guessing
game.</span></p><p>In the game, the computer selects a number between 1 and 10.
You try and guess the number, clicking links. At the end, the computer tells
you how many guesses you required to identify the target number. Even a simple
example like this will demonstrate several important concepts in
Tapestry:</p><ul><li>Breaking an application into individual
pages</li><li>Transferring information from one page to
another</li><li>Responding to user interactions</li><li>Storing client
information in the server-side session</li></ul><p>We'll build this little
application in small pieces, using the kind of iterative development that
Tapestry makes so easy.</p><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
src="implementing-the-hi-lo-guessing-game.data/hilo-flow.png"></span></p><p>Our
page flow is very simple, con
sisting of three pages: Index (the starting page), Guess and GameOver. The
Index page introduces the application and includes a link to start guessing.
The Guess page presents the user with ten links, plus feedback such as "too
low" or "too high". The GameOver page tells the user how many guesses they took
before finding the target number.</p><h1
id="ImplementingtheHi-LoGuessingGame-IndexPage">Index Page</h1><p>Let's get to
work on the Index page and template. Make Index.tml look like this:</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Index.tml</b></div><div
class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"><html t:type="layout" title="Hi/Lo Guess"
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml;
gutter: false; theme: Default" data-theme="Default"><html t:type="layout"
title="Hi/Lo Guess"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<p>
@@ -90,19 +90,19 @@
</html>
</pre>
</div></div><p>And edit the corresponding Java class, Index.java, removing its
body (but you can leave the imports in place for now):</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>Index.java</b></div><div
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">package com.example.tutorial1.pages;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default">package
com.example.tutorial1.pages;
public class Index
{
}
</pre>
</div></div><p>Running the application gives us our start:</p><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
src="implementing-the-hi-lo-guessing-game.data/hilo-1.png"></span></p><p>However,
clicking the link doesn't do anything yet, as its just a placeholder <a>
tag, not an actual Tapestry component. Let's think about what should happen
when the user clicks that link:</p><ul><li>A random target number between 1 and
10 should be selected</li><li>The number of guesses taken should be reset to
0</li><li>The user should be sent to the Guess page to make a
guess</li></ul><p>Our first step is to find out when the user clicks that
"start guessing" link. In a typical web application framework, we might start
thinking about URLs and handlers and maybe some sort of XML configuration file.
But this is Tapestry, so we're going to work with components and methods on our
classes.</p><p>First, the component. We want to perform an action (selecting t
he number) before continuing on to the Guess page. The ActionLink component is
just what we need; it creates a link with a URL that will trigger an action
event in our code ... but that's getting ahead of ourselves. First up, convert
the <a> tag to an ActionLink component:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>Index.tml (partial)</b></div><div
class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"> <p>
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml;
gutter: false; theme: Default" data-theme="Default"> <p>
<t:actionlink t:id="start">start guessing</t:actionlink>
</p>
</pre>
</div></div><p>If you refresh the browser and hover your mouse over the "start
guessing" link, you'll see that its URL is now /tutorial1/index.start, which
identifies the name of the page ("index") and the id of the component
("start").</p><p>If you click the link now, you'll get an error:</p><p><span
class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img
class="confluence-embedded-image" width="500"
src="implementing-the-hi-lo-guessing-game.data/hilo-index-missing-action-error.png"></span></p><p>Tapestry
is telling us that we need to provide some kind of event handler for that
event. What does that look like?</p><p>An event handler is a method of the Java
class with a special name. The name is
<code>on</code><strong><em>Eventname</em></strong><code>From</code><strong><em>Component-id</em></strong>
... here we want a method named <code>onActionFromStart()</code>. How do we
know that "action" is the right event name? Because that's what ActionLink
does, that's
why its named <strong><em>Action</em></strong>Link.</p><p>Once again, Tapestry
gives us options; if you don't like naming conventions, there's an @<a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/OnEvent.html">OnEvent</a>
annotation you can place on the method instead, which restores the freedom to
name the method as you like. Details about this approach are in the <a
href="user-guide.html">Tapestry Users' Guide</a>. We'll be sticking with the
naming convention approach for the tutorial.</p><p>When handling a component
event request (the kind of request triggered by the ActionLink component's
URL), Tapestry will find the component and trigger a component event on it.
This is the callback our server-side code needs to figure out what the user is
doing on the client side. Let's start with an empty event handler:</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bot
tom-width: 1px;"><b>Index.java</b></div><div class="codeContent panelContent
pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">package com.example.tutorial1.pages;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default">package
com.example.tutorial1.pages;
public class Index
{
@@ -113,7 +113,7 @@ public class Index
}
</pre>
</div></div><p>In the browser, we can re-try the failed component event
request by hitting the refresh button ... or we can restart the application. In
either case, we get the default behavior, which is simply to re-render the
page.</p><p>Note that the event handler method does not have to be public; it
can be protected, private, or package private (as in this example). By
convention, such methods are package private, if for no other reason than it is
the minimal amount of characters to type.</p><p>Hmm... right now you have to
trust us that the method got invoked. That's no good ... what's a quick way to
tell for sure? One way would be have the method throw an exception, but that's
a bit ugly.</p><p>How about this: add the @<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Log.html">Log</a>
annotation to the method:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeHeader panelHeader pdl" style="border
-bottom-width: 1px;"><b>Index.java (partial)</b></div><div class="codeContent
panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">import org.apache.tapestry5.annotations.Log;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default">import
org.apache.tapestry5.annotations.Log;
. . .
@@ -130,7 +130,7 @@ public class Index
[INFO] AppModule.TimingFilter Request time: 5 ms
</pre>
</div></div><p>The @Log annotation directs Tapestry to log method entry and
exit. You'll get to see any parameters passed into the method, and any return
value from the method ... as well as any exception thrown from within the
method. It's a powerful debugging tool. This is an example of Tapestry's
meta-programming power, something we'll use quite a bit of in the
tutorial.</p><p>Why do we see two requests for one click? Tapestry uses an
approach based on the <a class="external-link"
href="http://en.wikipedia.org/wiki/Post/Redirect/Get"
rel="nofollow">Post/Redirect/Get</a> pattern. In fact, Tapestry generally
performs a redirect after each component event. So the first request was to
process the action, and the second request was to re-render the Index page. You
can see this in the browser, because the URL is still "/tutorial1" (the URL for
rendering the Index page). We'll return to this in a bit.</p><p>We're ready for
the next step, which involves tying together the Index and Gues
s pages. Index will select a target number for the user to Guess, then "pass
the baton" to the Guess page.</p><p>Let's start by thinking about the Guess
page. It needs a variable to store the target value in, and it needs a method
that the Index page can invoke, to set up that target value.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Guess.java</b></div><div
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">package com.example.tutorial1.pages;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default">package
com.example.tutorial1.pages;
public class Guess
{
@@ -143,7 +143,7 @@ public class Guess
}
</pre>
</div></div><p>Create that Guess.java file in the same folder as Index.java.
Next, we can modify Index to invoke the <code>setup()</code> method of our new
Guess page class:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width:
1px;"><b>Index.java (revised)</b></div><div class="codeContent panelContent
pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">package com.example.tutorial1.pages;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default">package
com.example.tutorial1.pages;
import java.util.Random;
@@ -168,7 +168,7 @@ public class Index
}
</pre>
</div></div><p>The new event handler method now chooses the target number, and
tells the Guess page about it. Because Tapestry is a managed environment, we
don't just create an instance of Guess ... it is Tapestry's responsibility to
manage the life cycle of the Guess page. Instead, we ask Tapestry for the Guess
page, using the @InjectPage annotation.</p><div
class="confluence-information-macro confluence-information-macro-note"><span
class="aui-icon aui-icon-small aui-iconfont-warning
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>All fields in a Tapestry page or
component class must be <strong>non-public</strong>.</p></div></div><p>Once we
have that Guess page instance, we can invoke methods on it
normally.</p><p>Returning a page instance from an event handler method directs
Tapestry to send a client-side redirect to the returned page, rather than
sending a redirect for the active page. Thus once the user clicks the "start
guessing" lin
k, they'll see the Guess page.</p><div class="confluence-information-macro
confluence-information-macro-warning"><span class="aui-icon aui-icon-small
aui-iconfont-error confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>When creating your own
applications, make sure that the objects stored in final variables are thread
safe. It seems counter-intuitive, but final variables are shared across many
threads. Ordinary instance variables are not. Fortunately, the implementation
of Random is, in fact, thread safe.</p></div></div><p>So ... let's click the
link and see what we get:</p><p><span class="confluence-embedded-file-wrapper
confluence-embedded-manual-size"><img class="confluence-embedded-image"
width="900"
src="implementing-the-hi-lo-guessing-game.data/guess-template-missing.png"></span></p><p>Ah!
We didn't create a Guess page template. Tapestry was really expecting us to
create one, so we better do so.</p><div class="code panel pdl" style="bo
rder-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width:
1px;"><b>src/main/resources/com/example/tutorial/pages/Guess.tml</b></div><div
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><html t:type="layout" title="Guess The Number"
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default"><html t:type="layout"
title="Guess The Number"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<p>
@@ -178,16 +178,16 @@ public class Index
</html>
</pre>
</div></div><p>Hit the browser's back button, then click the "start guessing"
link again. We're getting closer:</p><p><span
class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img
class="confluence-embedded-image" width="900"
src="implementing-the-hi-lo-guessing-game.data/guess-no-target-prop.png"></span></p><p>If
you scroll down, you'll see the line of the Guess.tml template that has the
error. We have a field named target, but it is private and there's no
corresponding property, so Tapestry was unable to access it.</p><p>We just need
to write the missing JavaBeans accessor methods <code>getTarget()</code> (and
<code>setTarget()</code> for good measure). Or we could let Tapestry write
those methods instead:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> @Property
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default"> @Property
private int target;
</pre>
</div></div><p>The @<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Property.html">Property</a>
annotation very simply directs Tapestry to write the getter and setter method
for you. You only need to do this if you are going to reference the field from
the template.</p><p>We are getting very close but there's one last big oddity
to handle. Once you refresh the page you'll see that target is 0!</p><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
src="implementing-the-hi-lo-guessing-game.data/guess-target-zero.png"></span></p><p>What
gives? We know it was set to at least 1 ... where did the value go?</p><p>As
noted above, Tapestry sends a redirect to the client after handling the event
request. That means that the rendering of the page happens in an entirely new
request. Meanwhile, at the end of each request, Tapestry wipes out the value in
each instance variable. So that means that tar
get <em>was</em> a non-zero number during the component event request ... but
by the time the new page render request comes up from the web browser to render
the Guess page, the value of the target field has reverted back to its default,
zero.</p><p>The solution here is to mark which fields have values that should
persist from one request to the next (and next, and next ...). That's what the
@<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Persist.html">Persist</a>
annotation is for:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> @Property
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default"> @Property
@Persist
private int target;
</pre>
</div></div><p>This doesn't have anything to do with database persistence
(that's coming up in a later chapter). It means that the value is stored in the
HttpSession between requests.</p><p>Go back to the Index page and click the
link again. Finally, we have a target number:</p><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
src="implementing-the-hi-lo-guessing-game.data/guess-target.png"></span></p><p>That's
enough for us to get started. Let's build out the Guess page, and get ready to
let the user make guesses. We'll show the count of guesses, and increment that
count when they make them. We'll worry about high and low and actually
selecting the correct value later.</p><p>When building Tapestry pages, you
sometimes start with the Java code and build the template to match, and
sometime start with the template and build the Java code to match. Both
approaches are valid. Here, lets start with the markup in the template, then
figure out what we
need in the Java code to make it work.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>Guess.tml (revised)</b></div><div
class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"><html t:type="layout" title="Guess The Number"
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml;
gutter: false; theme: Default" data-theme="Default"><html t:type="layout"
title="Guess The Number"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">
@@ -211,7 +211,7 @@ public class Index
</html>
</pre>
</div></div><p>So it looks like we need a <code>guessCount</code> property
that starts at 1.</p><p>We're also seeing one new component, the Loop
component. A Loop component iterates over the values passed to it in its
<code>source</code> parameter, and renders it body once for each value. It
updates the property bound to its <code>value</code> parameter before rendering
its body.</p><p>That special property expression, <code>1..10</code>, generates
a series of numbers from 1 to 10, inclusive. usually, when you use the Loop
component, you are iterating over a List or Collection of values, such as the
results of a database query.</p><p>So, the Loop component is going to set the
<code>current</code> property to 1, and render its body (the \<li\> tag,
and the ActionLink component). Then its going to set the <code>current</code>
property to 2 and render its body again ... all the way up to 10.</p><p>And
notice what we're doing with the ActionLink component; its no longer enough to
know the user clicked on the ActionLink ... we need to know <em>which
iteration</em> the user clicked on. The <code>context</code> parameter allows a
value to be added to the ActionLink's URL, and we can get it back in the event
handler method.</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>The URL for the ActionLink will be
<code>/tutorial1/guess.makeguess/3</code>. That's the page name, "Guess", the
component id, "makeGuess", and the context value, "3".</p></div></div><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Guess.java
(revised)</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">package com.example.tutorial1.pages;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default">package
com.example.tutorial1.pages;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
@@ -239,7 +239,7 @@ public class Guess
}
</pre>
</div></div><p>The revised version of Guess includes two new properties:
<code>current</code> and <code>guessCount</code>. There's also a handler for
the action event from the makeGuess ActionLink component; currently it just
increments the count.</p><p>Notice that the
<code>onActionFromMakeGuess()</code> method now has a parameter: the context
value that was encoded into the URL by the ActionLink. When then user clicks
the link, Tapestry will automatically extract the string from the URL, convert
it to an int and pass that int value into the event handler method. More
boilerplate code you don't have to write.</p><p>At this point, the page is
partially operational:</p><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image"
src="implementing-the-hi-lo-guessing-game.data/guess-1.png"></span></p><p>Our
next step is to actually check the value provided by the user against the
target and provide feedback: either they guessed too high, or too low, or just
right. If they get it just right, we'll switch to the GameOver page with a
message such as "You guessed the number 5 in 2 guesses".</p><p>Let's start with
the Guess page; it now needs a new property to store the message to be
displayed to the user, and needs a field for the injected GameOver
page:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width:
1px;"><b>Guess.java (partial)</b></div><div class="codeContent panelContent
pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> @Property
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default"> @Property
@Persist(PersistenceConstants.FLASH)
private String message;
@@ -247,7 +247,7 @@ public class Guess
private GameOver gameOver;
</pre>
</div></div><p>First off, we're seeing a variation of the @Persist annotation,
where a persistence <em>strategy</em> is provided by name. <a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/PersistenceConstants.html#FLASH">FLASH</a>
is a built-in strategy that stores the value in the session, but only for one
request ... it's designed specifically for these kind of feedback messages. If
you hit F5 in the browser, to refresh, the page will render but the message
will disappear.</p><p>Next, we need some more logic in the
<code>onActionFromMakeGuess()</code> event handler method:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>Guess.java (partial)</b></div><div
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> Object onActionFromMakeGuess(int value)
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default"> Object
onActionFromMakeGuess(int value)
{
if (value == target)
{
@@ -264,7 +264,7 @@ public class Guess
}
</pre>
</div></div><p>Again, very straight-forward. If the value is correct, then we
configure the GameOver page and return it, causing a redirect to that page.
Otherwise, we increment the number of guesses, and format the message to
display to the user.</p><p>In the template, we just need to add some markup to
display the message:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width:
1px;"><b>Guess.tml (partial)</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"> <strong>Guess number
${guessCount}</strong>
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml;
gutter: false; theme: Default" data-theme="Default"> <strong>Guess
number ${guessCount}</strong>
<t:if test="message">
<p>
@@ -273,7 +273,7 @@ public class Guess
</t:if>
</pre>
</div></div><p>This snippet uses Tapestry's <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html">If</a>
component. The If component evaluates its <code>test</code> parameter and, if
the value evaluates to true, renders its body. The property bound to
<code>test</code> doesn't have to be a boolean; Tapestry treats
<code>null</code> as false, it treats zero as false and non-zero as true, it
treats an empty Collection as false ... and for Strings (such as
<code>message</code>) it treats a blank string (one that is null, or consists
only of white space) as false, and a non-blank string is true.</p><p>We can
wrap up with the "GameOver" page:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>GameOver.java</b></div><div
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">package com.example.tutorial1.pages;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default">package
com.example.tutorial1.pages;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
@@ -292,7 +292,7 @@ public class GameOver
}
</pre>
</div></div><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width:
1px;"><b>GameOver.tml</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default"
style="font-size:12px;"><html t:type="layout" title="Game Over"
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml;
gutter: false; theme: Default" data-theme="Default"><html t:type="layout"
title="Game Over"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
xmlns:p="tapestry:parameter">
Modified: websites/production/tapestry/content/index.html
==============================================================================
--- websites/production/tapestry/content/index.html (original)
+++ websites/production/tapestry/content/index.html Sun Apr 26 21:22:55 2020
@@ -47,16 +47,10 @@
.blogSurtitle { background: none repeat scroll 0 0 #569D2F; border: 2px
solid #DDDDDD; color: #FFFFFF; margin: 1px 1px 10px; padding:
3px;}a.blogDate { color: #FFFFFF; }a.blogHeading { color: #569D2F; font-size:
14px; }#col p { text-align : justify; font-size : 11px; line-height : 1.2
!important }
</style>
-<p></p><div class="row" id="top"><div class="col-md-8 home-banner"><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image
confluence-external-resource"
src="https://tapestry.apache.org/images/tapestry.png"
data-image-src="https://tapestry.apache.org/images/tapestry.png"></span></p></div>
+<p><br clear="none"></p><div class="row" id="top"><div class="col-md-8
home-banner"><p><span class="confluence-embedded-file-wrapper"><img
class="confluence-embedded-image confluence-external-resource"
src="https://tapestry.apache.org/images/tapestry.png"
data-image-src="https://tapestry.apache.org/images/tapestry.png"></span></p></div>
-<div class="col-md-4" style="padding: 0 2em 2em"><div><p></p><form
enctype="application/x-www-form-urlencoded" method="get"
action="https://tapestry.apache.org/search.html">
-<input type="text" name="q">
-<input type="submit" value="Search">
-</form></div>
-
-
-<p><br clear="none">A component-oriented framework for creating highly
scalable web applications in Java.</p></div>
+<div class="col-md-4" style="padding: 0 2em 2em"><p>A component-oriented
framework for creating highly scalable web applications in Java.</p></div>
</div>
Added: websites/production/tapestry/content/indexv2-old.data/Feed-icon.gif
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/Feed-icon.gif
------------------------------------------------------------------------------
svn:mime-type = image/gif
Added: websites/production/tapestry/content/indexv2-old.data/cubiculus.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/cubiculus.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/demos.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/demos.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/download.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/download.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/faqsCol.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/faqsCol.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/forbidden.gif
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/forbidden.gif
------------------------------------------------------------------------------
svn:mime-type = image/gif
Added: websites/production/tapestry/content/indexv2-old.data/mybet.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/mybet.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/oed.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/oed.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/plugins.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/plugins.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/recurtrack.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/recurtrack.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/seesaw.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/seesaw.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/twitterTapestry.png
==============================================================================
Binary file - no diff available.
Propchange:
websites/production/tapestry/content/indexv2-old.data/twitterTapestry.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/twitter_icon.png
==============================================================================
Binary file - no diff available.
Propchange:
websites/production/tapestry/content/indexv2-old.data/twitter_icon.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/wooki.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/wooki.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.data/yanomo.png
==============================================================================
Binary file - no diff available.
Propchange: websites/production/tapestry/content/indexv2-old.data/yanomo.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: websites/production/tapestry/content/indexv2-old.html
==============================================================================
--- websites/production/tapestry/content/indexv2-old.html (added)
+++ websites/production/tapestry/content/indexv2-old.html Sun Apr 26 21:22:55
2020
@@ -0,0 +1,287 @@
+<!DOCTYPE html>
+
+ <!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<html>
+<head>
+ <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+ <meta http-equiv="x-ua-compatible" content="IE=9">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>
+ IndexV2-old -- Apache Tapestry
+ </title>
+ <link type="text/css" rel="stylesheet" href="/resources/space.css" />
+
+
+ <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
+
+</head>
+
+<body>
+
+ <div class="wrapper bs">
+
+ <div id="navigation"><div class="nav"><ul class="alternate"><li><a
href="index.html">Home</a></li><li><a href="getting-started.html">Getting
Started</a></li><li><a href="documentation.html">Documentation</a></li><li><a
href="download.html">Download</a></li><li><a
href="about.html">About</a></li><li><a class="external-link"
href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li><li><a
href="community.html">Community</a></li><li><a class="external-link"
href="http://www.apache.org/security/">Security</a></li><li><a
class="external-link" href="http://www.apache.org/">Apache</a></li><li><a
class="external-link"
href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a
class="external-link"
href="http://www.apache.org/foundation/thanks.html">Thanks</a></li></ul></div>
+
+</div>
+
+ <div id="top">
+ <div id="smallbanner"><div class="searchbox"
style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999;
font-size: 90%">Tapestry docs, issues, wikis & blogs:</span>
+<form enctype="application/x-www-form-urlencoded" method="get"
action="https://tapestry.apache.org/search.html">
+ <input type="text" name="q">
+ <input type="submit" value="Search">
+</form>
+
+</div>
+
+
+<div class="emblem" style="float:left"><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image
confluence-external-resource"
src="https://tapestry.apache.org/images/tapestry_small.png"
data-image-src="https://tapestry.apache.org/images/tapestry_small.png"></span></p></div>
+
+
+<div class="title" style="float:left; margin: 0 0 0 3em"><h1
id="SmallBanner-PageTitle">IndexV2-old</h1></div>
+
+</div>
+ <div class="clearer"></div>
+ </div>
+
+ <div class="clearer"></div>
+
+ <div id="breadcrumbs">
+ <a href="index.html">Apache Tapestry</a> > <a
href="home.html">Index</a> > <a
href="indexv2-old.html">IndexV2-old</a>
+ <a class="edit" title="Edit this page (requires approval -- just ask
on the mailing list)"
href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=61327562">edit</a>
+ </div>
+
+ <div id="content">
+ <div id="ConfluenceContent">
+<link rel="stylesheet" type="text/css"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
+<script src="http://platform.twitter.com/widgets.js"></script>
+<style type="text/css">
+.blogSurtitle { background: none repeat scroll 0 0 #569D2F; border: 2px
solid #DDDDDD; color: #FFFFFF; margin: 1px 1px 10px; padding:
3px;}a.blogDate { color: #FFFFFF; }a.blogHeading { color: #569D2F; font-size:
14px; }#col p { text-align : justify; font-size : 11px; line-height : 1.2
!important }
+</style>
+
+<p></p><div class="row" id="top"><div class="col-md-8"><h1
id="IndexV2-old-"><span class="confluence-embedded-file-wrapper"><img
class="confluence-embedded-image confluence-external-resource"
src="http://tapestry.apache.org/images/tapestry.png"
data-image-src="http://tapestry.apache.org/images/tapestry.png"></span> </h1></div>
+
+
+<div class="col-md-4" style="padding: 0 2em 2em"><div><p></p><form
enctype="application/x-www-form-urlencoded" method="get"
action="http://tapestry.apache.org/search.html">
+<input type="text" name="q">
+<input type="submit" value="Search">
+</form></div>
+
+
+<p><br clear="none">A component-oriented framework for creating highly
scalable web applications in Java.</p></div>
+
+
+</div>
+
+ <div class="row" id="features"><div class="col-sm-4"><h3
id="IndexV2-old-JavaPower">Java Power</h3><div class="feature
relief"><p>Tapestry pages and components are simple Java POJOs, with easy
access to all Java language features and the vast Java ecosystem. Thanks to
Java's advanced concurrency API, Tapestry handles requests <em>fast</em>
without sacrificing security or stability.</p></div>
+
+
+</div>
+
+
+<div class="col-sm-4"><h3 id="IndexV2-old-ScriptingEase">Scripting
Ease</h3><div class="feature relief"><p>Tapestry features <em>live class
reloading</em>: change your Java code, refresh the browser and see the
changes... instantly! Have your cake and eat it too: the speed and depth of
Java, the agile development style of Ruby or Python.</p></div>
+
+
+</div>
+
+
+<div class="col-sm-4"><h3 id="IndexV2-old-SuperProductivity">Super
Productivity</h3><div class="feature relief"><p> Simple POJO classes,
streamlined templates, live class reloading, state-of-the-art exception
reporting, first-class Ajax support, and a big library of built-in components:
Tapestry is designed from the ground up to give you great
productivity.</p></div>
+
+
+</div>
+
+
+</div>
+
+<div id="bar"><p><strong>We think you will love Tapestry!</strong> Give us 20
minutes and <strong><a href="getting-started.html">follow our quickstart
guide</a></strong>.</p></div>
+
+
+<div class="row"><div class="col-md-8" id="left-content"><div class="row"
id="downloadbox"><div class="col-sm-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="indexv2-old.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-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"
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"
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>
+
+
+<div style="margin:1em"><p></p><div class="error"><span
class="error">Error</span> CSS Stylesheet macro - URL
'whatistapestry.data/Chat.png' is not whitelisted. If you want to include this
content, contact your Confluence administrator to request <a
href="https://confluence.atlassian.com/doc/configuring-the-whitelist-381255821.html">whitelisting</a>
this URL.</div><div class="row" id="whatIs"><h3
id="IndexV2-old-WhatisTapestry?">What is Tapestry?</h3><div
class="col-md-6"><div id="is-polyglot"><h4
id="IndexV2-old-PureJavaandPolyglot">Pure Java and Polyglot</h4><p>Written in
pure Java: code your pages and components in Java, Groovy or Scala.</p></div>
+
+
+<div id="is-productive"><h4 id="IndexV2-old-HighlyProductive">Highly
Productive</h4><p>Live class reloading means that the time between seeing an
error and providing the fix is seconds, not minutes.</p></div>
+
+
+<div id="is-reporting"><h4
id="IndexV2-old-AdvancedExceptionReporting">Advanced Exception
Reporting</h4><p>Gives you all the tools you need to fix your problem: not just
a stack trace, but details about what Tapestry was doing and why, what went
wrong, and how to fix it.</p></div>
+
+
+<div id="is-fast"><h4 id="IndexV2-old-Fast">Fast</h4><p>Pure Java; no
reflection, not even for property expressions. Built to cleanly support large
numbers of concurrent threads without contention. Integrated GZip content
compression, JavaScript aggregation and compression, and client-side
caching.</p></div>
+
+
+</div>
+
+
+<div class="col-md-6"><div id="is-injection"><h4
id="IndexV2-old-ConventionoverConfiguration">Convention over
Configuration</h4><p>Dependency injection and meta-programming through
annotations and naming conventions.</p></div>
+
+
+<div id="is-scalable"><h4 id="IndexV2-old-Scalable">Scalable</h4><p>Scales up
big on a single server, and works great in a cluster. Keeps session state
minimal by design.</p></div>
+
+
+<div id="is-testable"><h4 id="IndexV2-old-Testable">Testable</h4><p>Committed
to testability throughout design; built-in utilities to enhance TDD. Support
for Selenium for integration testing.</p></div>
+
+
+<div id="is-modular"><h4 id="IndexV2-old-AdaptableandModular">Adaptable and
Modular</h4><p>Architecture is open and extensible. There's a clean way to add
your own extensions, or override built-in logic. Provides integration with
Hibernate, JPA and Spring. Third-party integrations with other tools, such as
Quartz and Lucene.</p></div>
+
+
+</div>
+
+
+</div>
+
+ </div>
+
+
+<div style="margin: 1em"><p>More on <a href="principles.html">Tapestry
philosophy</a> - Who uses <a href="applications.html">Tapestry </a>?</p><p><a
class="external-link" href="http://twitter.com/apachetapestry"
rel="nofollow"><span class="confluence-embedded-file-wrapper"><img
class="confluence-embedded-image"
src="indexv2-old.data/twitterTapestry.png"></span></a></p></div>
+
+
+</div>
+
+
+<div class="col-md-4" id="twitter-container"><a class="twitter-timeline"
href="https://twitter.com/hashtag/tapestry5"
data-widget-id="585196873335574528">#tapestry5 Tweets</a>
+ <h3 id="IndexV2-old-Latestnews"><a href="news.html">Latest news</a> <a
href="https://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&spaces=TAPESTRY&title=Apache+Tapestry+News+RSS+Feed&labelString%3D&sort=created&maxResults=10&timeSpan=12&confirm=Create&showContent=true&showDiff=false"><span
class="confluence-embedded-file-wrapper"><img
class="confluence-embedded-image"
src="indexv2-old.data/Feed-icon.gif"></span></a></h3>
+
+
+
+<div class="blog-post-listing">
+ <div class="logo-heading-block">
+ <span class="logoBlock">
+ <span class="aui-avatar aui-avatar-large">
+ <span class="aui-avatar-inner">
+ <a class="userLogoLink"
href="https://cwiki.apache.org/confluence/display/~thiagohp">
+ <img class="userLogo logo"
src="/images/confluence/icons/profilepics/default.svg" alt="User icon:
thiagohp" title="thiagohp">
+ </a> </span>
+ </span>
+ </span>
+ <span class="blogHeading">
+ <a class="blogHeading"
href="2020/03/23/tapestry-550-released.html">Tapestry 5.5.0 released</a>
+ </span><div class="page-metadata not-personal"> <a
class="url fn confluence-userlink"
href="https://cwiki.apache.org/confluence/display/~thiagohp">Thiago Henrique De
Paula Figueiredo</a> posted on Mar 23, 2020</div>
+
+ </div>
+
+ <div class="wiki-content">
+ Tapestry 5.5.0 is the new major release. To upgrade, just update the
dependency in your build configuration (Maven POM, Gradle build script, etc.)
– or Download the new JAR file -- and the new version should just work.
+The main new features are:
+Support for Java 12 bytecode.
+Support for on-the-fly TypeScript compilation in the tapestry-webresources
module. 
+Ability to use Twitter Bootstrap 3 out-of-the-box (default and same version
provided by Tapestry 5.4),…
+ </div>
+
+
+ </div>
+
+
+<div class="blog-post-listing">
+ <div class="logo-heading-block">
+ <span class="logoBlock">
+ <span class="aui-avatar aui-avatar-large">
+ <span class="aui-avatar-inner">
+ <a class="userLogoLink"
href="https://cwiki.apache.org/confluence/display/~thiagohp">
+ <img class="userLogo logo"
src="/images/confluence/icons/profilepics/default.svg" alt="User icon:
thiagohp" title="thiagohp">
+ </a> </span>
+ </span>
+ </span>
+ <span class="blogHeading">
+ <a class="blogHeading"
href="2019/09/10/tapestry-545-released.html">Tapestry 5.4.5 released</a>
+ </span><div class="page-metadata not-personal"> <a
class="url fn confluence-userlink"
href="https://cwiki.apache.org/confluence/display/~thiagohp">Thiago Henrique De
Paula Figueiredo</a> posted on Sep 10, 2019</div>
+
+ </div>
+
+ <div class="wiki-content">
+ Tapestry 5.4.5 is a drop-in replacement for Tapestry 5.4 releases. To
upgrade, just update the dependency in your build configuration (Maven POM,
Gradle build script, etc.) – or Download the new JAR file -- and the new
version will just work. However, please review the How to Upgrade instructions
before upgrading.
+This is a recommended upgrade due to including security improvements.
+Check 5.4.5 release notes
https://tapestry.apache.org/release-notes-545.html for all the details.
+ </div>
+
+
+ </div>
+
+
+<div class="blog-post-listing">
+ <div class="logo-heading-block">
+ <span class="logoBlock">
+ <span class="aui-avatar aui-avatar-large">
+ <span class="aui-avatar-inner">
+ <a class="userLogoLink"
href="https://cwiki.apache.org/confluence/display/~jkemnade">
+ <img class="userLogo logo"
src="/images/confluence/icons/profilepics/default.svg" alt="User icon:
jkemnade" title="jkemnade">
+ </a> </span>
+ </span>
+ </span>
+ <span class="blogHeading">
+ <a class="blogHeading"
href="2017/04/19/tapestry-542.html">Tapestry 5.4.2</a>
+ </span><div class="page-metadata not-personal"> <a
class="url fn confluence-userlink"
href="https://cwiki.apache.org/confluence/display/~jkemnade">Jochen Kemnade</a>
posted on Apr 19, 2017</div>
+
+ </div>
+
+ <div class="wiki-content">
+ We have created another release in the 5.4.x series. This should be a
drop-in replacement for 5.4.x.
+Release Notes
+ </div>
+
+
+ </div>
+ </div>
+
+
+<p><br clear="none"></p><p><br clear="none"></p></div>
+
+
+<p><br clear="none"></p><p><br clear="none"></p><p><br clear="none"></p><div
style="clear:both"><br clear="none"></div>
+
+</div>
+ </div>
+
+ <div class="clearer"></div>
+
+ <div id="footer">
+ <div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
+ </div>
+
+ <div id="comments_thread"></div>
+ <script type="text/javascript"
src="https://comments.apache.org/show_comments.lua?site=tapestry&page=http://tapestry.apache.org/indexv2-old.html"
async="true">
+ </script>
+ <noscript>
+ <iframe width="100%" height="500"
src="https://comments.apache.org/iframe.lua?site=tapestry&page=http://tapestry.apache.org/indexv2-old.html"></iframe>
+ </noscript>
+
+ </div>
+
+</body>
+</html>
Modified: websites/production/tapestry/content/indexv2.html
==============================================================================
--- websites/production/tapestry/content/indexv2.html (original)
+++ websites/production/tapestry/content/indexv2.html Sun Apr 26 21:22:55 2020
@@ -41,27 +41,20 @@
</div>
<div id="ConfluenceContent">
-<link rel="stylesheet" type="text/css"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
-<script src="http://platform.twitter.com/widgets.js"></script>
+
<style type="text/css">
-.blogSurtitle { background: none repeat scroll 0 0 #569D2F; border: 2px
solid #DDDDDD; color: #FFFFFF; margin: 1px 1px 10px; padding:
3px;}a.blogDate { color: #FFFFFF; }a.blogHeading { color: #569D2F; font-size:
14px; }#col p { text-align : justify; font-size : 11px; line-height : 1.2
!important }
+a.blogDate { color: #FFFFFF; }a.blogHeading { color: #569D2F; font-size: 14px;
}#col p { text-align : justify; font-size : 11px; line-height : 1.2 !important }
</style>
-<p></p><div class="row" id="top"><div class="col-md-8"><h1 id="IndexV2-"><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image
confluence-external-resource"
src="http://tapestry.apache.org/images/tapestry.png"
data-image-src="http://tapestry.apache.org/images/tapestry.png"></span> </h1></div>
-
+<p><br clear="none"></p><div class="row" id="top"><div class="col-md-8
home-banner"><p><span class="confluence-embedded-file-wrapper"><img
class="confluence-embedded-image confluence-external-resource"
src="https://tapestry.apache.org/images/tapestry.png"
data-image-src="https://tapestry.apache.org/images/tapestry.png"></span></p></div>
-<div class="col-md-4" style="padding: 0 2em 2em"><div><p></p><form
enctype="application/x-www-form-urlencoded" method="get"
action="http://tapestry.apache.org/search.html">
-<input type="text" name="q">
-<input type="submit" value="Search">
-</form></div>
-
-<p><br clear="none">A component-oriented framework for creating highly
scalable web applications in Java.</p></div>
+<div class="col-md-4" style="padding: 0 2em 2em"><p>A component-oriented
framework for creating highly scalable web applications in Java.</p></div>
</div>
- <div class="row" id="features"><div class="col-sm-4"><h3
id="IndexV2-JavaPower">Java Power</h3><div class="feature relief"><p>Tapestry
pages and components are simple Java POJOs, with easy access to all Java
language features and the vast Java ecosystem. Thanks to Java's advanced
concurrency API, Tapestry handles requests <em>fast</em> without sacrificing
security or stability.</p></div>
+<p></p><div class="row" id="features"><div class="col-sm-4"><h3
id="IndexV2-JavaPower">Java Power</h3><div class="feature relief"><p>Tapestry
pages and components are simple Java POJOs, with easy access to all Java
language features and the vast Java ecosystem. Thanks to Java's advanced
concurrency API, Tapestry handles requests <em>fast</em> without sacrificing
security or stability.</p></div>
</div>
@@ -81,22 +74,10 @@
</div>
-<div id="bar"><p><strong>We think you will love Tapestry!</strong> Give us 20
minutes and <strong><a href="getting-started.html">follow our quickstart
guide</a></strong>.</p></div>
-
+<div id="bar"><p><strong>We think you will love Tapestry!</strong> Give us 20
minutes and <strong> <a href="getting-started.html">follow our quickstart
guide</a> </strong>.</p></div>
-<div class="row"><div class="col-md-8" id="left-content"><div class="row"
id="downloadbox"><div class="col-sm-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="indexv2.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-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"
src="indexv2.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"
src="indexv2.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>
-
-
-<div style="margin:1em"><p></p><div class="error"><span
class="error">Error</span> CSS Stylesheet macro - URL
'whatistapestry.data/Chat.png' is not whitelisted. If you want to include this
content, contact your Confluence administrator to request <a
href="https://confluence.atlassian.com/doc/configuring-the-whitelist-381255821.html">whitelisting</a>
this URL.</div><div class="row" id="whatIs"><h3
id="IndexV2-WhatisTapestry?">What is Tapestry?</h3><div class="col-md-6"><div
id="is-polyglot"><h4 id="IndexV2-PureJavaandPolyglot">Pure Java and
Polyglot</h4><p>Written in pure Java: code your pages and components in Java,
Groovy or Scala.</p></div>
+<div class="row"><div class="col-md-8" id="left-content"><br
clear="none"><p><br clear="none"></p><div style="margin:1em"><p><br
clear="none"></p><div class="row" id="whatIs"><h3
id="IndexV2-WhatisTapestry?">What is Tapestry?</h3><div class="col-md-6"><div
id="is-polyglot"><h4 id="IndexV2-PureJavaandPolyglot">Pure Java and
Polyglot</h4><p>Written in pure Java: code your pages and components in Java,
Groovy or Scala.</p></div>
<div id="is-productive"><h4 id="IndexV2-HighlyProductive">Highly
Productive</h4><p>Live class reloading means that the time between seeing an
error and providing the fix is seconds, not minutes.</p></div>
@@ -131,14 +112,14 @@
 </div>
-<div style="margin: 1em"><p>More on <a href="principles.html">Tapestry
philosophy</a> - Who uses <a href="applications.html">Tapestry </a>?</p><p><a
class="external-link" href="http://twitter.com/apachetapestry"
rel="nofollow"><span class="confluence-embedded-file-wrapper"><img
class="confluence-embedded-image"
src="indexv2.data/twitterTapestry.png"></span></a></p></div>
+<div style="margin: 1em"><p>More on <a href="principles.html">Tapestry
philosophy</a> - Who uses <a href="applications.html">Tapestry </a>?</p><p><a
class="external-link" href="http://twitter.com/apachetapestry" rel="nofollow">
<span class="confluence-embedded-file-wrapper"><img
class="confluence-embedded-image"
src="indexv2.data/twitterTapestry.png"></span> </a></p></div>
</div>
<div class="col-md-4" id="twitter-container"><a class="twitter-timeline"
href="https://twitter.com/hashtag/tapestry5"
data-widget-id="585196873335574528">#tapestry5 Tweets</a>
- <h3 id="IndexV2-Latestnews"><a href="news.html">Latest news</a> <a
href="https://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&spaces=TAPESTRY&title=Apache+Tapestry+News+RSS+Feed&labelString%3D&sort=created&maxResults=10&timeSpan=12&confirm=Create&showContent=true&showDiff=false"><span
class="confluence-embedded-file-wrapper"><img
class="confluence-embedded-image"
src="indexv2.data/Feed-icon.gif"></span></a></h3>
+ <h3 id="IndexV2-Latestnews"><a href="news.html">Latest news</a> <a
href="https://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&spaces=TAPESTRY&title=Apache+Tapestry+News+RSS+Feed&labelString%3D&sort=created&maxResults=10&timeSpan=12&confirm=Create&showContent=true&showDiff=false">
<span class="confluence-embedded-file-wrapper"><img
class="confluence-embedded-image" src="indexv2.data/Feed-icon.gif"></span>
</a></h3>
@@ -222,12 +203,10 @@ Release Notes
</div>
-<p> </p><p> </p></div>
-
+</div>
-<p> </p><p> </p><p> </p><div style="clear:both"> </div>
-</div>
+<p><br clear="none"></p><p><br clear="none"></p><p><br clear="none"></p><p><br
clear="none"><br clear="none"><br clear="none"></p><p><br
clear="none"></p></div>
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
Modified: websites/production/tapestry/content/injection-faq.html
==============================================================================
--- websites/production/tapestry/content/injection-faq.html (original)
+++ websites/production/tapestry/content/injection-faq.html Sun Apr 26 21:22:55
2020
@@ -78,11 +78,11 @@
<div id="content">
<div id="ConfluenceContent"><h1
id="InjectionFAQ-Injection">Injection</h1><p>Main article:  <a
href="injection.html">Injection</a></p><h2
id="InjectionFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1587536394827 {padding: 0px;}
-div.rbtoc1587536394827 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1587536394827 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1587935993577 {padding: 0px;}
+div.rbtoc1587935993577 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1587935993577 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1587536394827">
+/*]]>*/</style></p><div class="toc-macro rbtoc1587935993577">
<ul class="toc-indentation"><li><a
href="#InjectionFAQ-What'sthedifferencebetweenthe@Componentand@InjectComponentannotations?">What's
the difference between the @Component and @InjectComponent
annotations?</a></li><li><a
href="#InjectionFAQ-What'sthedifferencebetweenthe@InjectPageand@InjectContainerannotations?">What's
the difference between the @InjectPage and @InjectContainer
annotations?</a></li><li><a
href="#InjectionFAQ-IgetanexceptionbecauseIhavetwoserviceswiththesameinterface,howdoIhandlethis?">I
get an exception because I have two services with the same interface, how do I
handle this?</a></li><li><a
href="#InjectionFAQ-What'sthedifferencebetween@Injectand@Environmental?">What's
the difference between @Inject and @Environmental?</a></li><li><a
href="#InjectionFAQ-Butwait...IseeIusedthe@Injectannotationanditstillworked.Whatgives?">But
wait ... I see I used the @Inject annotation and it still worked. What
gives?</a></li><li><a href="#InjectionFAQ-Ok,butRequestisasingleto
nservice,notanenvironmental,andIcaninjectthat.IsTapestryreallythreadsafe?">Ok,
but Request is a singleton service, not an environmental, and I can inject
that. Is Tapestry really thread safe?</a></li><li><a
href="#InjectionFAQ-Iuse@Injectonafieldtoinjectaservice,butthefieldisstillnull,whathappened?">I
use @Inject on a field to inject a service, but the field is still null, what
happened?</a></li></ul>
</div><h2
id="InjectionFAQ-What'sthedifferencebetweenthe@Componentand@InjectComponentannotations?">What's
the difference between the <code>@Component</code> and
<code>@InjectComponent</code> annotations?</h2><p>The <code>@Component</code>
annotation is used to define the <em>type</em> of component, and its parameter
bindings. When using <code>@Component</code>, the template must not define the
type, and any parameter bindings are merged in:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: true; theme: Default" data-theme="Default"> <a t:id="home"
class="nav">Back to home</a>