You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by bu...@apache.org on 2013/09/23 00:21:27 UTC

svn commit: r879492 [15/30] - in /websites/production/tapestry/content: ./ 2009/ 2009/09/ 2009/09/13/ 2009/10/ 2009/10/27/ 2009/11/ 2009/11/25/ 2010/ 2010/07/ 2010/07/18/ 2010/07/24/ 2010/10/ 2010/10/11/ 2010/10/31/ 2010/11/ 2010/11/18/ 2010/11/19/ 201...

Modified: websites/production/tapestry/content/how-to-upgrade.html
==============================================================================
--- websites/production/tapestry/content/how-to-upgrade.html (original)
+++ websites/production/tapestry/content/how-to-upgrade.html Sun Sep 22 22:21:21 2013
@@ -24,7 +24,10 @@
     How to Upgrade -- 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">

Modified: websites/production/tapestry/content/https.html
==============================================================================
--- websites/production/tapestry/content/https.html (original)
+++ websites/production/tapestry/content/https.html Sun Sep 22 22:21:21 2013
@@ -24,7 +24,18 @@
     HTTPS -- Apache Tapestry
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
+
+    <link href='http://cxf.apache.org/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
+  <link href='http://cxf.apache.org/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
+  <script type="text/javascript">
+  SyntaxHighlighter.defaults['toolbar'] = false;
+  SyntaxHighlighter.all();
+  </script>
+
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
+
 </head>
 <body>
   <div class="wrapper bs">
@@ -34,9 +45,9 @@
 </div>
 
 <div id="top">
-<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em">
+<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><p>
 <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">
+</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>
@@ -65,13 +76,13 @@
 <p>All that is necessary to mark a page as secure is to add the @Secure annotation to the page class:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
 @Secure
-<span class="code-keyword">public</span> class ProcessOrder
+public class ProcessOrder
 {
   . . .
 }
-</pre>
+]]></script>
 </div></div>
 
 <p>When a page is marked as secure, Tapestry will ensure that access to that page uses HTTPS. All links to the page will use the "https" protocol.</p>
@@ -91,12 +102,12 @@
 <p>This is accomplished by making a contribution to the MetaDataLocator service configuration. For example, to secure all pages in the "admin" folder:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">public</span> void contributeMetaDataLocator(MappedConfiguration&lt;<span class="code-object">String</span>,<span class="code-object">String</span>&gt; configuration)
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+public void contributeMetaDataLocator(MappedConfiguration&lt;String,String&gt; configuration)
 {
-    configuration.add(<span class="code-quote">"admin:"</span> + MetaDataConstants.SECURE_PAGE, <span class="code-quote">"<span class="code-keyword">true</span>"</span>);
+    configuration.add("admin:" + MetaDataConstants.SECURE_PAGE, "true");
 }
-</pre>
+]]></script>
 </div></div>
 
 <p>Here "admin" is the folder name, and the colon is a separator between the folder name and the the meta data key. SECURE_PAGE is a public constant for value "tapestry.secure-page";</p>
@@ -106,12 +117,12 @@
 <p>If you want to make your entire application secure:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">public</span> void contributeMetaDataLocator(MappedConfiguration&lt;<span class="code-object">String</span>,<span class="code-object">String</span>&gt; configuration)
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+public void contributeMetaDataLocator(MappedConfiguration&lt;String,String&gt; configuration)
 {
-    configuration.add(MetaDataConstants.SECURE_PAGE, <span class="code-quote">"<span class="code-keyword">true</span>"</span>);
+    configuration.add(MetaDataConstants.SECURE_PAGE, "true");
 }
-</pre>
+]]></script>
 </div></div>
 
 <p>With no colon, the meta data applies to the entire application (including any component libraries used in the application).</p>
@@ -129,24 +140,24 @@
 <p>Fortunately, it is very easy to override this implementation. Here's an example of an override that uses the default port numbers that the <a shape="rect" class="external-link" href="http://jetty.codehaus.org/jetty/" >Jetty servlet container</a> uses for normal HTTP (port 8080) and for secure HTTPS (port 8443):</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
-    <span class="code-keyword">public</span> <span class="code-keyword">static</span> void contributeServiceOverride(MappedConfiguration&lt;<span class="code-object">Class</span>,<span class="code-object">Object</span>&gt; configuration)
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+    public static void contributeServiceOverride(MappedConfiguration&lt;Class,Object&gt; configuration)
     {
-        BaseURLSource source = <span class="code-keyword">new</span> BaseURLSource()
+        BaseURLSource source = new BaseURLSource()
         {
-            <span class="code-keyword">public</span> <span class="code-object">String</span> getBaseURL(<span class="code-object">boolean</span> secure)
+            public String getBaseURL(boolean secure)
             {
-                <span class="code-object">String</span> protocol = secure ? <span class="code-quote">"https"</span> : <span class="code-quote">"http"</span>;
+                String protocol = secure ? "https" : "http";
 
-                <span class="code-object">int</span> port = secure ? 8443 : 8080;
+                int port = secure ? 8443 : 8080;
 
-                <span class="code-keyword">return</span> <span class="code-object">String</span>.format(<span class="code-quote">"%s:<span class="code-comment">//localhost:%d"</span>, protocol, port);
-</span>            }
+                return String.format("%s://localhost:%d", protocol, port);
+            }
         };
 
         configuration.add(BaseURLSource.class, source);
     }
-</pre>
+]]></script>
 </div></div>
 
 <p>This override is hardcoded to generate URLs for localhost; as such you might use it for development but certainly not in production.</p>
@@ -169,7 +180,7 @@
 
 <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.</p>
+<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">
 <script type="text/javascript">
   var _gaq = _gaq || [];
   _gaq.push(['_setAccount', 'UA-400821-1']);
@@ -180,7 +191,7 @@
     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></div>
+</script></p></div>
 </div>
 		<div id="comments_thread"></div>
 		<script type="text/javascript" src="https://comments.apache.org/show_comments.lua?site=tapestry&amp;page=http://tapestry.apache.org/https.html" async="true">

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 Sep 22 22:21:21 2013
@@ -24,7 +24,19 @@
     Implementing the Hi-Lo Guessing Game -- Apache Tapestry
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
+
+    <link href='http://cxf.apache.org/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
+  <link href='http://cxf.apache.org/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
+  <script type="text/javascript">
+  SyntaxHighlighter.defaults['toolbar'] = false;
+  SyntaxHighlighter.all();
+  </script>
+
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
+
 </head>
 <body>
   <div class="wrapper bs">
