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 2014/01/18 20:20:52 UTC

svn commit: r894649 [2/2] - in /websites/production/tapestry/content: ajax-components-faq.html cache/main.pageCache extending-the-if-component.html link-components-faq.html meta-programming-page-content.html templating-and-markup-faq.html

Modified: websites/production/tapestry/content/templating-and-markup-faq.html
==============================================================================
--- websites/production/tapestry/content/templating-and-markup-faq.html (original)
+++ websites/production/tapestry/content/templating-and-markup-faq.html Sat Jan 18 19:20:52 2014
@@ -29,6 +29,8 @@
   <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 src='http://cxf.apache.org/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -77,40 +79,14 @@ 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="general-questions.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="general-questions.html">General Questions</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="page-and-component-classes-faq.html">Page And Component Classes FAQ</a></td><td colspan="1" rowspan="1" class="Scrol
 lbarNextIcon"><a shape="rect" href="page-and-component-classes-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 id="TemplatingandMarkupFAQ-TemplatingandMarkup">Templating and Markup</h2>
-
-<p>Main Article: <a shape="rect" href="component-templates.html">Component Templates</a></p>
-
-<h3 id="TemplatingandMarkupFAQ-WhydoIgetaSAXParseExceptionwhenIuseanHTMLentity,suchas&amp;nbsp;inmytemplate?">Why do I get a SAXParseException when I use an HTML entity, such as <code>&amp;nbsp;</code> in my template?</h3>
-
-<p>Tapestry uses a standard SAX parser to read your templates. This means that your templates must be <em>well formed</em>: open and close tags must balance, attribute values must be quoted, and entities must be declared. The easiest way to accomplish this is to add a DOCTYPE to your the top of your template:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="general-questions.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="general-questions.html">General Questions</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="page-and-component-classes-faq.html">Page And Component Classes FAQ</a></td><td colspan="1" rowspan="1" class="Scrol
 lbarNextIcon"><a shape="rect" href="page-and-component-classes-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 id="TemplatingandMarkupFAQ-TemplatingandMarkup">Templating and Markup</h2><p>Main Article: <a shape="rect" href="component-templates.html">Component Templates</a></p><h3 id="TemplatingandMarkupFAQ-WhydoIgetaSAXParseExceptionwhenIuseanHTMLentity,suchas&amp;nbsp;inmytemplate?">Why do I get a SAXParseException when I use an HTML entity, such as <code>&amp;nbsp;</code> in my template?</h3><p>Tapestry uses a standard SAX parser to read your templates. This means that your templates must be <em>well formed</em>: open and close tags must balance, attribute values must be quoted, and entities must be declared. The easiest way to accomplish this is to add a DOCTYPE to your the top of your template:</p><div class="code panel pdl" style="border-width: 1px;"><div class="c
 odeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
 ]]></script>
-</div></div>
-
-<p>Part of the DOCTYPE is the declaration of entities such as <code>&amp;nbsp;</code>.</p>
-
-<p>Alternately, you can simply use the numeric version: <code>&amp;#160</code>;  This is the exact same character and will render identically in the browser.</p>
-
-<p>Starting in release 5.3, Tapestry introduces an XHTML doctype when no doctype is present; this means that common HTML entities will work correctly.</p>
-
-<h3 id="TemplatingandMarkupFAQ-Whydosomeimagesinmypageshowupasbrokenlinks?">Why do some images in my page show up as broken links?</h3>
-
-<p>You have to be careful when using relative URLs inside page templates; the base URL may not always be what you expect.  For example, inside your <code>ViewUser.tml</code> file, you may have:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-  &lt;img class=&quot;icon&quot; src=&quot;icons/admin.png&quot;/&gt;${user.name} has Administrative access
+</div></div><p>Part of the DOCTYPE is the declaration of entities such as <code>&amp;nbsp;</code>.</p><p>Alternately, you can simply use the numeric version: <code>&amp;#160</code>; This is the exact same character and will render identically in the browser.</p><p>Starting in release 5.3, Tapestry introduces an XHTML doctype when no doctype is present; this means that common HTML entities will work correctly.</p><h3 id="TemplatingandMarkupFAQ-Whydosomeimagesinmypageshowupasbrokenlinks?">Why do some images in my page show up as broken links?</h3><p>You have to be careful when using relative URLs inside page templates; the base URL may not always be what you expect. For example, inside your <code>ViewUser.tml</code> file, you may have:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[  &lt;img class=&quot;icon&quot; src=&quot;icons/admin.png&quot;/&gt;${user.name} has Administrative access
 ]]></script>
