Modified: websites/production/tapestry/content/tapestry-ioc-overview.html
==============================================================================
--- websites/production/tapestry/content/tapestry-ioc-overview.html (original)
+++ websites/production/tapestry/content/tapestry-ioc-overview.html Tue Nov  8 
12:22:26 2016
@@ -44,18 +44,13 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span>
-<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><div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Tapestry IoC Overview</h1></div></div>
+            <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 &amp; blogs:</span><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><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Tapestry IoC Overview</h1></div></div>
       <div class="clearer"></div>
       </div>
 
@@ -67,46 +62,25 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p>Even today, with the 
overwhelming success of <a  class="external-link" 
href="http://www.springframework.org"; rel="nofollow">Spring</a> and the rise of 
smaller, simpler approaches to building applications (in contrast to the 
heavyweight EJB 2.0 approach), many people still have trouble wrapping their 
heads around Inversion of Control.</p><p>Really understanding IoC is a new step 
for many developers. If you can remember back to when you made the transition 
from procedural programming (in C, or BASIC) to object oriented programming, 
you might remember the point where you "got it". The point where it made sense 
to have methods on objects, and data inside objects.</p><p>Inversion of Control 
builds upon those ideas. The goal is to make code more robust (that is, with 
fewer errors), more reusable and much easier to test.</p><p>Prior to IoC 
approaches, most developers were used to a more <em>monolithic</em> design, 
with a few core objects and a
  <code>main()</code> method somewhere that starts the ball rolling. 
<code>main()</code> instantiates the first couple of classes, and those classes 
end up instantiating and using all the other classes in the 
system.</p><p>That's an <em>unmanaged</em> system. Most desktop applications 
are unmanaged, so it's a very familiar pattern, and easy to get your head 
around.</p><p>By contrast, web applications are a <em>managed</em> environment. 
You don't write a main(), you don't control startup. You <em>configure</em> the 
Servlet API to tell it about your servlet classes to be instantiated, and their 
life cycle is totally controlled by the servlet container.</p><p>Inversion of 
Control is just a more general application of this approach. The container is 
ultimately responsible for instantiating and configuring the objects you tell 
it about, and running their entire life cycle of those objects.</p><p>Web 
applications are more complicated to write than monolithic applications, 
largely because o
 f <em>multithreading</em>. Your code will be servicing many different users 
simultaneously across many different threads. This tends to complicate the code 
you write, since some fundamental aspects of object oriented development get 
called into question: in particular, the use of <em>internal state</em> (values 
stored inside instance variables), since in a multithreaded environment, that's 
no longer the safe place it is in traditional development. Shared objects plus 
internal state plus multiple threads equals an broken, unpredictable 
application.</p><p>Frameworks such as Tapestry &#8211; both the IoC container, 
and the web framework itself &#8211; exist to help.</p><p>When thinking in 
terms of IoC, <strong>small is beautiful</strong>. What does that mean? It 
means small classes and small methods are easier to code than large ones. At 
one extreme, we have servlets circa 1997 (and Visual Basic before that) with 
methods a thousand lines long, and no distinction between business logic 
 and view logic. Everything mixed together into an untestable jumble.</p><p>At 
the other extreme is IoC: small objects, each with a specific purpose, 
collaborating with other small objects.</p><p>Using unit tests, in 
collaboration with tools such as <a  class="external-link" 
href="http://easymock.org/"; rel="nofollow">EasyMock</a>, you can have a code 
base that is easy to maintain, easy to extend, and easy to test. And by 
factoring out a lot of <em>plumbing</em> code, your code base will not only be 
easier to work with, it will be smaller.</p><h2 
id="TapestryIoCOverview-LivingontheFrontier">Living on the 
Frontier</h2><p>Coding applications the traditional way is like being a 
homesteader on the American frontier in the 1800's. You're responsible for 
every aspect of your house: every board, every nail, every stick of furniture 
is something you personally created. There <em>is</em> a great comfort in total 
self reliance. Even if your house is small, the windows are a bit drafty or the 
fl
 oorboards creak a little, you know exactly <em>why</em> things are not-quite 
perfect.</p><p>Flash forward to modern cities or modern suburbia and it's a 
whole different story. Houses are built to specification from design plans, 
made from common materials, by many specializing tradespeople. Construction 
codes dictate how plumbing, wiring and framing should be performed. A 
home-owner may not even know how to drive a nail, but can still take comfort in 
draft-free windows, solid floors and working plumbing.</p><p>To extend the 
metaphor, a house in a town is not alone and self-reliant the way a frontier 
house is. The town house is situated on a street, in a neighborhood, within a 
town. The town provides services (utilities, police, fire control, streets and 
sewers) to houses in a uniform way. Each house just needs to connect up to 
those services.</p><h2 id="TapestryIoCOverview-TheWorldoftheContainer">The 
World of the Container</h2><p>So the IoC container is the "town" and in the 
world o
 f the IoC container, everything has a name, a place, and a relationship to 
everything else in the container. Tapestry calls this world "The 
Registry".</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" 
src="tapestry-ioc-overview.data/ioc-overview.png"></span></p><p>Here we're 
seeing a few services from the built-in Tapestry IoC module, and a few of the 
services from the Tapestry web framework module. In fact, there are over 100 
services, all interrelated, in the Registry ... and that's before you add your 
own to the mix. The IoC Registry treats all the services uniformly, regardless 
of whether they are part of Tapestry, or part of your application, or part of 
an add-on library.</p><p>Tapestry IoC's job is to make all of these services 
available to each other, and to the outside world. The outside world could be a 
standalone application, or it could be an application built on top of the 
Tapestry web framework.</p><h2 id="TapestryIoCOverview-Se
 rviceLifeCycle">Service Life Cycle</h2><p>Tapestry services are <em>lazy</em>, 
