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 2015/06/27 23:21:05 UTC

svn commit: r956226 [30/34] - in /websites/production/tapestry/content: ./ 2010/10/11/ 2010/10/31/ 2010/11/18/ 2010/11/19/ 2010/12/16/ 2010/12/17/ 2011/01/10/ 2011/03/29/ 2011/06/13/ 2011/06/24/ 2011/06/29/ 2011/07/29/ 2011/08/16/ 2011/08/27/ 2011/10/3...

Modified: websites/production/tapestry/content/starting-the-ioc-registry.html
==============================================================================
--- websites/production/tapestry/content/starting-the-ioc-registry.html (original)
+++ websites/production/tapestry/content/starting-the-ioc-registry.html Sat Jun 27 21:21:02 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.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"/>
 
@@ -55,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><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"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Starting the IoC Registry</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" 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">Starting the IoC Registry</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -76,7 +66,7 @@ table.ScrollbarTable td.ScrollbarNextNam
 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="type-coercion.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="type-coercion.html">Type Coercion</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="ioc.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="ioc.html">IoC</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="registry-startup.html">Registry Startup</a></td><td colspan="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="registry-startup.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><h1 id="StartingtheIoCRegistry-StartingtheTapestryIoCRegistry">Starting the Tapestry IoC Registry</h1><p>Primarily, you will use the IoC Registry as part of a Tapestry application. In those situations, the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/TapestryFilter.html">TapestryFilter</a> will be responsible for starting and stopping the registry.</p><p>However, you may want to do some integration testing using the Registry from within a test case, or you may even use Tapestry IoC separately from Tapestry.</p><h1 id="StartingtheIoCRegistry-BuildingtheRegistry">Building the Registry</h1><p>The class <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/RegistryBuilder.html">RegistryBuilder</a> is used to create a Registry.</p><div class="code panel pdl" style="borde
 r-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[RegistryBuilder builder = new RegistryBuilder();
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[RegistryBuilder builder = new RegistryBuilder();
 
 builder.add(AppModule.class, UtilModule.class);
 
@@ -85,18 +75,11 @@ Registry registry = builder.build();
 registry.performRegistryStartup();]]></script>
 </div></div><p>You may invoke add() as many times as you wish, or pass as many module classes as you wish.</p><p>Using this approach, you will form a Registry containing the built-in services from the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/TapestryIoCModule.html">Tapestry IoC module</a>, plus the modules you explicitly list.</p><p>The call to performRegistryStartup() is necessary to ensure that any services marked with the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/EagerLoad.html">EagerLoad</a> annotation are, in fact, loaded.</p>
 