@@ -34,9 +46,9 @@
 </div>
 
 <div id="top">
-<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em">
+<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><p>
 <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">
+</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>
@@ -64,7 +76,7 @@ table.ScrollbarTable td.ScrollbarParent 
 table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
 table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
 
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="exploring-the-project.html"><img align="middle" border="0" src="/images/confluence/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="exploring-the-project.html">Exploring the Project</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="/images/confluence/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To Create User Forms</a></td><td colspan="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="using-beaneditform-to
 -create-user-forms.html"><img align="middle" border="0" src="/images/confluence/forwd_16.gif" width="16" height="16"></a></td></tr></table></div>
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="exploring-the-project.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="exploring-the-project.html">Exploring the Project</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To Create User Forms</a></td><td colspan="1" rowspan="1" class="Sc
 rollbarNextIcon"><a shape="rect" href="using-beaneditform-to-create-user-forms.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div>
 
 <p>Let's start building a basic Hi-Lo Guessing game.</p>
 
@@ -84,29 +96,29 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>Let's get to work on the Index page and template. Make Index.tml look like this:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Index.tml</b></div><div class="codeContent panelContent">
-<pre class="code-xml">
-&lt;html t:type=<span class="code-quote">"layout"</span> title=<span class="code-quote">"Hi/Lo Guess"</span>
-  <span class="code-keyword">xmlns:t</span>=<span class="code-quote">"http://tapestry.apache.org/schema/tapestry_5_3.xsd"</span>&gt;
-
-  <span class="code-tag">&lt;p&gt;</span>
-    I'm thinking of a number between one and ten ... <span class="code-tag">&lt;/p&gt;</span>
-
-  <span class="code-tag">&lt;p&gt;</span>
-    <span class="code-tag">&lt;a href=<span class="code-quote">"#"</span>&gt;</span>start guessing<span class="code-tag">&lt;/a&gt;</span>
-  <span class="code-tag">&lt;/p&gt;</span>
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;html t:type="layout" title="Hi/Lo Guess"
+  xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"&gt;
 
-<span class="code-tag">&lt;/html&gt;</span>
-</pre>
+  &lt;p&gt;
+    I'm thinking of a number between one and ten ... &lt;/p&gt;
+
+  &lt;p&gt;
+    &lt;a href="#"&gt;start guessing&lt;/a&gt;
+  &lt;/p&gt;
+
+&lt;/html&gt;
+]]></script>
 </div></div>
 
 <p>And edit the corresponding Java class, Index.java, removing its body (but leaving the imports in place for now):</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Index.java</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">public</span> class Index
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+public class Index
 {
 }
-</pre>
+]]></script>
 </div></div>
 
 <p>Running the application gives us our start:</p>
@@ -123,11 +135,11 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>First, the component.  We want to perform an action (selecting the 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 \&lt;a\&gt; tag to an ActionLink component:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Index.tml (partial)</b></div><div class="codeContent panelContent">
-<pre class="code-xml">
-  <span class="code-tag">&lt;p&gt;</span>
-    <span class="code-tag">&lt;t:actionlink t:id=<span class="code-quote">"start"</span>&gt;</span>start guessing<span class="code-tag">&lt;/t:actionlink&gt;</span>
-  <span class="code-tag">&lt;/p&gt;</span>
-</pre>
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+  &lt;p&gt;
+    &lt;t:actionlink t:id="start"&gt;start guessing&lt;/t:actionlink&gt;
+  &lt;/p&gt;
+]]></script>
 </div></div>
 
 <p>If you refresh the browser, you'll see that the URL for the "start guessing" link is now /tutorial1/index.start, which identifies the name of the page ("index") and the id of the component ("start").</p>
@@ -145,17 +157,17 @@ table.ScrollbarTable td.ScrollbarNextIco
 <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" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Index.java</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">package</span> com.example.tutorial.pages;
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+package com.example.tutorial.pages;
 
-<span class="code-keyword">public</span> class Index
+public class Index
 {
   void onActionFromStart()
   {
 
   }
 }
-</pre>
+]]></script>
 </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>
@@ -167,8 +179,8 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>How about this: add the @<a shape="rect" 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" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Index.java (partial)</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-  <span class="code-keyword">import</span> org.apache.tapestry5.annotations.Log;
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+  import org.apache.tapestry5.annotations.Log;
 
   . . .
 
@@ -177,7 +189,7 @@ table.ScrollbarTable td.ScrollbarNextIco
   {
 
   }
-</pre>
+]]></script>
 </div></div>
 
 <p>When you next click the link you should see the following in the Eclipse console:</p>
@@ -199,61 +211,61 @@ table.ScrollbarTable td.ScrollbarNextIco
 <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 setup that target value.</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Guess.java</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">package</span> com.example.tutorial.pages;
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+package com.example.tutorial.pages;
 
-<span class="code-keyword">public</span> class Guess
+public class Guess
 {
-  <span class="code-keyword">private</span> <span class="code-object">int</span> target;
+  private int target;
 
-  void setup(<span class="code-object">int</span> target)
+  void setup(int target)
   {
-    <span class="code-keyword">this</span>.target = target;
+    this.target = target;
   }
 }
-</pre>
+]]></script>
 </div></div>
 
 <p>With that in mind, we can modify Index to invoke this new <tt>setup()</tt> method:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Index.java (revised)</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">package</span> com.example.tutorial.pages;
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+package com.example.tutorial.pages;
 
-<span class="code-keyword">import</span> java.util.Random;
+import java.util.Random;
 
-<span class="code-keyword">import</span> org.apache.tapestry5.annotations.InjectPage;
-<span class="code-keyword">import</span> org.apache.tapestry5.annotations.Log;
+import org.apache.tapestry5.annotations.InjectPage;
+import org.apache.tapestry5.annotations.Log;
 