which means they are not fully instantiated until they are absolutely needed. 
Often, what looks like a service is really a proxy object ... the first time 
any method of the proxy is invoked, the actual service is instantiated and 
initialized (Tapestry uses the term <em>realized</em> for this process). Of 
course, this is all absolutely thread-safe.</p><p>Initially a service is 
<em>defined</em>, meaning some module has defined the service. Later, the 
service will be <em>virtual</em>, meaning a proxy has been created. This occurs 
most often because some other service <em>depends</em> on it, but hasn't gotten 
around to invoking methods on it. Finally, a service that is ready to use is 
<em>realized</em>. What's nice is that your code neither knows nor cares about 
the life cycle of the service, because of the magic of the proxy.</p><p>In 
fact, when a Tapestry web application starts up, before it services its fi
 rst request, only about 20% of the services have been realized; the remainder 
are defined or virtual.</p><h2 id="TapestryIoCOverview-Classvs.Service">Class 
vs. Service</h2><p>A Tapestry service is more than just a class. First of all, 
it is a combination of an <em>interface</em> that defines the operations of the 
service, and an <em>implementation class</em> that implements the 
interface.</p><p>Why this extra division? Having a service interface is what 
lets Tapestry create proxies and perform other operations. It's also a very 
good practice to code to an interface, rather than a specific implementation. 
You'll often be surprised at the kinds of things you can accomplish by 
substituting one implementation for another.</p><p>Tapestry is also very aware 
that a service will have dependencies on other services. It may also have other 
needs ... for example, in Tapestry IoC, the container provides services with 
access to Loggers.</p><p>Tapestry IoC also has support for other configuration
  that may be provided to services when they are realized.</p><h2 
id="TapestryIoCOverview-DependencyInjection">Dependency Injection</h2><p>Main 
Article: <a  href="injection.html">Injection</a></p><div class="aui-label" 
style="float:right" title="Related Articles">
-
-
-
-
-
-
-
-
-<h3>Related Articles</h3>
-
-<ul class="content-by-label"><li>
-        <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
-
-        <div class="details">
-                        <a  href="injection-in-detail.html">Injection in 
Detail</a>
-                
-                        
-                    </div>
-    </li><li>
-        <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
-
-        <div class="details">
-                        <a  href="injection-faq.html">Injection FAQ</a>
-                
-                        
-                    </div>
-    </li><li>
-        <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
-
-        <div class="details">
-                        <a  href="injection.html">Injection</a>
-                
-                        
-                    </div>
-    </li></ul>
-</div><p>Inversion of Control refers to the fact that the container, here 
Tapestry IoC's Registry, instantiates your classes. It decides on when the 
classes get instantiated.</p><p>Dependency Injection is a key part of 
<em>realization</em>: this is how a service is provided with the other services 
it needs to operate. For example, a Data Access Object service may be injected 
with a ConnectionPool service.</p><p>In Tapestry, injection occurs through 
constructors, through parameters to service builder methods, or through direct 
injection into fields. Tapestry prefers constructor injection, as this 
emphasizes that dependencies should be stored in <strong>final</strong> 
variables. This is the best approach towards ensuring thread safety.</p><p>In 
any case, injection "just happens". Tapestry finds the constructor of your 
class and analyzes the parameters to determine what to pass in. In some cases, 
it uses just the parameter type to find a match, in other cases, annotations on 
the parame
 ters may also be used. It also scans through the fields of your service 
implementation class to identify which should have injected values written into 
them.</p><h2 id="TapestryIoCOverview-Whycan'tIjustusenew?">Why can't I just use 
<code>new</code>?</h2><p>That's a common question. All these concepts seem 
alien at first. What's wrong with <code>new</code>?</p><p>The problem with new 
is that it rigidly connects one implementation to another implementation. Let's 
follow a progression that reflects how a lot of projects get written. It will 
show that in the real world, <code>new</code> is not as simple as it first 
seems.</p><p>This example is built around some real-world work that involves a 
Java Messaging Service queue, part of an application performance monitoring 
subsystem for a large application. Code inside each server collects performance 
data of various types and sends it, via a shared JMS queue, to a central server 
for collection and reporting.</p><p>This code is for a metric t
 hat periodically counts the number of rows in a key database table. Other 
implementations of MetricProducer will be responsible for measuring CPU 
utilization, available disk space, number of requests per second, and so 
forth.</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+                <div id="ConfluenceContent"><p>Even today, with the 
overwhelming success of <a  class="external-link" 
href="http://www.springframework.org"; rel="nofollow">Spring</a> and the rise of 
smaller, simpler approaches to building applications (in contrast to the 
heavyweight EJB 2.0 approach), many people still have trouble wrapping their 
heads around Inversion of Control.</p><p>Really understanding IoC is a new step 
for many developers. If you can remember back to when you made the transition 
from procedural programming (in C, or BASIC) to object oriented programming, 
you might remember the point where you "got it". The point where it made sense 
to have methods on objects, and data inside objects.</p><p>Inversion of Control 
builds upon those ideas. The goal is to make code more robust (that is, with 
fewer errors), more reusable and much easier to test.</p><p>Prior to IoC 
approaches, most developers were used to a more <em>monolithic</em> design, 
with a few core objects and a
  <code>main()</code> method somewhere that starts the ball rolling. 
<code>main()</code> instantiates the first couple of classes, and those classes 
end up instantiating and using all the other classes in the 
system.</p><p>That's an <em>unmanaged</em> system. Most desktop applications 
are unmanaged, so it's a very familiar pattern, and easy to get your head 
around.</p><p>By contrast, web applications are a <em>managed</em> environment. 
You don't write a main(), you don't control startup. You <em>configure</em> the 
Servlet API to tell it about your servlet classes to be instantiated, and their 
life cycle is totally controlled by the servlet container.</p><p>Inversion of 
Control is just a more general application of this approach. The container is 
ultimately responsible for instantiating and configuring the objects you tell 
it about, and running their entire life cycle of those objects.</p><p>Web 
applications are more complicated to write than monolithic applications, 
largely because o
 f <em>multithreading</em>. Your code will be servicing many different users 