-    <div class="aui-message hint shadowed information-macro">
-                    <p class="title">Added in 5.2</p>
-                            <span class="aui-icon icon-hint">Icon</span>
-                <div class="message-content">
-                            
-
-                    </div>
-    </div>
-
+<div class="confluence-information-macro confluence-information-macro-information"><p class="title">Added in 5.2</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body">
+</div></div>
 <div style="border-right: 20px solid #D8E4F1;border-left: 20px solid #D8E4F1;">
 <p>&#160;</p></div><p>As of version 5.2 the class <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/RegistryBuilder.html">RegistryBuilder</a> has convenience methods to build and start a Registry. The static method <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/RegistryBuilder.html#buildAndStartupRegistry(java.lang.Class...)">RegistryBuilder.buildAndStartupRegistry(Class...)</a> constructs a registry, adds a number of modules to the registry and performs registry startup. The returned registry is ready to use.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[Registry registry = RegistryBuilder.buildAndStartupRegistry(AppModule.class, UtilModule.class);
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[Registry registry = RegistryBuilder.buildAndStartupRegistry(AppModule.class, UtilModule.class);
 ]]></script>
 </div></div><h1 id="StartingtheIoCRegistry-BuildingtheDefaultRegistry">Building the Default Registry</h1><p>The default registry is available by invoking the static method <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/IOCUtilities.html#buildDefaultRegistry">IOCUtilities.buildDefaultRegistry()</a>. This method builds a Registry using <a shape="rect" href="autoloading-modules.html">autoloading logic</a>, where modules to load are identified via a JAR Manifest entry.</p><p>In addition, the JVM system property <code>tapestry.modules</code> (if specified) is a list of additional module classes to load. This is often used in development, where tests may be executed against the local classes, not JARs, and so there is no manifest to read.</p><h1 id="StartingtheIoCRegistry-ShuttingdowntheRegistry">Shutting down the Registry</h1><p>The method <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidoc
 s/org/apache/tapestry5/ioc/Registry.html#shutdown">Registry.shutdown()</a> will shutdown the Registry. This immediately invalidates all service proxies. Some services may have chosen to register for shutdown notification (for example, to do cleanup work such as closing a database connection).</p><p>Once the Registry is shutdown, it may not be used again: it will not be possible to access services within the Registry, or invoke methods on services previously acquired. All you can do is release the Registry to the garbage collector.</p><style type="text/css">/*<![CDATA[*/
 table.ScrollbarTable  {border: none;padding: 3px;width: 100%;padding: 3px;margin: 0px;background-color: #f0f0f0}

Modified: websites/production/tapestry/content/statistics.html
==============================================================================
--- websites/production/tapestry/content/statistics.html (original)
+++ websites/production/tapestry/content/statistics.html Sat Jun 27 21:21:02 2015
@@ -45,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><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"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Statistics</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" 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">Statistics</h1></div></div>
 <div class="clearer"></div>
 </div>
 

Modified: websites/production/tapestry/content/strategybuilder-service.html
==============================================================================
--- websites/production/tapestry/content/strategybuilder-service.html (original)
+++ websites/production/tapestry/content/strategybuilder-service.html Sat Jun 27 21:21:02 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.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"/>
 
@@ -55,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><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"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">StrategyBuilder Service</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" 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">StrategyBuilder Service</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -80,45 +70,7 @@ table.ScrollbarTable td.ScrollbarNextIco
 <h1 id="StrategyBuilderService-StrategyPattern">Strategy Pattern</h1>
 
 <div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<h3>Related Articles</h3>
-<ul class="content-by-label"><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="chainbuilder-service.html">ChainBuilder Service</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="shadowbuilder-service.html">ShadowBuilder Service</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="strategybuilder-service.html">StrategyBuilder Service</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="pipelinebuilder-service.html">PipelineBuilder Service</a>
-                    
-                
-                            </div>
-        </li></ul>
-</div> 
+<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div> 
 
 <p>Another of the Gang Of Four patterns, the strategy pattern as implemented in Tapestry IoC is a kind of late binding.</p>
 
@@ -133,7 +85,7 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>The StrategyBuilder service (<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/StrategyBuilder.html">API</a>) creates a service implementation around a strategy registry.</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
 public interface StrategyBuilder
 {
     &lt;S&gt; S build(StrategyRegistry&lt;S&gt; registry);
@@ -155,7 +107,7 @@ public interface StrategyBuilder
 <p>You convert the configuration into a StrategyRegistry, and use that to build the final service:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
   public static MyStrategyService build(Map&lt;Class, MyStrategyService&gt; configuration,
     @InjectService(&quot;StrategyBuilder&quot;)
     StrategyBuilder builder)

Modified: websites/production/tapestry/content/support.html
==============================================================================
--- websites/production/tapestry/content/support.html (original)
+++ websites/production/tapestry/content/support.html Sat Jun 27 21:21:02 2015
@@ -45,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><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"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Support</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" 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">Support</h1></div></div>
 <div class="clearer"></div>
 </div>
 

Modified: websites/production/tapestry/content/supporting-informal-parameters.html
==============================================================================
--- websites/production/tapestry/content/supporting-informal-parameters.html (original)
+++ websites/production/tapestry/content/supporting-informal-parameters.html Sat Jun 27 21:21:02 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.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"/>
 
@@ -55,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><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"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Supporting Informal Parameters</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" 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">Supporting Informal Parameters</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -81,45 +71,7 @@ table.ScrollbarTable td.ScrollbarNextIco
 <h2 id="SupportingInformalParameters-SupportingInformalParameters">Supporting Informal Parameters</h2>
 
 <div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<h3>Related Articles</h3>
-<ul class="content-by-label"><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="supporting-informal-parameters.html">Supporting Informal Parameters</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="enum-parameter-recipe.html">Enum Parameter Recipe</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="default-parameter.html">Default Parameter</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="component-parameters.html">Component Parameters</a>
-                    
-                
-                            </div>
-        </li></ul>
-</div>
+<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div>
 
 <p>Informal parameters are any additional parameters beyond the parameters explicitly defined for a component using the <a shape="rect" class="external-link" href="http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/annotations/Parameter.html">Parameter</a> annotation.</p>
 
@@ -132,7 +84,7 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>In the example below we create an Img component, a custom replacement for the &lt;img&gt; tag. Its src parameter will be an asset. We'll use the @SupportsInformalParameters annotation to tell Tapestry that the component should support informal parameters.</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
 @SupportsInformalParameters
 public class Img
 {
@@ -162,7 +114,7 @@ public class Img
 <p>Another, equivalent, approach is to use the <a shape="rect" class="external-link" href="http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/corelib/mixins/RenderInformals.html">RenderInformals</a> mixin:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
 public class Img
 {
     @Parameter(required=true, allowNull=false, defaultPrefix=BindingConstants.ASSET)

Modified: websites/production/tapestry/content/switching-cases.html
==============================================================================
--- websites/production/tapestry/content/switching-cases.html (original)
+++ websites/production/tapestry/content/switching-cases.html Sat Jun 27 21:21:02 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.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"/>
 
@@ -55,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><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"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Switching Cases</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" 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">Switching Cases</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -78,7 +68,7 @@ table.ScrollbarTable td.ScrollbarNextIco
 /*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="component-libraries.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="component-libraries.html">Component Libraries</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="cookbook.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="cookbook.html">Cookbook</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="enum-parameter-recipe.html">Enum Parameter Recipe</a></td><td colspan="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="enum-parameter-recipe.html"><i
 mg align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div><h1 id="SwitchingCases-SwitchingCases">Switching Cases</h1><p>With Tapestry's <code>If</code> component you can only test one condition at a time. In order to distinguish multiple cases, you'd have to write complex nested if/else constructs in your page template and have a checker method for each test inside your page class.</p><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
 <p>    <strong>JumpStart Demo:</strong><br clear="none">
     <a shape="rect" class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart/examples/lang/ifnotnegateswitchelseunless" >If, Not, Negate, Switch, Else, Unless</a></p></div><p>In cases where you have to distinguish multiple cases, the <code>Delegate</code> component comes in. It delegates rendering to some other component, for example a <code>Block</code>. For each case you have, you basically wrap the content inside a <code>Block</code> that doesn't get rendered by default. You then place a Delegate component on your page and point it to a method inside your page class that will decide which of your Blocks should be rendered.</p><p>Imagine for example a use case, where you want to distinguish between 4 cases and you have an int property called <code>whichCase</code> that should be tested against. Your page template would look as follows:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1
 px;"><b>SwitchMe.tml</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;html xmlns:t=&quot;http://tapestry.apache.org/schema/tapestry_5_1_0.xsd&quot;&gt;
+<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[&lt;html xmlns:t=&quot;http://tapestry.apache.org/schema/tapestry_5_1_0.xsd&quot;&gt;
     &lt;body&gt;
         &lt;h1&gt;Switch&lt;/h1&gt;
 
@@ -103,7 +93,7 @@ table.ScrollbarTable td.ScrollbarNextIco
 &lt;/html&gt;
 ]]></script>
 </div></div><p>You can see, that the <code>Delegate</code> component's <code>to</code> parameter is bound to the case property of your page class. In your page class you therefore have a <code>getCase()</code> method that is responsible for telling the <code>Delegate</code> component which component should be rendered. For that we are injecting references to the <code>Block}}s defined in your page template into the page class and return the according {{Block</code> in the <code>getCase()</code> method.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>SwitchMe.java</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[public class SwitchMe
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[public class SwitchMe
 {
     @Persist
     private int whichCase;

Modified: websites/production/tapestry/content/symbols.html
==============================================================================
--- websites/production/tapestry/content/symbols.html (original)
+++ websites/production/tapestry/content/symbols.html Sat Jun 27 21:21:02 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.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"/>
 
@@ -55,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><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"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Symbols</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" 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">Symbols</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -78,63 +68,7 @@ table.ScrollbarTable td.ScrollbarNextIco
 /*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="ordering-by-constraints.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="ordering-by-constraints.html">Ordering by Constraints</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="ioc.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="ioc.html">IoC</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="chainbuilder-service.html">ChainBuilder Service</a></td><td colspan="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="chainbuilder-service.html"><img ali
 gn="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div>
 
 <div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<h3>Related Articles</h3>
-<ul class="content-by-label"><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="application-module-class-cheat-sheet.html">Application Module Class Cheat Sheet</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="response-compression.html">Response Compression</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="tapestry-ioc-configuration.html">Tapestry IoC Configuration</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="configuration.html">Configuration</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="symbols.html">Symbols</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="ioc-cookbook-service-configurations.html">IoC cookbook - Service Configurations</a>
-                    
-                
-                            </div>
-        </li></ul>
-</div>
+<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div>
 
 <h1 id="Symbols-Symbols">Symbols</h1>
 
@@ -145,7 +79,7 @@ table.ScrollbarTable td.ScrollbarNextIco
 <p>The syntax of symbols is based on Ant expressions. That is, the name is surrounded by ${ and } characters:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
 ${some.symbol.name}
 ]]></script>
 </div></div>
@@ -163,7 +97,7 @@ ${some.symbol.name}
 <p>For example:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
   public static MyService build(
       @InjectService(&quot;${some-service-id}&quot;) Collaborator collab)
   {
@@ -180,7 +114,7 @@ ${some.symbol.name}
 <p>You may also inject symbol values. For example, if you are interested in whether the application is in production mode or developer mode:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
 public class MyService implements MyServiceInterface
 {
   public MyService(@Value(&quot;${tapestry.production-mode}&quot;) boolean productionMode, ...)
@@ -195,7 +129,7 @@ public class MyService implements MyServ
 <p>As an alternative, the @Symbol annotation, may be used:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
 public class MyService implements MyServiceInterface
 {
   public MyService(@Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode, ...)
@@ -228,7 +162,7 @@ public class MyService implements MyServ
 <p>From the previous example:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
   public void contributeApplicationDefaults(MappedConfiguration&lt;String, String&gt; configuration)
   {
     configuration.add(&quot;some-service-id&quot;, &quot;WackyCollaborator&quot;);
@@ -248,7 +182,7 @@ public class MyService implements MyServ
 <p>It is possible and valid to define one symbol in terms of one or more other symbols.</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
   public void contributeFactoryDefaults(MappedConfiguration&lt;String, String&gt; configuration)
   {
       configuration.add(&quot;report.url&quot;, &quot;http://${report.host}:${report.port}/${report.path}&quot;);
@@ -265,7 +199,7 @@ public class MyService implements MyServ
 <p>Tapestry checks that no symbol is directly or indirectly dependent on itself. For example, the following contribution is illegal:</p>
 
 <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[
   public void contributeApplicationDefaults(MappedConfiguration&lt;String, String&gt; configuration)
   {
       configuration.add(&quot;report.path&quot;, &quot;${report.url}/report.cgi&quot;);

Modified: websites/production/tapestry/content/tapestry-for-jsf-users.html
==============================================================================
--- websites/production/tapestry/content/tapestry-for-jsf-users.html (original)
+++ websites/production/tapestry/content/tapestry-for-jsf-users.html Sat Jun 27 21:21:02 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.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"/>
 
@@ -55,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><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"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Tapestry for JSF Users</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" 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 for JSF Users</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -76,55 +66,8 @@ table.ScrollbarTable td.ScrollbarNextNam
 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="component-cheat-sheet.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="component-cheat-sheet.html">Component Cheat Sheet</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="cheat-sheets.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="cheat-sheets.html">Cheat Sheets</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;</td></tr></table></div><h1 id="TapestryforJSFUsers-TapestryforJSFUsers">Tapestry for JSF Users</h1><div class="navmenu" style="float:right; background:#eee; margin:3px
 ; padding:3px">
-<h3>Related Articles</h3>
-<ul class="content-by-label"><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="tapestry-for-jsf-users.html">Tapestry for JSF Users</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="introduction.html">Introduction</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="tapestry-tutorial.html">Tapestry Tutorial</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="getting-started.html">Getting Started</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="principles.html">Principles</a>
-                    
-                
-                            </div>
-        </li></ul>
-</div><p>This isa brief guide for learning Tapestry, designed for those who already know JavaServer Faces (JSF).</p><p>Because both JSF and Tapestry are component oriented frameworks designed to serve mostly the same kinds of problems in similar ways, developers who already know JSF will find it very easy to learn Tapestry. In fact, Facelets, the default view technology in JSF 2.0, was created specifically to give JSF a Tapestry-like templating capability, so Facelets users should feel right at home.</p><p>Since almost all modern JSF applications use Facelets as their view technology, we assume the use of Facelets here when discussing JSF features.</p><p>JSF is a rich, mature web framework specification, and there are lots of smart people who use it productively. This guide isn't intended as a pro-versus-con comparison or as advocacy of any kind. Instead, it just attempts to make transitions between the two frameworks easier, regardless of the reason for doing so.</p><h2 id="Tapestr
 yforJSFUsers-Side-by-sideComparison">Side-by-side Comparison</h2><p>JSF and Tapestry have a lot of superficial similarities, so the first steps in that transition are all about relating similar concepts, terms and components in your mind:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Concepts &amp; Terminology</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Java class associated with a page or component</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"Backing Bean"</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"<a shape="rect" href="component-classes.html">Component Class</a>"</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Component attributes/parameters</p></td><td colspan="1" rowspan="1" class="confluenceTd">
 <p>"attributes"</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"<a shape="rect" href="component-parameters.html">parameters</a>"</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Common Attributes/Parameters</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>HTML Attribute used for invisible instrumentation</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>jsfc="someComponentType"</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" href="component-templates.html">t:type="someComponentType"</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>CSS "class" attribute name</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>styleClass</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>class</p></td></tr><tr><td colspan="1" rowspan="1" cla
 ss="confluenceTd"><p>Alternating "zebra" striped rows</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>rowclasses="class1,class2"</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>class="${cycle:class1,class2}" using <a shape="rect" class="external-link" href="https://wiki.apache.org/tapestry/Tapestry5HowToAddBindingPrefixCycle">cycle binding prefix</a>, or with CSS: .rowClass:nth-child(even) {background-color: #e8e8e8;}</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Output and Messages</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Escaped HTML from property</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:outputText value="myBean.myValue"/&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${myValue}</p></td></tr><tr><td colspan="1" rowspan="1" class="confl
 uenceTd"><p>Raw HTML from property</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>#{myBean.myValue}</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/OutputRaw.html">&lt;t:outputRaw value="myValue"/&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Error messages</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:message&gt; and &lt;h:messages&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Error.html">&lt;t:error&gt;</a> and <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Errors.html">&lt;t:errors&gt;</a> (for forms) or <a shape="rect" class="external-link" href="http://tapes
 try.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Alerts.html">&lt;t:alerts&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Image display</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:graphicImage&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>use standard &lt;img&gt; tag</em></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Conditionals and Looping</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Render-time loop</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;ui:repeat&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Loop.html">&lt;t:loop&gt;</a></p></td></tr><tr><td
  colspan="1" rowspan="1" class="confluenceTd"><p>Compile-time loop</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;c:forEach&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Loop.html">&lt;t:loop&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Conditional</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;c:if test="#{myBean.myValue}"&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html">&lt;t:if test="myValue"&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Conditional</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;ui:fragment rendered="#{myBean.someCondition}"/&gt;...&lt;/ui:fragment&gt;</p></td>
 <td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html">&lt;t:if test="someCondition"&gt;...&lt;/t:if&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Switch</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;c:choose&gt;&lt;c:when ... &gt;&lt;/c:choose&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>See <a shape="rect" href="switching-cases.html">Switching Cases</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Server-side comment</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;ui:remove&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" href="component-templates.html">&lt;t:remove&gt;</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Links and Buttons</p></th><th colspan="1" rowspan="1" class="confluenceTh
 "><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Navigational link</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:link outcome="nextpage.xhtml"/&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/PageLink.html">&lt;t:pagelink page="nextpage"/&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Event-triggering link, without form submission</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not available</em></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/ActionLink.html">&lt;t:actionLink&gt;</a> or <a shape="rect" class="external-link" href="http://tapestr
 y.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/EventLink.html">&lt;t:eventLink&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Form submission link</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:commandLink&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/LinkSubmit.html">&lt;t:linkSubmit&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Form submission button</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:commandButton&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Submit.html">&lt;t:submit&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Link to Javascript fi
 le</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:outputScript&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>&lt;script&gt; or use @Import in component class</em></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Link to CSS file</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:outputStylesheet&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>&lt;style&gt; or use @Import in component class</em></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Grids, Tables and Trees</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Tabular data in &lt;table&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:datatable&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" 
 href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Grid.html">&lt;t:grid&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Table used for layout</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:panelGrid&gt; with &lt;h:panelGroup&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>use standard &lt;table&gt; tag</em></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Hierarchical tree</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>depends on component library</em></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Tree.html">&lt;t:tree&gt;</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Form Tags/Components</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" r
 owspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Form</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:form&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Form.html">&lt;t:form&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Single-line text input field</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:inputText&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/TextField.html">&lt;t:textField&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Password field</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:inputSecret&gt;</p></td><td cols
 pan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/PasswordField.html">&lt;t:passwordfield&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Select menu</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectOneMenu&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Select.html">&lt;t:select&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Checkbox</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectBooleanCheckbox&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Checkbox.html">&lt;t:checkbox&gt;</
 a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Checkbox list</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectManyCheckbox&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Checklist.html">&lt;t:checklist&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Radio button list</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectOneRadio&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/RadioGroup.html">&lt;t:radioGroup&gt;</a> with <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Radio.html">&lt;t:radio&gt;</a></p></td></tr><tr><td colspan="
 1" rowspan="1" class="confluenceTd"><p>Multiple select menu</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectManyListbox&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not available</em> (but see Palette and Checklist)</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Hidden field</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:inputHidden&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Hidden.html">&lt;t:hidden&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>textarea tag</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:inputTextarea&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/compone
 nts/TextArea.html">&lt;t:textArea&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Label tag</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:outputLabel for="..."&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Label.html">&lt;t:label for="..."&gt;</a></p></td></tr></tbody></table></div><p>Some important notes:</p><ul><li>With Tapestry, you don't use the ${...} syntax with parameters of components. Just use a bare expression within the quotes. For example: &lt;t:textfield value="myProperty"&gt; instead of &lt;t:textfield value="${myProperty}"&gt;, because in the latter case the expression is converted to a read-only string before the textfield component gets it.</li></ul><h2 id="TapestryforJSFUsers-HelloWorldComparison">Hello World Comparison</h2><p>Faces templates and Tapestry templates are super
 ficially quite similar.</p><div class="sectionColumnWrapper"><div class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>JSF template (helloworld.xhtml)</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;
+<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div><p>This isa brief guide for learning Tapestry, designed for those who already know JavaServer Faces (JSF).</p><p>Because both JSF and Tapestry are component oriented frameworks designed to serve mostly the same kinds of problems in similar ways, developers who already know JSF will find it very easy to learn Tapestry. In fact, Facelets, the default view technology in JSF 2.0, was created specifically to give JSF a Tapestry-like templating capability, so Facelets users should feel right at home.</p><p>Since almost all modern JSF applications use Facelets as their view technology, we assume the use of Facelets here when discussing JSF features.</p><p>JSF is a rich, mature web framework specification, and there are lots of smart people who use it productively. This guide isn't intended as a pro-
 versus-con comparison or as advocacy of any kind. Instead, it just attempts to make transitions between the two frameworks easier, regardless of the reason for doing so.</p><h2 id="TapestryforJSFUsers-Side-by-sideComparison">Side-by-side Comparison</h2><p>JSF and Tapestry have a lot of superficial similarities, so the first steps in that transition are all about relating similar concepts, terms and components in your mind:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Concepts &amp; Terminology</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Java class associated with a page or component</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"Backing Bean"</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"<a shape="rect" href="component-class
 es.html">Component Class</a>"</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Component attributes/parameters</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"attributes"</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>"<a shape="rect" href="component-parameters.html">parameters</a>"</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Common Attributes/Parameters</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>HTML Attribute used for invisible instrumentation</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>jsfc="someComponentType"</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" href="component-templates.html">t:type="someComponentType"</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>CSS "class" attribute na
 me</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>styleClass</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>class</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Alternating "zebra" striped rows</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>rowclasses="class1,class2"</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>class="${cycle:class1,class2}" using <a shape="rect" class="external-link" href="https://wiki.apache.org/tapestry/Tapestry5HowToAddBindingPrefixCycle">cycle binding prefix</a>, or with CSS: .rowClass:nth-child(even) {background-color: #e8e8e8;}</p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Output and Messages</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Escaped HTML from property</p></td><td colspan="1" rowspan="1" class="co
 nfluenceTd"><p>&lt;h:outputText value="myBean.myValue"/&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${myValue}</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Raw HTML from property</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>#{myBean.myValue}</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/OutputRaw.html">&lt;t:outputRaw value="myValue"/&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Error messages</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:message&gt; and &lt;h:messages&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Error.html">&lt;t:error&gt;</a> and <a shape="rect" class="external-link" href="
 http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Errors.html">&lt;t:errors&gt;</a> (for forms) or <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Alerts.html">&lt;t:alerts&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Image display</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:graphicImage&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>use standard &lt;img&gt; tag</em></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Conditionals and Looping</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Render-time loop</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;ui:repeat&gt;</p></td><td colspan="1" rowspan="1" class="conflu
 enceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Loop.html">&lt;t:loop&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Compile-time loop</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;c:forEach&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Loop.html">&lt;t:loop&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Conditional</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;c:if test="#{myBean.myValue}"&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html">&lt;t:if test="myValue"&gt;</a></p></td></tr><tr><td colspan="1" rowspan
 ="1" class="confluenceTd"><p>Conditional</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;ui:fragment rendered="#{myBean.someCondition}"/&gt;...&lt;/ui:fragment&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html">&lt;t:if test="someCondition"&gt;...&lt;/t:if&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Switch</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;c:choose&gt;&lt;c:when ... &gt;&lt;/c:choose&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>See <a shape="rect" href="switching-cases.html">Switching Cases</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Server-side comment</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;ui:remove&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" href="c
 omponent-templates.html">&lt;t:remove&gt;</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Links and Buttons</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Navigational link</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:link outcome="nextpage.xhtml"/&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/PageLink.html">&lt;t:pagelink page="nextpage"/&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Event-triggering link, without form submission</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not available</em></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href
 ="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/ActionLink.html">&lt;t:actionLink&gt;</a> or <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/EventLink.html">&lt;t:eventLink&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Form submission link</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:commandLink&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/LinkSubmit.html">&lt;t:linkSubmit&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Form submission button</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:commandButton&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apa
 che.org/current/apidocs/org/apache/tapestry5/corelib/components/Submit.html">&lt;t:submit&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Link to Javascript file</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:outputScript&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>&lt;script&gt; or use @Import in component class</em></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Link to CSS file</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:outputStylesheet&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>&lt;style&gt; or use @Import in component class</em></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Grids, Tables and Trees</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Tabular data in &lt;
 table&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:datatable&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Grid.html">&lt;t:grid&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Table used for layout</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:panelGrid&gt; with &lt;h:panelGroup&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>use standard &lt;table&gt; tag</em></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Hierarchical tree</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>depends on component library</em></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Tree.html">&lt;t:tree
 &gt;</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Form Tags/Components</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Form</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:form&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Form.html">&lt;t:form&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Single-line text input field</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:inputText&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/TextField.html">&lt;t:textField&gt
 ;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Password field</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:inputSecret&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/PasswordField.html">&lt;t:passwordfield&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Select menu</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectOneMenu&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Select.html">&lt;t:select&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Checkbox</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectBooleanCheckbox&gt;</p></td><td colspan="1" rowspan="1
 " class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Checkbox.html">&lt;t:checkbox&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Checkbox list</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectManyCheckbox&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Checklist.html">&lt;t:checklist&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Radio button list</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectOneRadio&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/RadioGroup.html">&lt;t:radioGroup&gt;</a> with <
 a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Radio.html">&lt;t:radio&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Multiple select menu</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:selectManyListbox&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not available</em> (but see Palette and Checklist)</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Hidden field</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:inputHidden&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Hidden.html">&lt;t:hidden&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>textarea tag</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:inputTextarea
 &gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/TextArea.html">&lt;t:textArea&gt;</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Label tag</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&lt;h:outputLabel for="..."&gt;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Label.html">&lt;t:label for="..."&gt;</a></p></td></tr></tbody></table></div><p>Some important notes:</p><ul><li>With Tapestry, you don't use the ${...} syntax with parameters of components. Just use a bare expression within the quotes. For example: &lt;t:textfield value="myProperty"&gt; instead of &lt;t:textfield value="${myProperty}"&gt;, because in the latter case the expression is converted to a read-o
 nly string before the textfield component gets it.</li></ul><h2 id="TapestryforJSFUsers-HelloWorldComparison">Hello World Comparison</h2><p>Faces templates and Tapestry templates are superficially quite similar.</p><div class="sectionColumnWrapper"><div class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>JSF template (helloworld.xhtml)</b></div><div class="codeContent panelContent pdl">
+<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;
         xmlns:h=&quot;http://java.sun.com/jsf/html&quot;&gt;
   &lt;h:body&gt;
     &lt;p&gt;&lt;h:outputText value=&quot;#{helloWorldBean.greeting} /&gt;&lt;/p&gt;
@@ -132,14 +75,14 @@ table.ScrollbarTable td.ScrollbarNextIco
 &lt;/html&gt;
 ]]></script>
 </div></div></div><div class="columnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Tapestry template (HelloWorld.tml)</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;html&gt;
+<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[&lt;html&gt;
   &lt;body&gt;
     &lt;p&gt;${greeting}&lt;/p&gt;
   &lt;/body&gt;
 &lt;/html&gt;
 ]]></script>
 </div></div></div></div></div></div><p>Though these are very similar, notice some differences:</p><ul><li>The #{...} syntax in JSF does not encode the underlying string, so you have to use the &lt;h:outputText&gt; tag if your data may contain HTML reserved characters such as &lt;, &gt;, or &amp;. In contrast, the ${...} syntax in Tapestry <strong>does</strong> encode the underlying string.</li><li>In JSF, backing beans are not necessarily related one-to-one with page templates. Often several templates use the same backing bean, and one template may reference multiple backing beans. In Tapestry, they are always related one-to-one, and therefore you don't have to specify which component class your ${...} expressions are referencing.</li></ul><div class="sectionColumnWrapper"><div class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>J
 SF Backing Bean (HelloWorldBean.java)</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@ManagedBean
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[@ManagedBean
 @RequestScoped
 public class HelloWorldBean {
     public String getGreeting() {
@@ -148,14 +91,14 @@ public class HelloWorldBean {
 }
 ]]></script>
 </div></div></div><div class="columnMacro"><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Tapestry page class (HelloWorld.java)</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[public class HelloWorld {
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[public class HelloWorld {
     public String getGreeting() {
         return &quot;Hello, World!&quot;;
     }
 }
 ]]></script>
 </div></div></div></div></div></div><h2 id="TapestryforJSFUsers-Expressionsintemplates">Expressions in templates</h2><p>JSF uses the Unified Expression Language with the #{...} or ${...} syntax for accessing Backing Bean properties. For its part, Tapestry uses the ${...} syntax with a similar but more limited expression language called <a shape="rect" href="property-expressions.html">Property Expressions</a>. Both allow easy access to properties via the usual JavaBean conventions, but with Tapestry you don't have to specify which class the expression starts at (because it always starts at the component class corresponding to the template). Some comparisons:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td><th colspan="1" rowspan="1" class="confluenceTh"><p>JSF Syntax</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry Syntax</p></th></tr><tr><td colspan="1" rowspan="1" class="conf
 luenceTd"><p>Property (calls getEmployeeName() or setEmployeeName())</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>#{employeeBean.employeeName}</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${employeeName}</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Boolean property (calls isHourly() or setHourly())</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>#{employeeBean.hourly}</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${hourly}</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Property chain</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>#{employeeBean.address.street}</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${address.street}</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Null-safe property chain</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>#{employeeBean.address.street}</p></td><td colspan="1" rowspan="1" class="confluenc
 eTd"><p>${address?.street}</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>5th element in a List</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>#{employeeBean.employees[5].name}</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${employees.get(5).name}</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Negation</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>#{! employeeBean.hourly}</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${! hourly}</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Arithmetic &amp; relational operators</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>+-*/% div mod</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not available</em></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Relational operators</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>== != ne &lt; lt &gt; gt &lt;= le &gt;= ge</p></td>
 <td colspan="1" rowspan="1" class="confluenceTd"><p><em>not available</em></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Ternary operator</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>#{myBean.foo &lt; 0 ? 'bar' : 'baz'}</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not available</em></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Method calling</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>#{myBean.employees.size()}</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${employees.size()}</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Iterated Range</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not avaialble</em></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${1..10}</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Iterated Range (calculated)</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not avai
 alble</em></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${1..groupList.size()}</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>List</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not available</em></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${ [ user.name, user.email, user.phone ] }</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Map</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><em>not available</em></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>${ { 'id':'4039','type':'hourly' } }</p></td></tr></tbody></table></div><p>Features shown as <em>not available</em> above are absent by design, because (in both Tapestry and JSF) it is considered best to keep complex logic in the component class rather than in the template.</p><h2 id="TapestryforJSFUsers-EventHandling&amp;PageNavigation">Event Handling &amp; Page Navigation</h2><h3 id="TapestryforJSFUsers-Eventhandling">Eve
 nt handling</h3><p>In JSF, you specify the event via the <code>action</code> parameter (for example, &lt;h:commandButton value="Submit" action="employeeBean.saveChanges"&gt;). For Tapestry, event handler methods are found by method naming conventions (onSomeEvent() or by method annotations (@Event), based on a combination of the "t:id" attribute and event name, and the action name used depends on the component. For example, the "&lt;t:actionlink&gt;" component in Tapestry emits an "action" event when clicked, and you handle that event in your "onAction()" method.</p><h2 id="TapestryforJSFUsers-Validation">Validation</h2><p>Tapestry applications can use JSR 303 Bean Validation annotations that JSF users should be familiar with:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[public class Employee {
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[public class Employee {
     @Validate(&quot;required,minlength=2,maxlength=100&quot;)
     private String lastName;
     @NotNull @Email private String email;