-<span class="code-keyword">public</span> class Index
+public class Index
 {
-  <span class="code-keyword">private</span> <span class="code-keyword">final</span> Random random = <span class="code-keyword">new</span> Random(<span class="code-object">System</span>.nanoTime());
+  private final Random random = new Random(System.nanoTime());
 
   @InjectPage
-  <span class="code-keyword">private</span> Guess guess;
+  private Guess guess;
 
   @Log
-  <span class="code-object">Object</span> onActionFromStart()
+  Object onActionFromStart()
   {
-    <span class="code-object">int</span> target = random.nextInt(10) + 1;
+    int target = random.nextInt(10) + 1;
 
     guess.setup(target);
 
-    <span class="code-keyword">return</span> guess;
+    return guess;
   }
 }
-</pre>
+]]></script>
 </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="panelMacro"><table class="noteMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="/images/confluence/warning.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">All fields in a Tapestry page or component class must be <b>private</b>.</td></tr></table></div>
+<div class="panelMacro"><table class="noteMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/warning.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">All fields in a Tapestry page or component class must be <b>private</b>.</td></tr></table></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" link, they'll see the Guess page.</p>
 
-<div class="panelMacro"><table class="warningMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="/images/confluence/forbidden.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">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.</td></tr></table></div>
+<div class="panelMacro"><table class="warningMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/forbidden.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">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.</td></tr></table></div>
 
 <p>So ... let's click the link and see what we get:</p>
 
@@ -262,16 +274,16 @@ table.ScrollbarTable td.ScrollbarNextIco
 <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" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>src/main/resources/com/example/tutorial/pages/Guess.tml</b></div><div class="codeContent panelContent">
-<pre class="code-xml">
-&lt;html t:type=<span class="code-quote">"layout"</span> title=<span class="code-quote">"Guess The Number"</span>
-  <span class="code-keyword">xmlns:t</span>=<span class="code-quote">"http://tapestry.apache.org/schema/tapestry_5_3.xsd"</span>&gt;
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;html t:type="layout" title="Guess The Number"
+  xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"&gt;
 
-  <span class="code-tag">&lt;p&gt;</span>
+  &lt;p&gt;
   The secret number is: ${target}.
-  <span class="code-tag">&lt;/p&gt;</span>
+  &lt;/p&gt;
   
-<span class="code-tag">&lt;/html&gt;</span>
-</pre>
+&lt;/html&gt;
+]]></script>
 </div></div>
 
 <p>Hit the browser's back button, then click the "start guessing" link again. We're getting closer:</p>
@@ -283,10 +295,10 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>We just need to write the missing JavaBeans accessor methods <tt>getTarget()</tt> (and <tt>setTarget()</tt> for good measure).  Or we could let Tapestry write those methods instead:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
   @Property
-  <span class="code-keyword">private</span> <span class="code-object">int</span> target;
-</pre>
+  private int target;
+]]></script>
 </div></div>
 
 <p>The @<a shape="rect" 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>
@@ -302,11 +314,11 @@ table.ScrollbarTable td.ScrollbarNextIco
 <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 shape="rect" 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" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
   @Property  
   @Persist
-  <span class="code-keyword">private</span> <span class="code-object">int</span> target;
-</pre>
+  private int target;
+]]></script>
 </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>
@@ -320,32 +332,32 @@ table.ScrollbarTable td.ScrollbarNextIco
 <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" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Guess.tml (revised)</b></div><div class="codeContent panelContent">
-<pre class="code-xml">
-&lt;html t:type=<span class="code-quote">"layout"</span> title=<span class="code-quote">"Guess The Number"</span>
-  <span class="code-keyword">xmlns:t</span>=<span class="code-quote">"http://tapestry.apache.org/schema/tapestry_5_3.xsd"</span>
-  <span class="code-keyword">xmlns:p</span>=<span class="code-quote">"tapestry:parameter"</span>&gt;
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;html t:type="layout" title="Guess The Number"
+  xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
+  xmlns:p="tapestry:parameter"&gt;
 
-  <span class="code-tag">&lt;p:sidebar&gt;</span>
-    <span class="code-tag">&lt;p&gt;</span>
+  &lt;p:sidebar&gt;
+    &lt;p&gt;
       The secret number is: ${target}.
-  <span class="code-tag">&lt;/p&gt;</span>
-  <span class="code-tag">&lt;/p:sidebar&gt;</span>
+  &lt;/p&gt;
+  &lt;/p:sidebar&gt;
 
-  <span class="code-tag">&lt;strong&gt;</span>Guess #${guessCount}<span class="code-tag">&lt;/strong&gt;</span>
+  &lt;strong&gt;Guess #${guessCount}&lt;/strong&gt;
 
-  <span class="code-tag">&lt;p&gt;</span>Make a guess from the options below:<span class="code-tag">&lt;/p&gt;</span>
+  &lt;p&gt;Make a guess from the options below:&lt;/p&gt;
 
-  <span class="code-tag">&lt;ul&gt;</span>
-    <span class="code-tag">&lt;t:loop source=<span class="code-quote">"1..10"</span> value=<span class="code-quote">"current"</span>&gt;</span>
-      <span class="code-tag">&lt;li&gt;</span>
-        <span class="code-tag">&lt;t:actionlink t:id=<span class="code-quote">"makeGuess"</span> context=<span class="code-quote">"current"</span>&gt;</span>${current}
-        <span class="code-tag">&lt;/t:actionlink&gt;</span>
-      <span class="code-tag">&lt;/li&gt;</span>
-    <span class="code-tag">&lt;/t:loop&gt;</span>
-  <span class="code-tag">&lt;/ul&gt;</span>
+  &lt;ul&gt;
+    &lt;t:loop source="1..10" value="current"&gt;
+      &lt;li&gt;
+        &lt;t:actionlink t:id="makeGuess" context="current"&gt;${current}
+        &lt;/t:actionlink&gt;
+      &lt;/li&gt;
+    &lt;/t:loop&gt;
+  &lt;/ul&gt;
 
-<span class="code-tag">&lt;/html&gt;</span>
-</pre>
+&lt;/html&gt;
+]]></script>
 </div></div>
 
 <p>So it looks like we need a <tt>guessCount</tt> property that starts at 1.</p>