simultaneously across many different threads. This tends to complicate the code 
you write, since some fundamental aspects of object oriented development get 
called into question: in particular, the use of <em>internal state</em> (values 
stored inside instance variables), since in a multithreaded environment, that's 
no longer the safe place it is in traditional development. Shared objects plus 
internal state plus multiple threads equals an broken, unpredictable 
application.</p><p>Frameworks such as Tapestry &#8211; both the IoC container, 
and the web framework itself &#8211; exist to help.</p><p>When thinking in 
terms of IoC, <strong>small is beautiful</strong>. What does that mean? It 
means small classes and small methods are easier to code than large ones. At 
one extreme, we have servlets circa 1997 (and Visual Basic before that) with 
methods a thousand lines long, and no distinction between business logic 
 and view logic. Everything mixed together into an untestable jumble.</p><p>At 
the other extreme is IoC: small objects, each with a specific purpose, 
collaborating with other small objects.</p><p>Using unit tests, in 
collaboration with tools such as <a  class="external-link" 
href="http://easymock.org/"; rel="nofollow">EasyMock</a>, you can have a code 
base that is easy to maintain, easy to extend, and easy to test. And by 
factoring out a lot of <em>plumbing</em> code, your code base will not only be 
easier to work with, it will be smaller.</p><h2 
id="TapestryIoCOverview-LivingontheFrontier">Living on the 
Frontier</h2><p>Coding applications the traditional way is like being a 
homesteader on the American frontier in the 1800's. You're responsible for 
every aspect of your house: every board, every nail, every stick of furniture 
is something you personally created. There <em>is</em> a great comfort in total 
self reliance. Even if your house is small, the windows are a bit drafty or the 
fl
 oorboards creak a little, you know exactly <em>why</em> things are not-quite 
perfect.</p><p>Flash forward to modern cities or modern suburbia and it's a 
whole different story. Houses are built to specification from design plans, 
made from common materials, by many specializing tradespeople. Construction 
codes dictate how plumbing, wiring and framing should be performed. A 
home-owner may not even know how to drive a nail, but can still take comfort in 
draft-free windows, solid floors and working plumbing.</p><p>To extend the 
metaphor, a house in a town is not alone and self-reliant the way a frontier 
house is. The town house is situated on a street, in a neighborhood, within a 
town. The town provides services (utilities, police, fire control, streets and 
sewers) to houses in a uniform way. Each house just needs to connect up to 
those services.</p><h2 id="TapestryIoCOverview-TheWorldoftheContainer">The 
World of the Container</h2><p>So the IoC container is the "town" and in the 
world o
 f the IoC container, everything has a name, a place, and a relationship to 
everything else in the container. Tapestry calls this world "The 
Registry".</p><p><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image" 
src="tapestry-ioc-overview.data/ioc-overview.png"></span></p><p>Here we're 
seeing a few services from the built-in Tapestry IoC module, and a few of the 
services from the Tapestry web framework module. In fact, there are over 100 
services, all interrelated, in the Registry ... and that's before you add your 
own to the mix. The IoC Registry treats all the services uniformly, regardless 
of whether they are part of Tapestry, or part of your application, or part of 
an add-on library.</p><p>Tapestry IoC's job is to make all of these services 
available to each other, and to the outside world. The outside world could be a 
standalone application, or it could be an application built on top of the 
Tapestry web framework.</p><h2 id="TapestryIoCOverview-Se
 rviceLifeCycle">Service Life Cycle</h2><p>Tapestry services are <em>lazy</em>, 
which means they are not fully instantiated until they are absolutely needed. 
Often, what looks like a service is really a proxy object ... the first time 
any method of the proxy is invoked, the actual service is instantiated and 
initialized (Tapestry uses the term <em>realized</em> for this process). Of 
course, this is all absolutely thread-safe.</p><p>Initially a service is 
<em>defined</em>, meaning some module has defined the service. Later, the 
service will be <em>virtual</em>, meaning a proxy has been created. This occurs 
most often because some other service <em>depends</em> on it, but hasn't gotten 
around to invoking methods on it. Finally, a service that is ready to use is 
<em>realized</em>. What's nice is that your code neither knows nor cares about 
the life cycle of the service, because of the magic of the proxy.</p><p>In 
fact, when a Tapestry web application starts up, before it services its fi
 rst request, only about 20% of the services have been realized; the remainder 
are defined or virtual.</p><h2 id="TapestryIoCOverview-Classvs.Service">Class 
vs. Service</h2><p>A Tapestry service is more than just a class. First of all, 
it is a combination of an <em>interface</em> that defines the operations of the 
service, and an <em>implementation class</em> that implements the 
interface.</p><p>Why this extra division? Having a service interface is what 
lets Tapestry create proxies and perform other operations. It's also a very 
good practice to code to an interface, rather than a specific implementation. 
You'll often be surprised at the kinds of things you can accomplish by 
substituting one implementation for another.</p><p>Tapestry is also very aware 
that a service will have dependencies on other services. It may also have other 
needs ... for example, in Tapestry IoC, the container provides services with 
access to Loggers.</p><p>Tapestry IoC also has support for other configuration
  that may be provided to services when they are realized.</p><h2 