-</div></div>
-
-<p>This makes sense; <code>ViewUser.tml</code> is in the web context, as is the <code>icons</code> folder.  The default URL for this page will be <code>/viewuser</code></p><p>&lt;style type='text/css'&gt;
+</div></div><p>This makes sense; <code>ViewUser.tml</code> is in the web context, as is the <code>icons</code> folder. The default URL for this page will be <code>/viewuser</code></p>&lt;style type='text/css'&gt;
 .FootnoteMarker, .FootnoteNum a {
   background: transparent url(/confluence/download/resources/com.adaptavist.confluence.footnoteMacros:footnote/gfx/footnote.png) no-repeat top right;
   padding: 1px 2px 0px 1px;
@@ -182,13 +158,8 @@ var footnoteMarkerHighlight = function(i
             1
     </a>
 </sup>
-</p><p></p>
-
-<p>However, most likely, the ViewUser page has a page activation context to identify which user is to be displayed:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-public class ViewUser
+<p>&#160;</p><p>However, most likely, the ViewUser page has a page activation context to identify which user is to be displayed:</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 ViewUser
 
   @Property
   @PageActivationContext
@@ -196,126 +167,47 @@ public class ViewUser
 
   . . .
 ]]></script>
-</div></div>
-
-<p>With a page activation context, the URL for the page will incorporate the id of the User object, something like <code>/viewuser/37371</code>.  This is why the relative URLs to the <code>admin.png</code> image is broken: the base path is relative to the page's URL, not to the page template</p><p>
+</div></div><p>With a page activation context, the URL for the page will incorporate the id of the User object, something like <code>/viewuser/37371</code>. This is why the relative URLs to the <code>admin.png</code> image is broken: the base path is relative to the page's URL, not to the page template</p>
 <sup id="FootnoteMarker2">
     <a shape="rect" class="FootnoteMarker" name="FootnoteMarker2" href="#Footnote2" onclick="footnoteHighlight(&quot;2&quot;,true);" alt="Footnote: Click here to display the footnote" title="Footnote: Click here to display the footnote">
             2
     </a>
 </sup>
-</p>.<p></p>
-
-<p>One solution would be to predict what the page URL will be, and adjust the path for that:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-  &lt;img class=&quot;icon&quot; src=&quot;../icons/admin.png&quot;/&gt;${user.name} has Administrative access
+<p>.</p><p>&#160;</p><p>One solution would be to predict what the page URL will be, and adjust the path for that:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[  &lt;img class=&quot;icon&quot; src=&quot;../icons/admin.png&quot;/&gt;${user.name} has Administrative access
 ]]></script>
-</div></div>
-
-<p>But this has its own problems; the page activation context may vary in length at different times, or the template in question may be a component used across many different pages, making it difficult to predict what the correct relative URL would be.</p>
-
-<p>The <em>best</em> solution for this situation, one that will be sure to work in all pages and all components, is to make use of the <code>context:</code> binding prefix:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-  &lt;img class=&quot;icon&quot; src=&quot;${context:icons/admin.png}&quot;/&gt;${user.name} has Administrative access
+</div></div><p>But this has its own problems; the page activation context may vary in length at different times, or the template in question may be a component used across many different pages, making it difficult to predict what the correct relative URL would be.</p><p>The <em>best</em> solution for this situation, one that will be sure to work in all pages and all components, is to make use of the <code>context:</code> binding prefix:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[  &lt;img class=&quot;icon&quot; src=&quot;${context:icons/admin.png}&quot;/&gt;${user.name} has Administrative access
 ]]></script>
-</div></div>
-
-<p>The src attribute of the &lt;img&gt; tag will now be bound to a dynamically computed value: the location of the image file relative to the web application context. This is especially important for components that may be used on different pages.</p>
-
-<h3 id="TemplatingandMarkupFAQ-What'sthedifferencebetweenidandt:id?">What's the difference between <code>id</code> and <code>t:id</code>?</h3>
-
-<p>You might occasionally see something like the following in a template:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-&lt;t:zone id=&quot;status&quot; t:id=&quot;statusZone&quot;&gt;
+</div></div><p>The src attribute of the &lt;img&gt; tag will now be bound to a dynamically computed value: the location of the image file relative to the web application context. This is especially important for components that may be used on different pages.</p><h3 id="TemplatingandMarkupFAQ-What'sthedifferencebetweenidandt:id?">What's the difference between <code>id</code> and <code>t:id</code>?</h3><p>You might occasionally see something like the following in a template:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;t:zone id=&quot;status&quot; t:id=&quot;statusZone&quot;&gt;
 ]]></script>