@@ -358,37 +370,37 @@ table.ScrollbarTable td.ScrollbarNextIco
 
 <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 <tt>context</tt> 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="panelMacro"><table class="infoMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="/images/confluence/information.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">The URL for the ActionLink will be <tt>/tutorial1/guess.makeguess/3</tt>. That's the page name, "Guess", the component id, "makeGuess", and the context value, "3".</td></tr></table></div>
+<div class="panelMacro"><table class="infoMacro"><colgroup span="1"><col span="1" width="24"><col span="1"></colgroup><tr><td colspan="1" rowspan="1" valign="top"><img align="middle" src="https://cwiki.apache.org/confluence/images/icons/emoticons/information.gif" width="16" height="16" alt="" border="0"></td><td colspan="1" rowspan="1">The URL for the ActionLink will be <tt>/tutorial1/guess.makeguess/3</tt>. That's the page name, "Guess", the component id, "makeGuess", and the context value, "3".</td></tr></table></div>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Guess.java (revised)</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">package</span> com.example.tutorial.pages;
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+package com.example.tutorial.pages;
 
-<span class="code-keyword">import</span> org.apache.tapestry5.annotations.Persist;
-<span class="code-keyword">import</span> org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
 
-<span class="code-keyword">public</span> class Guess
+public class Guess
 {
   @Property
   @Persist
-  <span class="code-keyword">private</span> <span class="code-object">int</span> target, guessCount;
+  private int target, guessCount;
 
   @Property
-  <span class="code-keyword">private</span> <span class="code-object">int</span> current;
+  private int current;
 
-  void setup(<span class="code-object">int</span> target)
+  void setup(int target)
   {
-    <span class="code-keyword">this</span>.target = target;
+    this.target = target;
     guessCount = 1;
   }
 
-  void onActionFromMakeGuess(<span class="code-object">int</span> value)
+  void onActionFromMakeGuess(int value)
   {
     guessCount++;
   }
 
 }
-</pre>
+]]></script>
 </div></div>
 
 <p>The revised version of Guess includes two new properties: <tt>current</tt> and <tt>guessCount</tt>. There's also a handler for the action event from the makeGuess ActionLink component; currently it just increments the count.</p>
@@ -412,14 +424,14 @@ table.ScrollbarTable td.ScrollbarNextIco
 <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" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Guess.java (partial)</b></div><div class="codeContent panelContent">
-<pre class="code-java">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
   @Property
   @Persist(PersistenceConstants.FLASH)
-  <span class="code-keyword">private</span> <span class="code-object">String</span> message;
+  private String message;
 
   @InjectPage
-  <span class="code-keyword">private</span> GameOver gameOver;
-</pre>
+  private GameOver gameOver;
+]]></script>
 </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 shape="rect" 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>
@@ -427,23 +439,23 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>Next, we need some more logic in the <tt>onActionFromMakeGuess()</tt> event handler method:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Guess.java (partial)</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-  <span class="code-object">Object</span> onActionFromMakeGuess(<span class="code-object">int</span> value)
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+  Object onActionFromMakeGuess(int value)
   {
-    <span class="code-keyword">if</span> (value == target)
+    if (value == target)
     {
       gameOver.setup(target, guessCount);
-      <span class="code-keyword">return</span> gameOver;
+      return gameOver;
     }
 
     guessCount++;
 
-    message = <span class="code-object">String</span>.format(<span class="code-quote">"Your guess of %d is too %s."</span>, value,
-        value &lt; target ? <span class="code-quote">"low"</span> : <span class="code-quote">"high"</span>);
+    message = String.format("Your guess of %d is too %s.", value,
+        value &lt; target ? "low" : "high");
 
-    <span class="code-keyword">return</span> <span class="code-keyword">null</span>;
+    return null;
   }
-</pre>
+]]></script>
 </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>
@@ -451,15 +463,15 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>In the template, we just need to add some markup to display the message:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>Guess.tml (partial)</b></div><div class="codeContent panelContent">
-<pre class="code-xml">
-  <span class="code-tag">&lt;strong&gt;</span>Guess #${guessCount}<span class="code-tag">&lt;/strong&gt;</span>
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
+  &lt;strong&gt;Guess #${guessCount}&lt;/strong&gt;
 
-  <span class="code-tag">&lt;t:if test=<span class="code-quote">"message"</span>&gt;</span>
-    <span class="code-tag">&lt;p&gt;</span>
-      <span class="code-tag">&lt;strong&gt;</span>${message}<span class="code-tag">&lt;/strong&gt;</span>
-    <span class="code-tag">&lt;/p&gt;</span>
-  <span class="code-tag">&lt;/t:if&gt;</span>
-</pre>
+  &lt;t:if test="message"&gt;
+    &lt;p&gt;
+      &lt;strong&gt;${message}&lt;/strong&gt;
+    &lt;/p&gt;
+  &lt;/t:if&gt;
+]]></script>
 </div></div>
 
 <p>This snippet uses Tapestry's <a shape="rect" 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 <tt>test</tt> parameter and, if the value evaluates to true, renders its body.  The property bound to <tt>test</tt> doesn't have to be a boolean; Tapestry treats <tt>null</tt> as false, it treats zero as false and non-zero as true, it treats an empty Collection as false ... and for Strings (such as <tt>message</tt>) it treats a blank string (one that is null, or consists only of whitespace) as false, and a non-blank string is true.</p>
@@ -467,32 +479,32 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>We can wrap up with the GameOver page:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>GameOver.java</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-<span class="code-keyword">package</span> com.example.tutorial.pages;
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+package com.example.tutorial.pages;
 
-<span class="code-keyword">import</span> org.apache.tapestry5.annotations.Persist;
-<span class="code-keyword">import</span> org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
 
-<span class="code-keyword">public</span> class GameOver
+public class GameOver
 {
   @Property
   @Persist
-  <span class="code-keyword">private</span> <span class="code-object">int</span> target, guessCount;
+  private int target, guessCount;
 
-  void setup(<span class="code-object">int</span> target, <span class="code-object">int</span> guessCount)
+  void setup(int target, int guessCount)
   {
-    <span class="code-keyword">this</span>.target = target;
-    <span class="code-keyword">this</span>.guessCount = guessCount;
+    this.target = target;
+    this.guessCount = guessCount;
   }
 }