id="TapestryIoCOverview-DependencyInjection">Dependency Injection</h2><p>Main 
Article: <a  href="injection.html">Injection</a></p><div class="aui-label" 
style="float:right" title="Related Articles"><h3>Related Articles</h3><ul 
class="content-by-label"><li> 
+  <div> 
+   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
+  </div> 
+  <div class="details"> 
+   <a  href="injection-in-detail.html">Injection in Detail</a> 
+  </div> </li><li> 
+  <div> 
+   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
+  </div> 
+  <div class="details"> 
+   <a  href="injection-faq.html">Injection FAQ</a> 
+  </div> </li><li> 
+  <div> 
+   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
+  </div> 
+  <div class="details"> 
+   <a  href="injection.html">Injection</a> 
+  </div> </li></ul></div><p>Inversion of Control refers to the fact that the 
container, here Tapestry IoC's Registry, instantiates your classes. It decides 
on when the classes get instantiated.</p><p>Dependency Injection is a key part 
of <em>realization</em>: this is how a service is provided with the other 
services it needs to operate. For example, a Data Access Object service may be 
injected with a ConnectionPool service.</p><p>In Tapestry, injection occurs 
through constructors, through parameters to service builder methods, or through 
direct injection into fields. Tapestry prefers constructor injection, as this 
emphasizes that dependencies should be stored in <strong>final</strong> 
variables. This is the best approach towards ensuring thread safety.</p><p>In 
any case, injection "just happens". Tapestry finds the constructor of your 
class and analyzes the parameters to determine what to pass in. In some cases, 
it uses just the parameter type to find a match, in other cases, annota
 tions on the parameters may also be used. It also scans through the fields of 
your service implementation class to identify which should have injected values 
written into them.</p><h2 id="TapestryIoCOverview-Whycan'tIjustusenew?">Why 
can't I just use <code>new</code>?</h2><p>That's a common question. All these 
concepts seem alien at first. What's wrong with <code>new</code>?</p><p>The 
problem with new is that it rigidly connects one implementation to another 
implementation. Let's follow a progression that reflects how a lot of projects 
get written. It will show that in the real world, <code>new</code> is not as 
simple as it first seems.</p><p>This example is built around some real-world 
work that involves a Java Messaging Service queue, part of an application 
performance monitoring subsystem for a large application. Code inside each 
server collects performance data of various types and sends it, via a shared 
JMS queue, to a central server for collection and reporting.</p><p>This cod
 e is for a metric that periodically counts the number of rows in a key 
database table. Other implementations of MetricProducer will be responsible for 
measuring CPU utilization, available disk space, number of requests per second, 
and so forth.</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 class TableMetricProducer implements 
MetricProducer
 {
   . . . 

Modified: websites/production/tapestry/content/tapestry-tutorial.html
==============================================================================
--- websites/production/tapestry/content/tapestry-tutorial.html (original)
+++ websites/production/tapestry/content/tapestry-tutorial.html Tue Nov  8 
12:22:26 2016
@@ -36,18 +36,13 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span>
-<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><div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Tapestry Tutorial</h1></div></div>
+            <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 &amp; blogs:</span><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><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Tapestry Tutorial</h1></div></div>
       <div class="clearer"></div>
       </div>
 
@@ -59,64 +54,37 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><div class="aui-label" 
style="float:right" title="Related Articles">
-
-
-
-
-
-
-
-
-<h3>Related Articles</h3>
-
-<ul class="content-by-label"><li>
-        <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
-
-        <div class="details">
-                        <a  href="tapestry-for-jsf-users.html">Tapestry for 
JSF Users</a>
-                
-                        
-                    </div>
-    </li><li>
-        <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
-
-        <div class="details">
-                        <a  href="tapestry-tutorial.html">Tapestry Tutorial</a>
-                
-                        
-                    </div>
-    </li><li>
-        <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
-
-        <div class="details">
-                        <a  href="principles.html">Principles</a>
-                
-                        
-                    </div>
-    </li><li>
-        <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
-
-        <div class="details">
-                        <a  href="getting-started.html">Getting Started</a>
-                
-                        
-                    </div>
-    </li><li>
-        <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
-
-        <div class="details">
-                        <a  href="introduction.html">Introduction</a>
-                
-                        
-                    </div>
-    </li></ul>
-</div><h1 id="TapestryTutorial-TableofContents">Table of 
Contents</h1><p></p><ul class="childpages-macro"><li><a  
href="dependencies-tools-and-plugins.html">Dependencies, Tools and 
Plugins</a></li><li><a  href="creating-the-skeleton-application.html">Creating 
The Skeleton Application</a></li><li><a  
href="exploring-the-project.html">Exploring the Project</a></li><li><a  
href="implementing-the-hi-lo-guessing-game.html">Implementing the Hi-Lo 
Guessing Game</a></li><li><a  
href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To 
Create User Forms</a></li><li><a  
href="using-tapestry-with-hibernate.html">Using Tapestry With 
Hibernate</a></li></ul><h1 
id="TapestryTutorial-Introduction">Introduction</h1><p>Welcome to 
Tapestry!</p><p>This is a tutorial for people who will be creating Tapestry web 
applications. It doesn't matter whether you have experience with earlier 
versions of Tapestry or other web frameworks. In fact, in some ways, the less 
you know about web developme
 nt in general, the better off you may be ... that much less to 
unlearn!</p><p>You do need to have a reasonable understanding of HTML, a 
smattering of XML, and a good understanding of basic Java language features, 
including Annotations.</p><h1 
id="TapestryTutorial-TheChallengesofWebApplicationDevelopment">The Challenges 
of Web Application Development</h1><p>If you're used to developing web 
applications using servlets and JSPs, or with Struts, you are simply used to a 
lot of pain. So much pain, you may not even understand the dire situation you 
are in! These are environments with no safety net; Struts and the Servlet API 
have no idea how your application is structured, or how the different pieces 
fit together. Any URL can be an action and any action can forward to any view 
(usually a JSP) to provide an HTML response to the web browser. The pain is the 
unending series of small, yet important, decisions you have to make as a 
developer (and communicate to the rest of your team). What are
  the naming conventions for actions, for pages, for attributes stored in the 
HttpSession or HttpServletRequest? Where do cross-cutting concerns such as 
database transactions, caching and security get implemented (and do you have to 
cut-and-paste Java or XML to make it work?) How are your packages organized ... 
where to the user interface classes go, and where do the data and entity 
objects go? How do you share code from one part of your application to 
another?</p><p>On top of all that, the traditional approaches thrust something 
most unwanted in your face: <em>multi-threaded coding</em>. Remember back to 
Object Oriented Programming 101 where an object was defined as a bundle of data 
and operations on that data? You have to unlearn that lesson as soon as you 
build a traditional web application, because web applications are 
multi-threaded. An application server could be handling dozens or hundreds of 
requests from individual users, each in their own thread, and each sharing the 
exact 
 same objects. Suddenly, you can't store data inside an object (a servlet or a 
Struts Action) because whatever data you store for one user will be instantly 
overwritten by some other user.</p><p>Worse, your objects each have only one 
operation: <code>doGet()</code> or <code>doPost()</code>.</p><p>Meanwhile, most 
of your day-to-day work involves deciding how to package up some data already 
inside a particular Java object and squeeze that data into a URL's query 
parameters, so that you can write more code to convert it back if the user 
clicks that particular link. And don't forget editing a bunch of XML files to 
keep the servlet container, or the Struts framework, aware of these 
decisions.</p><p>Just for laughs, remember that you have to rebuild, redeploy 
and restart your application after virtually any change. Is any of this 
familiar? Then perhaps you'd appreciate something a little <em>less</em> 
familiar: Tapestry.</p><h1 id="TapestryTutorial-TheTapestryWay">The Tapestry 
Way</h1><p>T
 apestry uses a very different model: a structured, organized world of pages, 