-</div></div>
-
-<p>Why two ids?  Why are they different?</p>
-
-<p>The <code>t:id</code> attribute is the Tapestry component id. This id is unique within its immediate container.  This is the id you might use to inject the component into your page class:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-  @InjectComponent
+</div></div><p>Why two ids? Why are they different?</p><p>The <code>t:id</code> attribute is the Tapestry component id. This id is unique within its immediate container. This is the id you might use to inject the component into your page class:</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[  @InjectComponent
   private Zone statusZone;
 ]]></script>
-</div></div>
-
-<p>The other id is the client id, a unique id for the rendered element within the client-side DOM. JavaScript that needs to access the element uses this id.  For example:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-  $(&#39;status&#39;).hide();
+</div></div><p>The other id is the client id, a unique id for the rendered element within the client-side DOM. JavaScript that needs to access the element uses this id. For example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: text; gutter: false" type="syntaxhighlighter"><![CDATA[  $(&#39;status&#39;).hide();
 ]]></script>
-</div></div>
-
-<p>In many components, the <code>id</code> attribute is an informal parameter; a value from the template that is blindly echoed into the output document.  In other cases, the component itself has an <code>id</code> attribute.  Often, in the latter case, the Tapestry component id is the <em>default</em> value for the client id.</p>
-
-
-<h3 id="TemplatingandMarkupFAQ-WhydomyimagesandstylesheetsendupwithaweirdURLslike/assets/eea17aee26bc0cae/ctx/layout/layout.css?">Why do my images and stylesheets end up with a weird URLs like <code>/assets/eea17aee26bc0cae/ctx/layout/layout.css</code>?</h3>
-
-<p>Tapestry doesn't rely on the servlet container to serve up your static assets (images, stylesheets, flash movies, etc.).  Instead, Tapestry processes the requests itself, streaming assets to the browser.</p>
-
-<p>Asset content will be GZIP compressed (if the client supports compression, and the content is compressible). In addition, Tapestry will set a far-future expires header on the content. This means that the browser will not ask for the file again, greatly reducing network traffic.</p>
-
-<p>The weird hex string is a random application version number.  A new one is chosen every time the application starts up.</p>
-
-<p>This is necessary so that, if an asset changes in place, browsers will download the new version.  Because the application version number has changed, it represents a new asset to browsers, who will download the new version, even if the old version was previously downloaded (remember the far future expires header).</p>
-
-<p>By the time your application is ready for production, you should manage the application version number directly:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>AppModule.java (partial)</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-	public static void contributeApplicationDefaults(
+</div></div><p>In many components, the <code>id</code> attribute is an informal parameter; a value from the template that is blindly echoed into the output document. In other cases, the component itself has an <code>id</code> attribute. Often, in the latter case, the Tapestry component id is the <em>default</em> value for the client id.</p><h3 id="TemplatingandMarkupFAQ-WhydomyimagesandstylesheetsendupwithaweirdURLslike/assets/eea17aee26bc0cae/ctx/layout/layout.css?">Why do my images and stylesheets end up with a weird URLs like <code>/assets/eea17aee26bc0cae/ctx/layout/layout.css</code>?</h3><p>Tapestry doesn't rely on the servlet container to serve up your static assets (images, stylesheets, flash movies, etc.). Instead, Tapestry processes the requests itself, streaming assets to the browser.</p><p>Asset content will be GZIP compressed (if the client supports compression, and the content is compressible). In addition, Tapestry will set a far-future expires header on the content. T
 his means that the browser will not ask for the file again, greatly reducing network traffic.</p><p>The weird hex string is a random application version number. A new one is chosen every time the application starts up.</p><p>This is necessary so that, if an asset changes in place, browsers will download the new version. Because the application version number has changed, it represents a new asset to browsers, who will download the new version, even if the old version was previously downloaded (remember the far future expires header).</p><p>By the time your application is ready for production, you should manage the application version number directly:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>AppModule.java (partial)</b></div><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[	public static void contributeApplicationDefaults(
 			MappedConfiguration&lt;String, String&gt; configuration) {
 		configuration.add(SymbolConstants.APPLICATION_VERSION, &quot;1.7.5&quot;);
 	}
 ]]></script>