-</pre>
+]]></script>
 </div></div>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>GameOver.tml</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-&lt;html t:type=<span class="code-quote">"layout"</span> title=<span class="code-quote">"Game Over"</span>
-  xmlns:t=<span class="code-quote">"http:<span class="code-comment">//tapestry.apache.org/schema/tapestry_5_3.xsd"</span>
-</span>  xmlns:p=<span class="code-quote">"tapestry:parameter"</span>&gt;
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+&lt;html t:type="layout" title="Game Over"
+  xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
+  xmlns:p="tapestry:parameter"&gt;
 
   &lt;p&gt;
     You guessed the number
@@ -503,7 +515,7 @@ table.ScrollbarTable td.ScrollbarNextIco
   &lt;/p&gt;
   
 &lt;/html&gt;
-</pre>
+]]></script>
 </div></div>
 
 <p>That wraps up the basics of Tapestry; we've demonstrated the basics of linking pages together and passing information from page to page in code as well as incorporating data inside URLs.</p>
@@ -520,12 +532,12 @@ table.ScrollbarTable td.ScrollbarParent 
 table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
 table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
 
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="exploring-the-project.html"><img align="middle" border="0" src="/images/confluence/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="exploring-the-project.html">Exploring the Project</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="/images/confluence/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To Create User Forms</a></td><td colspan="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="using-beaneditform-to
 -create-user-forms.html"><img align="middle" border="0" src="/images/confluence/forwd_16.gif" width="16" height="16"></a></td></tr></table></div></div>
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="exploring-the-project.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="exploring-the-project.html">Exploring the Project</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="tapestry-tutorial.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To Create User Forms</a></td><td colspan="1" rowspan="1" class="Sc
 rollbarNextIcon"><a shape="rect" href="using-beaneditform-to-create-user-forms.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></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.</p>
+<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">
 <script type="text/javascript">
   var _gaq = _gaq || [];
   _gaq.push(['_setAccount', 'UA-400821-1']);
@@ -536,7 +548,7 @@ table.ScrollbarTable td.ScrollbarNextIco
     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></div>
+</script></p></div>
 </div>
 		<div id="comments_thread"></div>
 		<script type="text/javascript" src="https://comments.apache.org/show_comments.lua?site=tapestry&amp;page=http://tapestry.apache.org/implementing-the-hi-lo-guessing-game.html" async="true">

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.thumbs/gameover.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.thumbs/guess-1.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.thumbs/guess-no-target-prop.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.thumbs/guess-target-zero.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.thumbs/guess-target.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.thumbs/guess-template-missing.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.thumbs/guess_feedback.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.thumbs/hilo-1.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.thumbs/hilo-index-missing-action-error.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/index.html
==============================================================================
--- websites/production/tapestry/content/index.html (original)
+++ websites/production/tapestry/content/index.html Sun Sep 22 22:21:21 2013
@@ -24,7 +24,10 @@
     Apache Tapestry Home Page
   </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">
@@ -33,7 +36,7 @@
 </div>
 </div>
 
-<div id="ConfluenceContent">
+<div id="ConfluenceContent"><p>
 
 <style type="text/css">
 