and components within pages. Everything has a very specific name (that you 
provide). Once you know the name of a page, you know the location of the Java 
class for that page, the location of the template for that page, and the total 
structure of the page. Tapestry knows all this as well, and can make things 
<strong>just work</strong>.</p><p>As we'll see in the following pages, Tapestry 
lets you code in terms of your objects. You'll barely see any Tapestry classes, 
outside of a few Java annotations. If you have information to store, store it 
as fields of your classes, not inside the HttpServletRequest or HttpSession. If 
you need some code to execute, it's just a simple annotation or method naming 
convention to get Tapestry to invoke that method, at the right time, with the 
right data. The methods don't even have to be public!</p><p>Tapestry also 
shields you from most of the multi-threaded aspects of web appli
 cation development. Tapestry manages the life cycle of your page and 
components objects, and the fields of the pages and components, in a 
thread-safe way. Your page and component classes always look like simple, 
standard <a  class="external-link" 
href="http://en.wikipedia.org/wiki/Plain_Old_Java_Object"; 
rel="nofollow">POJOs</a>.</p><p>Tapestry began in January 2000, and it now 
reflects over fifteen years of experience of the entire Tapestry community. 
Tapestry brings to the table all that experience about the best ways to build 
scalable, maintainable, robust, internationalized, and Ajax-enabled 
applications. Tapestry 5 represents a completely new code base (compared to 
Tapestry 4) designed to simplify the Tapestry coding model while at the same 
time extending the power of Tapestry and improving performance.</p><h1 
id="TapestryTutorial-GettingtheTutorialSource">Getting the Tutorial 
Source</h1><p>Although you won't need it, the source code for this tutorial is 
available on <a  class="
 external-link" href="https://github.com/hlship/tapestry5-tutorial"; 
rel="nofollow">GitHub</a>.</p><h1 id="TapestryTutorial-TimetoBegin">Time to 
Begin</h1><p>Okay, enough background. Now let's get started on the tutorial: <a 
 href="dependencies-tools-and-plugins.html">Dependencies, Tools and 
Plugins</a></p><p>&#160;</p></div>
+                <div id="ConfluenceContent"><div class="aui-label" 
style="float:right" title="Related Articles"><h3>Related Articles</h3><ul 
class="content-by-label"><li> 
+  <div> 
+   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
+  </div> 
+  <div class="details"> 
+   <a  href="tapestry-for-jsf-users.html">Tapestry for JSF Users</a> 
+  </div> </li><li> 
+  <div> 
+   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
+  </div> 
+  <div class="details"> 
+   <a  href="tapestry-tutorial.html">Tapestry Tutorial</a> 
+  </div> </li><li> 
+  <div> 
+   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
+  </div> 
+  <div class="details"> 
+   <a  href="principles.html">Principles</a> 
+  </div> </li><li> 
+  <div> 
+   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
+  </div> 
+  <div class="details"> 
+   <a  href="getting-started.html">Getting Started</a> 
+  </div> </li><li> 
+  <div> 
+   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
+  </div> 
+  <div class="details"> 
+   <a  href="introduction.html">Introduction</a> 
+  </div> </li></ul></div><h1 id="TapestryTutorial-TableofContents">Table of 
Contents</h1><p></p><ul class="childpages-macro"><li><a  
href="dependencies-tools-and-plugins.html">Dependencies, Tools and 
Plugins</a></li><li><a  href="creating-the-skeleton-application.html">Creating 
The Skeleton Application</a></li><li><a  
href="exploring-the-project.html">Exploring the Project</a></li><li><a  
href="implementing-the-hi-lo-guessing-game.html">Implementing the Hi-Lo 
Guessing Game</a></li><li><a  
href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To 
Create User Forms</a></li><li><a  
href="using-tapestry-with-hibernate.html">Using Tapestry With 
Hibernate</a></li></ul><h1 
id="TapestryTutorial-Introduction">Introduction</h1><p>Welcome to 
Tapestry!</p><p>This is a tutorial for people who will be creating Tapestry web 
applications. It doesn't matter whether you have experience with earlier 
versions of Tapestry or other web frameworks. In fact, in some ways, the less 
you know 
 about web development in general, the better off you may be ... that much less 