-</div></div>
-
-<p>You should be careful to change the application version number for each new deployment of your application; otherwise returning users may be stuck with old versions of assets that have changed in the interim.  This kind of mismatch can cause visual annoyances for style sheets or image files, but can break client-side behavior for changed JavaScript libraries.</p>
-
-<h3 id="TemplatingandMarkupFAQ-HowdoIaddaCSSclasstoaTapestrycomponent?">How do I add a CSS class to a Tapestry component?</h3>
-
-<p>As they say, "just do it".  The majority of Tapestry components support <em>informal parameters</em>, meaning that any extra attributes in the element (in the template) will be rendered out as additional attributes.  So, you can apply a CSS class or style quite easily:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-  &lt;t:textfield t:id=&quot;username&quot; class=&quot;big-green&quot;/&gt;
+</div></div><p>You should be careful to change the application version number for each new deployment of your application; otherwise returning users may be stuck with old versions of assets that have changed in the interim. This kind of mismatch can cause visual annoyances for style sheets or image files, but can break client-side behavior for changed JavaScript libraries.</p><h3 id="TemplatingandMarkupFAQ-HowdoIaddaCSSclasstoaTapestrycomponent?">How do I add a CSS class to a Tapestry component?</h3><p>As they say, "just do it". The majority of Tapestry components support <em>informal parameters</em>, meaning that any extra attributes in the element (in the template) will be rendered out as additional attributes. So, you can apply a CSS class or style quite easily:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[  &lt;t:textfield t:id=&quot;username&quot; class=&quot;big-green&quot;/&gt;
 ]]></script>
-</div></div>
-
-<p>You can even use template expansions inside the attribute value:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-  &lt;t:textfield t:id=&quot;username&quot; class=&quot;${usernameClass}&quot;/&gt;
+</div></div><p>You can even use template expansions inside the attribute value:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[  &lt;t:textfield t:id=&quot;username&quot; class=&quot;${usernameClass}&quot;/&gt;
 ]]></script>
-</div></div>
-
-<p>and</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: true" type="syntaxhighlighter"><![CDATA[
-  public String getUsernameClass() 
+</div></div><p>and</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 String getUsernameClass() 
   {
     return isUrgent() ? &quot;urgent&quot; : null;
   }
 ]]></script>
-</div></div>
-
-<p>When an informal parameter is bound to null, then the attribute is not written out at all.</p>
-
-<p>You can verify which components support informal parameters by checking the component reference, or looking for the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/SupportsInformalParameters.html">SupportsInformalParameters</a> annotation in the components' source file.</p>
-
-
-<style type="text/css">/*<![CDATA[*/
+</div></div><p>When an informal parameter is bound to null, then the attribute is not written out at all.</p><p>You can verify which components support informal parameters by checking the component reference, or looking for the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/SupportsInformalParameters.html">SupportsInformalParameters</a> annotation in the components' source file.</p><style type="text/css">/*<![CDATA[*/
 table.ScrollbarTable  {border: none;padding: 3px;width: 100%;padding: 3px;margin: 0px;background-color: #f0f0f0}
 table.ScrollbarTable td.ScrollbarPrevIcon {text-align: center;width: 16px;border: none;}
 table.ScrollbarTable td.ScrollbarPrevName {text-align: left;border: none;}
@@ -323,10 +215,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="general-questions.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="general-questions.html">General Questions</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="page-and-component-classes-faq.html">Page And Component Classes FAQ</a></td><td colspan="1" rowspan="1" class="Scrol
 lbarNextIcon"><a shape="rect" href="page-and-component-classes-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></p><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">
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="general-questions.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="general-questions.html">General Questions</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="page-and-component-classes-faq.html">Page And Component Classes FAQ</a></td><td colspan="1" rowspan="1" class="Scrol
 lbarNextIcon"><a shape="rect" href="page-and-component-classes-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><p>&#160;</p><p>&#160;</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">
         <a shape="rect" id="FootnoteNum1" href="#FootnoteMarker1" onclick="footnoteMarkerHighlight(&quot;1&quot;);" onmouseover="footnoteHighlight(&quot;1&quot;,false);" alt="Footnote: Click to return to reference in text" title="Footnote: Click to return to reference in text">
             1
         </a>
@@ -338,7 +227,7 @@ table.ScrollbarTable td.ScrollbarNextIco
         </a>
       </td><td colspan="1" rowspan="1" valign="top" class="Footnote" id="Footnote2" width="100%" headings="footnote-th2">
           In fact, the page template may not even be in the web context, it may be stored on the classpath, as component templates are.
-      </td></tr></tbody></table></p><p></p></div>
+      </td></tr></tbody></table></div>
 </div>
 
 <div class="clearer"></div>