@@ -92,9 +95,9 @@ a.blogHeading {
 
 
 
-
-
-<div id="top">
+</p>
+<p>
+</p><div id="top">
   <h1>
     <img id="tapestry" src="http://tapestry.apache.org/images/tapestry.png" alt="Tapestry" width="550" height="230" style="max-height: inherit">
   </h1>
@@ -163,7 +166,7 @@ new TWTR.Widget({
 }).render().start();
 </script>
 
-
+<p>
 <style type="text/css">
 #twtr-widget-1 .twtr-doc, #twtr-widget-1 .twtr-hd a, #twtr-widget-1 h3, #twtr-widget-1 h4, #twtr-widget-1 .twtr-popular {
     background-color: #569D2F !important;
@@ -175,7 +178,7 @@ new TWTR.Widget({
 }
 </style>
 
-
+</p>
 
 <h3><a shape="rect" name="Index-LatestnewsNews%21Feedicon.gif%21https%3A%2F%2Fcwiki.apache.org%2Fconfluence%2Fcreaterssfeed.action%3Ftypes%3Dblogpost%26spaces%3DTAPESTRY%26title%3DApacheTapestryNewsRSSFeed%26labelString%253D%26sort%3Dcreated%26maxResults%3D10%26timeSpan%3D12%26confirm%3DCreate%26showContent%3Dtrue%26showDiff%3Dfalse"></a><a shape="rect" href="news.html" title="News">Latest news</a> <a shape="rect" class="external-link" href="https://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&amp;spaces=TAPESTRY&amp;title=Apache+Tapestry+News+RSS+Feed&amp;labelString%3D&amp;sort=created&amp;maxResults=10&amp;timeSpan=12&amp;confirm=Create&amp;showContent=true&amp;showDiff=false"><span class="image-wrap" style=""><img src="index.data/Feed-icon.gif" style="border: 0px solid black"></span></a></h3>
 
@@ -187,25 +190,20 @@ new TWTR.Widget({
             <div class="logo-heading-block">
             <span class="logoBlock">
                 <a shape="rect" class="userLogoLink" href="https://cwiki.apache.org/confluence/display/~mlusetti">
-               <img class="userLogo logo" src="index.userimage/mlusetti-29482-pp-about-me.jpeg" alt="User icon: mlusetti" title="mlusetti">
+               <img class="userLogo logo" src="https://cwiki.apache.org/confluence/images/icons/profilepics/default.gif" alt="User icon: mlusetti" title="mlusetti">
            </a>            </span>
             <span class="blogHeading">
                 </span><div class="page-metadata not-personal"><a shape="rect" class="url fn confluence-userlink" href="https://cwiki.apache.org/confluence/display/~mlusetti">Massimo Lusetti</a> posted on Apr 29, 2013</div>
-                <a shape="rect" class="blogHeading" href="announcing-tapestry-537.html">Announcing Tapestry 5.3.7</a>
+                <a shape="rect" class="blogHeading" href="2013/04/29/announcing-tapestry-537.html">Announcing Tapestry 5.3.7</a>
             
         </div>
     
     <div class="wiki-content">
         <p>Apache Tapestry 5.3.7: improves security and stability.</p>
     </div>
-            <p><a shape="rect" href="announcing-tapestry-537.html" title="Read the rest of Announcing Tapestry 5.3.7 ">Read more&#8230;</a></p>
+            <p><a shape="rect" href="2013/04/29/announcing-tapestry-537.html" title="Read the rest of Announcing Tapestry 5.3.7 ">Read more&#8230;</a></p>
     
-            
-        <div class="endsection">
         
-            <a shape="rect" href="/confluence/pages/editblogpost.action?pageId=31819912">Edit</a>
-                    
-                    </div>
     </div>
     
         
@@ -213,25 +211,20 @@ new TWTR.Widget({
             <div class="logo-heading-block">
             <span class="logoBlock">
                 <a shape="rect" class="userLogoLink" href="https://cwiki.apache.org/confluence/display/~uli">
-               <img class="userLogo logo" src="index.userimage/uli.jpg" alt="User icon: uli" title="uli">
+               <img class="userLogo logo" src="https://cwiki.apache.org/confluence/images/icons/profilepics/default.gif" alt="User icon: uli" title="uli">
            </a>            </span>
             <span class="blogHeading">
                 </span><div class="page-metadata not-personal"><a shape="rect" class="url fn confluence-userlink" href="https://cwiki.apache.org/confluence/display/~uli">Ulrich St&#228;rk</a> posted on Feb 04, 2013</div>
-                <a shape="rect" class="blogHeading" href="new-website-infrastructure.html">New Website Infrastructure</a>
+                <a shape="rect" class="blogHeading" href="2013/02/04/new-website-infrastructure.html">New Website Infrastructure</a>
             
         </div>
     
     <div class="wiki-content">
         <p>A few days ago we changed our website infrastructure from a Confluence export that gets rsync'ed over several hosts until it reaches the ASF's main web servers to a SvnPubSub based approach. Now once an hour a buildbot build exports the site from Confluence and checks the changes into SVN where they get picked up by the public facing web servers almost instantly. This allows us to keep our old website sources in Confluence but also allows us to check in static resources like JavaDocs, &#8230;</p>
     </div>
-            <p><a shape="rect" href="new-website-infrastructure.html" title="Read the rest of New Website Infrastructure ">Read more&#8230;</a></p>
+            <p><a shape="rect" href="2013/02/04/new-website-infrastructure.html" title="Read the rest of New Website Infrastructure ">Read more&#8230;</a></p>
     
-            
-        <div class="endsection">
         
-            <a shape="rect" href="/confluence/pages/editblogpost.action?pageId=30752160">Edit</a>
-                    
-                    </div>
     </div>
     
         
@@ -239,25 +232,20 @@ new TWTR.Widget({
             <div class="logo-heading-block">
             <span class="logoBlock">
                 <a shape="rect" class="userLogoLink" href="https://cwiki.apache.org/confluence/display/~hlship">
-               <img class="userLogo logo" src="index.userimage/hlship-42158-pp-howard-basement-hands-folded-square.jpg" alt="User icon: hlship" title="hlship">
+               <img class="userLogo logo" src="https://cwiki.apache.org/confluence/images/icons/profilepics/default.gif" alt="User icon: hlship" title="hlship">
            </a>            </span>
             <span class="blogHeading">
                 </span><div class="page-metadata not-personal"><a shape="rect" class="url fn confluence-userlink" href="https://cwiki.apache.org/confluence/display/~hlship">Howard M. Lewis Ship</a> posted on Oct 12, 2012</div>
-                <a shape="rect" class="blogHeading" href="announcing-tapestry-536.html">Announcing Tapestry 5.3.6</a>
+                <a shape="rect" class="blogHeading" href="2012/10/12/announcing-tapestry-536.html">Announcing Tapestry 5.3.6</a>
             
         </div>
     
     <div class="wiki-content">
         <p>Apache Tapestry 5.3.6: improves security and stability.</p>
     </div>
-            <p><a shape="rect" href="announcing-tapestry-536.html" title="Read the rest of Announcing Tapestry 5.3.6 ">Read more&#8230;</a></p>
+            <p><a shape="rect" href="2012/10/12/announcing-tapestry-536.html" title="Read the rest of Announcing Tapestry 5.3.6 ">Read more&#8230;</a></p>
     
-            
-        <div class="endsection">
         
-            <a shape="rect" href="/confluence/pages/editblogpost.action?pageId=30739033">Edit</a>
-                    
-                    </div>
     </div>
     
 </div>
@@ -593,7 +581,7 @@ new TWTR.Widget({
 
 <div style="clear:both"></div></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.</p>
+<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">
 <script type="text/javascript">
   var _gaq = _gaq || [];
   _gaq.push(['_setAccount', 'UA-400821-1']);
@@ -604,7 +592,7 @@ new TWTR.Widget({
     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></div>
+</script></p></div>
 </div>
 		<div id="comments_thread"></div>
 		<script type="text/javascript" src="https://comments.apache.org/show_comments.lua?site=tapestry&amp;page=http://tapestry.apache.org/index.html" async="true">

Modified: websites/production/tapestry/content/indexv1.html
==============================================================================
--- websites/production/tapestry/content/indexv1.html (original)
+++ websites/production/tapestry/content/indexv1.html Sun Sep 22 22:21:21 2013
@@ -24,7 +24,10 @@
     IndexV1 -- 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">
@@ -34,9 +37,9 @@
 </div>
 
 <div id="top">
-<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em">
+<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><p>
 <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">
+</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>
@@ -61,7 +64,7 @@
 
 <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.</p>
+<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">
 <script type="text/javascript">
   var _gaq = _gaq || [];
   _gaq.push(['_setAccount', 'UA-400821-1']);
@@ -72,7 +75,7 @@
     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></div>
+</script></p></div>
 </div>
 		<div id="comments_thread"></div>
 		<script type="text/javascript" src="https://comments.apache.org/show_comments.lua?site=tapestry&amp;page=http://tapestry.apache.org/indexv1.html" async="true">

Modified: websites/production/tapestry/content/injection-faq.html
==============================================================================
--- websites/production/tapestry/content/injection-faq.html (original)
+++ websites/production/tapestry/content/injection-faq.html Sun Sep 22 22:21:21 2013
@@ -24,7 +24,18 @@
     Injection FAQ -- Apache Tapestry
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
+
+    <link href='http://cxf.apache.org/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
+  <link href='http://cxf.apache.org/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
+  <script type="text/javascript">
+  SyntaxHighlighter.defaults['toolbar'] = false;
+  SyntaxHighlighter.all();
+  </script>
+
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
+
 </head>
 <body>
   <div class="wrapper bs">
@@ -34,9 +45,9 @@
 </div>
 
 <div id="top">
-<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em">
+<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><p>
 <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">
+</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>
@@ -64,7 +75,7 @@ table.ScrollbarTable td.ScrollbarParent 
 table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
 table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
 
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="ajax-components-faq.html"><img align="middle" border="0" src="/images/confluence/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="ajax-components-faq.html">Ajax Components FAQ</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="frequently-asked-questions.html"><img align="middle" border="0" src="/images/confluence/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="frequently-asked-questions.html">Frequently Asked Questions</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="tapestry-inversion-of-control-faq.html">Tapestry Inversion of Control FAQ</a></td><td colspan="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="tapestry-inv
 ersion-of-control-faq.html"><img align="middle" border="0" src="/images/confluence/forwd_16.gif" width="16" height="16"></a></td></tr></table></div>
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="ajax-components-faq.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="ajax-components-faq.html">Ajax Components FAQ</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="frequently-asked-questions.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="frequently-asked-questions.html">Frequently Asked Questions</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="tapestry-inversion-of-control-faq.html">Tapestry Inversion of Control FAQ</a></td><td colspan="1" rowspan="1" 
 class="ScrollbarNextIcon"><a shape="rect" href="tapestry-inversion-of-control-faq.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div>
 
 <h2><a shape="rect" name="InjectionFAQ-Injection"></a>Injection</h2>
 
@@ -75,16 +86,16 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>The <tt>@Component</tt> annotation is used to define the <em>type</em> of component, and its parameter bindings. When using <tt>@Component</tt>, the template must not define the type, and any parameter bindings are merged in:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
-  &lt;a t:id=<span class="code-quote">"home"</span> class=<span class="code-quote">"nav"</span>&gt;Back to home&lt;/a&gt;
-</pre>
+<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
+  &lt;a t:id="home" class="nav"&gt;Back to home&lt;/a&gt;
+]]></script>
 </div></div>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
-  @Component(parameters={ <span class="code-quote">"page=index"</span> })
-  <span class="code-keyword">private</span> PageLink home;
-</pre>
+<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
+  @Component(parameters={ "page=index" })
+  private PageLink home;
+]]></script>
 </div></div>
 
 <p>Here the type of component is defined by the field type. The field name is matched against the <tt>t:id</tt> in the template. The <tt>page</tt> parameter is set in the Java class, and the informal <tt>class</tt> parameter is set in the template.  If the tag in the template was <tt>&lt;t:pagelink&gt;</tt>, or if the template tag included the attribute <tt>t:type="pagelink"</tt>, then you would see an exception.</p>
@@ -92,16 +103,16 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>By contrast, <tt>@InjectComponent</tt> expects the component to be already defined, and doesn't allow any configuration of it:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
-  &lt;t:form t:id=<span class="code-quote">"login"</span>&gt; .... &lt;/t:form&gt;
-</pre>
+<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
+  &lt;t:form t:id="login"&gt; .... &lt;/t:form&gt;
+]]></script>
 </div></div>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
+<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
   @InjectComponent
-  <span class="code-keyword">private</span> Form login;
-</pre>
+  private Form login;
+]]></script>
 </div></div>
 
 <p>Again, we're matching the field name to the component id, and you would get an error if the component is not defined in the template.</p>
@@ -111,18 +122,18 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>The <tt>@InjectPage</tt> annotation is used to inject some page in the application into a field of some other page.  You often see it used from event handler methods:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
+<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
   @InjectPage
-  <span class="code-keyword">private</span> ConfirmRegistration confirmRegistration;
+  private ConfirmRegistration confirmRegistration;
 
-  <span class="code-object">Object</span> onSuccessFromRegistrationForm()
+  Object onSuccessFromRegistrationForm()
   {
-    confirmRegistration.setStatus(<span class="code-quote">"Registration accepted"</span>);
+    confirmRegistration.setStatus("Registration accepted");
     confirmRegistration.setValidationCode(userRegistrationData.getValidationCode());
 
-    <span class="code-keyword">return</span> confirmRegistration;
+    return confirmRegistration;
   }
-</pre>
+]]></script>
 </div></div>
 
 <p>This code pattern is used to configure peristent properties of a page before returning it; Tapestry will send a client redirect to the page to present the data.</p>
@@ -136,10 +147,10 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>It's not uncommon to have two or more services that implement the exact same interface. When you inject, you might start by just identifying the type of service to inject:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
+<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
 	@Inject
-	<span class="code-keyword">private</span> ComponentEventResultProcessor processor;
-</pre>
+	private ComponentEventResultProcessor processor;
+]]></script>
 </div></div>
 
 <p>Which results in the error: <b>Service interface org.apache.tapestry5.services.ComponentEventResultProcessor is matched by 3 services: AjaxComponentEventResultProcessor, ComponentEventResultProcessor, ComponentInstanceResultProcessor. Automatic dependency resolution requires that exactly one service implement the interface.</b></p>