to unlearn!</p><p>You do need to have a reasonable understanding of HTML, a 
smattering of XML, and a good understanding of basic Java language features, 
including Annotations.</p><h1 
id="TapestryTutorial-TheChallengesofWebApplicationDevelopment">The Challenges 
of Web Application Development</h1><p>If you're used to developing web 
applications using servlets and JSPs, or with Struts, you are simply used to a 
lot of pain. So much pain, you may not even understand the dire situation you 
are in! These are environments with no safety net; Struts and the Servlet API 
have no idea how your application is structured, or how the different pieces 
fit together. Any URL can be an action and any action can forward to any view 
(usually a JSP) to provide an HTML response to the web browser. The pain is the 
unending series of small, yet important, decisions you have to make as a 
developer (and communicate to the rest of y
 our team). What are the naming conventions for actions, for pages, for 
attributes stored in the HttpSession or HttpServletRequest? Where do 
cross-cutting concerns such as database transactions, caching and security get 
implemented (and do you have to cut-and-paste Java or XML to make it work?) How 
are your packages organized ... where to the user interface classes go, and 
where do the data and entity objects go? How do you share code from one part of 
your application to another?</p><p>On top of all that, the traditional 
approaches thrust something most unwanted in your face: <em>multi-threaded 
coding</em>. Remember back to Object Oriented Programming 101 where an object 
was defined as a bundle of data and operations on that data? You have to 
unlearn that lesson as soon as you build a traditional web application, because 
web applications are multi-threaded. An application server could be handling 
dozens or hundreds of requests from individual users, each in their own thread, 
and each
  sharing the exact same objects. Suddenly, you can't store data inside an 
object (a servlet or a Struts Action) because whatever data you store for one 
user will be instantly overwritten by some other user.</p><p>Worse, your 
objects each have only one operation: <code>doGet()</code> or 
<code>doPost()</code>.</p><p>Meanwhile, most of your day-to-day work involves 
deciding how to package up some data already inside a particular Java object 
and squeeze that data into a URL's query parameters, so that you can write more 
code to convert it back if the user clicks that particular link. And don't 
forget editing a bunch of XML files to keep the servlet container, or the 
Struts framework, aware of these decisions.</p><p>Just for laughs, remember 
that you have to rebuild, redeploy and restart your application after virtually 
any change. Is any of this familiar? Then perhaps you'd appreciate something a 
little <em>less</em> familiar: Tapestry.</p><h1 
id="TapestryTutorial-TheTapestryWay">The Ta
 pestry Way</h1><p>Tapestry uses a very different model: a structured, 
organized world of pages, and components within pages. Everything has a very 
specific name (that you provide). Once you know the name of a page, you know 
the location of the Java class for that page, the location of the template for 
that page, and the total structure of the page. Tapestry knows all this as 
well, and can make things <strong>just work</strong>.</p><p>As we'll see in the 
following pages, Tapestry lets you code in terms of your objects. You'll barely 
see any Tapestry classes, outside of a few Java annotations. If you have 
information to store, store it as fields of your classes, not inside the 
HttpServletRequest or HttpSession. If you need some code to execute, it's just 
a simple annotation or method naming convention to get Tapestry to invoke that 
method, at the right time, with the right data. The methods don't even have to 
be public!</p><p>Tapestry also shields you from most of the multi-threaded a
 spects of web application development. Tapestry manages the life cycle of your 
page and components objects, and the fields of the pages and components, in a 
thread-safe way. Your page and component classes always look like simple, 
standard <a  class="external-link" 
href="http://en.wikipedia.org/wiki/Plain_Old_Java_Object"; 
rel="nofollow">POJOs</a>.</p><p>Tapestry began in January 2000, and it now 
reflects over fifteen years of experience of the entire Tapestry community. 
Tapestry brings to the table all that experience about the best ways to build 
scalable, maintainable, robust, internationalized, and Ajax-enabled 
applications. Tapestry 5 represents a completely new code base (compared to 
Tapestry 4) designed to simplify the Tapestry coding model while at the same 
time extending the power of Tapestry and improving performance.</p><h1 
id="TapestryTutorial-GettingtheTutorialSource">Getting the Tutorial 
Source</h1><p>Although you won't need it, the source code for this tutorial is 
avail
 able on <a  class="external-link" 
href="https://github.com/hlship/tapestry5-tutorial"; 
rel="nofollow">GitHub</a>.</p><h1 id="TapestryTutorial-TimetoBegin">Time to 
Begin</h1><p>Okay, enough background. Now let's get started on the tutorial: <a 
 href="dependencies-tools-and-plugins.html">Dependencies, Tools and 
Plugins</a></p><p>&#160;</p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/templating-and-markup-faq.html
==============================================================================
--- websites/production/tapestry/content/templating-and-markup-faq.html 
(original)
+++ websites/production/tapestry/content/templating-and-markup-faq.html Tue Nov 
 8 12:22:26 2016
@@ -46,7 +46,7 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span><form 
enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";> 

Modified: websites/production/tapestry/content/test-page-2.html
==============================================================================
--- websites/production/tapestry/content/test-page-2.html (original)
+++ websites/production/tapestry/content/test-page-2.html Tue Nov  8 12:22:26 
2016
@@ -46,7 +46,7 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span><form 
enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";> 
@@ -66,11 +66,11 @@
       <div id="content">
                 <div id="ConfluenceContent"><p>
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1477588787905 {padding: 0px;}
-div.rbtoc1477588787905 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1477588787905 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1478607637785 {padding: 0px;}
+div.rbtoc1478607637785 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1478607637785 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1477588787905">
+/*]]>*/</style></p><div class="toc-macro rbtoc1478607637785">
 <ul class="toc-indentation"><li><a  href="#TestPage2-Generalquestions">General 