@@ -147,10 +158,10 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>We need more information than just the service interface type in order to identify which of the three services to inject. One possibility is to inject with the correct service id:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
-	@InjectService(<span class="code-quote">"ComponentEventResultProcessor"</span>)
-	<span class="code-keyword">private</span> ComponentEventResultProcessor processor;
-</pre>
+<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
+	@InjectService("ComponentEventResultProcessor")
+	private ComponentEventResultProcessor processor;
+]]></script>
 </div></div>
 
 <p>This works ... but it is clumsy. If the service id, "ComponentEventResultProcessor", ever changes, this code will break. It's not <em>refactoring safe</em>.</p>
@@ -158,25 +169,25 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>Instead, we should use marker annotations.  If we look at <tt>TapestryModule</tt>, where the ComponentEventResultProcessor service is defined, we'll see it identifies the necessary markers:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
+<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
     @Marker(
     { Primary.class, Traditional.class })
-    <span class="code-keyword">public</span> ComponentEventResultProcessor buildComponentEventResultProcessor(
-            Map&lt;<span class="code-object">Class</span>, ComponentEventResultProcessor&gt; configuration)
+    public ComponentEventResultProcessor buildComponentEventResultProcessor(
+            Map&lt;Class, ComponentEventResultProcessor&gt; configuration)
     {
-        <span class="code-keyword">return</span> constructComponentEventResultProcessor(configuration);
+        return constructComponentEventResultProcessor(configuration);
     }
-</pre>
+]]></script>
 </div></div>
 
 <p>When a service has marker annotations, the annotations present at the <em>point of injection</em> (the field, method parameter, or constructor parameter) are used to select a matching service.  The list of services that match by type is then filtered to only include services that have all of the marker annotations present at the point of injection.</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
-<pre class="code-java">
+<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
     @Inject
 	@Traditional @Primary
-	<span class="code-keyword">private</span> ComponentEventResultProcessor processor;
-</pre>
+	private ComponentEventResultProcessor processor;
+]]></script>
 </div></div>
 
 <p>The two marker annotations, <tt>@Traditional</tt> and <tt>@Primary</tt>, ensure that only a single service matches.</p>
@@ -269,17 +280,17 @@ var footnoteMarkerHighlight = function(i
 <p>In certain cases, Tapestry exposes a service (which can be injected) that is a proxy to the environmental; this is primarily for common environmentals, such as <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a>, that may be needed outside of component classes.  You can see this in TapestryModule:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>TapestryModule.java (partial)</b></div><div class="codeContent panelContent">
-<pre class="code-java">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
     /**
-     * Builds a proxy to the current {@link JavaScriptSupport} inside <span class="code-keyword">this</span> thread's {@link Environment}.
+     * Builds a proxy to the current {@link JavaScriptSupport} inside this thread's {@link Environment}.
      * 
      * @since 5.2.0
      */
-    <span class="code-keyword">public</span> JavaScriptSupport buildJavaScriptSupport()
+    public JavaScriptSupport buildJavaScriptSupport()
     {
-        <span class="code-keyword">return</span> environmentalBuilder.build(JavaScriptSupport.class);
+        return environmentalBuilder.build(JavaScriptSupport.class);
     }
-</pre>
+]]></script>
 </div></div>
 
 <p>This kind of logic is based on the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/EnvironmentalShadowBuilder.html">EnvironmentalShadowBuilder</a> service.</p>
@@ -289,12 +300,12 @@ var footnoteMarkerHighlight = function(i
 <p>Yes, of course Tapestry is thread safe.  The Request service is another special case, as seen in TapestryModule:</p>
 
 <div class="code panel" style="border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;"><b>TapestryModule.java (partial)</b></div><div class="codeContent panelContent">
-<pre class="code-java">
-    <span class="code-keyword">public</span> Request buildRequest()
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+    public Request buildRequest()
     {
-        <span class="code-keyword">return</span> shadowBuilder.build(requestGlobals, <span class="code-quote">"request"</span>, Request.class);
+        return shadowBuilder.build(requestGlobals, "request", Request.class);
     }
-</pre>
+]]></script>
 </div></div>
 
 <p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/RequestGlobals.html">RequestGlobals</a> is a per-thread service.  The Request service is a global singleton created by the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/PropertyShadowBuilder.html">PropertyShadowBuilder</a> service, but is just a proxy. It has no internal state; invoking a method on the Request service just turns around and extracts the Request object from the per-thread RequestGlobals and invokes the same method there.</p>
@@ -313,7 +324,7 @@ table.ScrollbarTable td.ScrollbarParent 
 table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
 table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
 
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="ajax-components-faq.html"><img align="middle" border="0" src="/images/confluence/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="ajax-components-faq.html">Ajax Components FAQ</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="frequently-asked-questions.html"><img align="middle" border="0" src="/images/confluence/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="frequently-asked-questions.html">Frequently Asked Questions</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="tapestry-inversion-of-control-faq.html">Tapestry Inversion of Control FAQ</a></td><td colspan="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="tapestry-inv
 ersion-of-control-faq.html"><img align="middle" border="0" src="/images/confluence/forwd_16.gif" width="16" height="16"></a></td></tr></table></div>
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="ajax-components-faq.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="ajax-components-faq.html">Ajax Components FAQ</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="frequently-asked-questions.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="frequently-asked-questions.html">Frequently Asked Questions</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="tapestry-inversion-of-control-faq.html">Tapestry Inversion of Control FAQ</a></td><td colspan="1" rowspan="1" 
 class="ScrollbarNextIcon"><a shape="rect" href="tapestry-inversion-of-control-faq.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div>
 
 <hr>
 <p><table class="Footnotes" style="width: 100%; border:none;" cellspacing="0" cellpadding="0" summary="This table contains one or more notes for references made elsewhere on the page."><caption class="accessibility">Footnotes</caption><thead class="accessibility"><tr class="accessibility"><th colspan="1" rowspan="1" class="accessibility" id="footnote-th1">Reference</th><th colspan="1" rowspan="1" class="accessibility" id="footnote-th2">Notes</th></tr></thead><tbody><tr name="Footnote1"><td colspan="1" rowspan="1" valign="top" class="FootnoteNum" headings="footnote-th1">
@@ -327,7 +338,7 @@ table.ScrollbarTable td.ScrollbarNextIco
 
 <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.</p>
+<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">
 <script type="text/javascript">
   var _gaq = _gaq || [];
   _gaq.push(['_setAccount', 'UA-400821-1']);
@@ -338,7 +349,7 @@ table.ScrollbarTable td.ScrollbarNextIco
     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></div>
+</script></p></div>
 </div>
 		<div id="comments_thread"></div>
 		<script type="text/javascript" src="https://comments.apache.org/show_comments.lua?site=tapestry&amp;page=http://tapestry.apache.org/injection-faq.html" async="true">