questions</a>
 <ul class="toc-indentation"><li><a  
href="#TestPage2-HowdoIgetstartedwithTapestry?">How do I get started with 
Tapestry?</a></li><li><a  
href="#TestPage2-WhydoesTapestryusePrototype?WhynotinsertfavoriteJavaScriptlibraryhere?">Why
 does Tapestry use Prototype? Why not insert favorite JavaScript library 
here?</a></li><li><a  
href="#TestPage2-WhydoesTapestryhaveitsownInversionofControlContainer?WhynotSpringorGuice?">Why
 does Tapestry have its own Inversion of Control Container? Why not Spring or 
Guice?</a></li><li><a  
href="#TestPage2-HowdoIupgradefromTapestry4toTapestry5?">How do I upgrade from 
Tapestry 4 to Tapestry 5?</a></li><li><a  
href="#TestPage2-WhyaretherebothRequestandHttpServletRequest?">Why are there 
both Request and HttpServletRequest?</a></li></ul>
 </li></ul>

Modified: websites/production/tapestry/content/test-page.html
==============================================================================
--- websites/production/tapestry/content/test-page.html (original)
+++ websites/production/tapestry/content/test-page.html Tue Nov  8 12:22:26 2016
@@ -46,7 +46,7 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span><form 
enctype="application/x-www-form-urlencoded" method="get" 
action="http://tapestry.apache.org/search.html";> 

Modified: websites/production/tapestry/content/test.html
==============================================================================
--- websites/production/tapestry/content/test.html (original)
+++ websites/production/tapestry/content/test.html Tue Nov  8 12:22:26 2016
@@ -36,18 +36,13 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span>
-<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><div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Test</h1></div></div>
+            <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 &amp; blogs:</span><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><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Test</h1></div></div>
       <div class="clearer"></div>
       </div>
 

Modified: websites/production/tapestry/content/the-tapestry-jail.html
==============================================================================
--- websites/production/tapestry/content/the-tapestry-jail.html (original)
+++ websites/production/tapestry/content/the-tapestry-jail.html Tue Nov  8 
12:22:26 2016
@@ -44,18 +44,13 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span>
-<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><div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">The tapestry jail</h1></div></div>
+            <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 &amp; blogs:</span><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><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">The tapestry jail</h1></div></div>
       <div class="clearer"></div>
       </div>
 

Modified: websites/production/tapestry/content/third-party-modules.html
==============================================================================
--- websites/production/tapestry/content/third-party-modules.html (original)
+++ websites/production/tapestry/content/third-party-modules.html Tue Nov  8 
12:22:26 2016
@@ -36,18 +36,13 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span>
-<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><div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Third Party Modules</h1></div></div>
+            <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 &amp; blogs:</span><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><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Third Party Modules</h1></div></div>
       <div class="clearer"></div>
       </div>
 

Modified: websites/production/tapestry/content/this-page-has-been-deleted.html
==============================================================================
--- websites/production/tapestry/content/this-page-has-been-deleted.html 
(original)
+++ websites/production/tapestry/content/this-page-has-been-deleted.html Tue 
Nov  8 12:22:26 2016
@@ -36,18 +36,13 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span>
-<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><div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">This page has been deleted.</h1></div></div>
+            <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 &amp; blogs:</span><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><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">This page has been deleted.</h1></div></div>
       <div class="clearer"></div>
       </div>
 

Modified: websites/production/tapestry/content/tutorial.html
==============================================================================
--- websites/production/tapestry/content/tutorial.html (original)
+++ websites/production/tapestry/content/tutorial.html Tue Nov  8 12:22:26 2016
@@ -36,18 +36,13 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span>
-<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><div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Tutorial</h1></div></div>
+            <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 &amp; blogs:</span><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><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Tutorial</h1></div></div>
       <div class="clearer"></div>
       </div>
 

Modified: websites/production/tapestry/content/type-coercion.html
==============================================================================
--- websites/production/tapestry/content/type-coercion.html (original)
+++ websites/production/tapestry/content/type-coercion.html Tue Nov  8 12:22:26 
2016
@@ -44,18 +44,13 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span>
-<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><div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Type Coercion</h1></div></div>
+            <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 &amp; blogs:</span><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><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">Type Coercion</h1></div></div>
       <div class="clearer"></div>
       </div>
 
@@ -67,37 +62,19 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><p><strong>Type Coercion</strong> 
is the conversion of one type of object to a new object of a different type 
with similar content. Tapestry frequently must coerce objects from one type to 
another. A common example is the coercion of string "5" into an integer 5 or a 
double 5.0.</p><div class="aui-label" style="float:right" title="Related 
Articles">
-
-
-
-
-
-
-
-
-<h3>Related Articles</h3>
-
-<ul class="content-by-label"><li>
-        <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
-
-        <div class="details">
-                        <a  href="type-coercion.html">Type Coercion</a>
-                
-                        
-                    </div>
-    </li><li>
-        <div>
-                <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
-
-        <div class="details">
-                        <a  href="parameter-type-coercion.html">Parameter Type 
Coercion</a>
-                
-                        
-                    </div>
-    </li></ul>
-</div><p>Although type coercions happen more inside tapestry-core (including 
<a  href="parameter-type-coercion.html">coercions of <span 
class="confluence-link">component parameters</span></a><span 
class="confluence-link">&#160;</span>), they may also happen inside 
tapestry-ioc, such as when injecting a value, rather than a service, into a 
builder method.</p><p>Like everything else in Tapestry, type coercions are 
extensible. At the root is the <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/TypeCoercer.html";>TypeCoercer</a>
 service. Its configuration consists of a number of <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/CoercionTuple.html";>CoercionTuples</a>.
 Each tuple defines how to coerce from one type to another. The initial set of 
coercions is focused primarily on coercions between different numeric 
types:</p><p><span class="confluence-embedded-file-wrapper"
 ><img class="confluence-embedded-image" 
 >src="type-coercion.data/type-coercer.png"></span></p><h2 
 >id="TypeCoercion-DefaultTypeCoercions">Default Type Coercions</h2><p>There 
 >are a few special coercions related to <code>null</code> there; 
 ><code>Object</code> --&gt; <code>List</code> wraps a lone object as a 
 >singleton list, we then need <code>null</code> --&gt; <code>List</code> to 
 >ensure that <code>null</code> stays <code>null</code> (rather than a 
 >singleton list whose lone element is a <code>null</code>).</p><p>Tapestry can 
 ><em>interpolate</em> necessary coercions. For example, say it is necessary to 
 >coerce a <code>StringBuffer</code> to an <code>Integer</code>; the 
 >TypeCoercer service will chain together a series of 
 >coercions:</p><ul><li><code>Object</code> --&gt; 
 ><code>String</code></li><li><code>String</code> --&gt; 
 ><code>Long</code></li><li><code>Long</code> --&gt; 
 ><code>Integer</code></li></ul><h2 id="TypeCoercion-Coercingfromnull">Coercing 
 >from null</h2><p>Coercing from <code>nu
 ll</code> is special; it is not a spanning search as with the other types. 
Either there is a specific coercion from <code>null</code> to the desired type, 
or no coercion takes places (and the coerced value is 
<code>null</code>).</p><p>The only built-in <code>null</code> coercion is from 
<code>null</code> to <code>boolean</code> (which is always false).</p><h2 
id="TypeCoercion-ListofCoercions">List of Coercions</h2><p>As of Tapestry 
versions 5.1 and 5.2, the following coercions are available:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+                <div id="ConfluenceContent"><p><strong>Type Coercion</strong> 
is the conversion of one type of object to a new object of a different type 
with similar content. Tapestry frequently must coerce objects from one type to 
another. A common example is the coercion of string "5" into an integer 5 or a 
double 5.0.</p><div class="aui-label" style="float:right" title="Related 
Articles"><h3>Related Articles</h3><ul class="content-by-label"><li> 
+  <div> 
+   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
+  </div> 
+  <div class="details"> 
+   <a  href="type-coercion.html">Type Coercion</a> 
+  </div> </li><li> 
+  <div> 
+   <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" 
title="Page">Page:</span> 
+  </div> 
+  <div class="details"> 
+   <a  href="parameter-type-coercion.html">Parameter Type Coercion</a> 
+  </div> </li></ul></div><p>Although type coercions happen more inside 
tapestry-core (including <a  href="parameter-type-coercion.html">coercions of 
<span class="confluence-link">component parameters</span></a><span 
class="confluence-link">&#160;</span>), they may also happen inside 
tapestry-ioc, such as when injecting a value, rather than a service, into a 
builder method.</p><p>Like everything else in Tapestry, type coercions are 
extensible. At the root is the <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/TypeCoercer.html";>TypeCoercer</a>
 service. Its configuration consists of a number of <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/CoercionTuple.html";>CoercionTuples</a>.
 Each tuple defines how to coerce from one type to another. The initial set of 
coercions is focused primarily on coercions between different numeric 
types:</p><p><span class="confluence-emb
 edded-file-wrapper"><img class="confluence-embedded-image" 
src="type-coercion.data/type-coercer.png"></span></p><h2 
id="TypeCoercion-DefaultTypeCoercions">Default Type Coercions</h2><p>There are 
a few special coercions related to <code>null</code> there; <code>Object</code> 
--&gt; <code>List</code> wraps a lone object as a singleton list, we then need 
<code>null</code> --&gt; <code>List</code> to ensure that <code>null</code> 
stays <code>null</code> (rather than a singleton list whose lone element is a 
<code>null</code>).</p><p>Tapestry can <em>interpolate</em> necessary 
coercions. For example, say it is necessary to coerce a 
<code>StringBuffer</code> to an <code>Integer</code>; the TypeCoercer service 
will chain together a series of coercions:</p><ul><li><code>Object</code> 
--&gt; <code>String</code></li><li><code>String</code> --&gt; 
<code>Long</code></li><li><code>Long</code> --&gt; 
<code>Integer</code></li></ul><h2 id="TypeCoercion-Coercingfromnull">Coercing 
from null</h2><p>Coe
 rcing from <code>null</code> is special; it is not a spanning search as with 
the other types. Either there is a specific coercion from <code>null</code> to 
the desired type, or no coercion takes places (and the coerced value is 
<code>null</code>).</p><p>The only built-in <code>null</code> coercion is from 
<code>null</code> to <code>boolean</code> (which is always false).</p><h2 
id="TypeCoercion-ListofCoercions">List of Coercions</h2><p>As of Tapestry 
versions 5.1 and 5.2, the following coercions are available:</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;">Double --&gt; Float
 Float --&gt; Double
 Long --&gt; Boolean

Modified: websites/production/tapestry/content/typecoercer-service.html
==============================================================================
--- websites/production/tapestry/content/typecoercer-service.html (original)
+++ websites/production/tapestry/content/typecoercer-service.html Tue Nov  8 
12:22:26 2016
@@ -36,18 +36,13 @@
 
   <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  
href="community.html">Community</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="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 &amp; blogs:</span>
-<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><div class="emblem" style="float:left"><p><a  href="index.html"><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">TypeCoercer Service</h1></div></div>
+            <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 &amp; blogs:</span><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><div class="emblem" style="float:left"><p><a  
href="index.html"><span class="confluence-embedded-file-wrapper"><img 
class="confluence-embedded-image confluence-external-resource" 
src="http://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="http://tapestry.apache.org/images/tapestry_small.png";></span></a></p></div><div
 class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">TypeCoercer Service</h1></div></div>
       <div class="clearer"></div>
       </div>
 


Reply via email to