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/11/08 18:21:56 UTC

svn commit: r971770 [5/5] - in /websites/production/tapestry/content: ./ cache/

Modified: websites/production/tapestry/content/switching-cases.html
==============================================================================
--- websites/production/tapestry/content/switching-cases.html (original)
+++ websites/production/tapestry/content/switching-cases.html Sun Nov  8 17:21:51 2015
@@ -67,7 +67,30 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><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">
+<div id="ConfluenceContent">    
+<div class="atb-scrollbar-macro">
+    <div class="prev">
+        <a shape="rect" href="component-libraries.html" rel="prev">
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-left">Previous</span>
+                                <span class="title">Component Libraries</span>
+            </a>
+
+    </div>
+    <div class="parent">
+                    <a shape="rect" href="cookbook.html" rel="parent">
+                                            <span class="aui-icon aui-icon-small atb-icon-arrow-up">Up</span>
+                                        <span class="title">Cookbook</span>
+                </a>
+
+            </div>
+    <div class="next">
+        <a shape="rect" href="enum-parameter-recipe.html" rel="next">
+                <span class="title">Enum Parameter Recipe</span>
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-right">Next</span>
+                            </a>
+
+    </div>
+</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">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"&gt;

Modified: websites/production/tapestry/content/tapestry-inversion-of-control-faq.html
==============================================================================
--- websites/production/tapestry/content/tapestry-inversion-of-control-faq.html (original)
+++ websites/production/tapestry/content/tapestry-inversion-of-control-faq.html Sun Nov  8 17:21:51 2015
@@ -67,7 +67,30 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><h2 id="TapestryInversionofControlFAQ-TapestryInversionofControlContainer">Tapestry Inversion of Control Container</h2><p>Main article: <a shape="rect" href="ioc.html">Tapestry IoC</a></p><p>&#160;</p><div class="aui-label" style="float:right" title="Related Articles">
+<div id="ConfluenceContent"><p>    
+</p><div class="atb-scrollbar-macro">
+    <div class="prev">
+        <a shape="rect" href="injection-faq.html" rel="prev">
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-left">Previous</span>
+                                <span class="title">Injection FAQ</span>
+            </a>
+
+    </div>
+    <div class="parent">
+                    <a shape="rect" href="frequently-asked-questions.html" rel="parent">
+                                            <span class="aui-icon aui-icon-small atb-icon-arrow-up">Up</span>
+                                        <span class="title">Frequently Asked Questions</span>
+                </a>
+
+            </div>
+    <div class="next">
+        <a shape="rect" href="security-faq.html" rel="next">
+                <span class="title">Security FAQ</span>
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-right">Next</span>
+                            </a>
+
+    </div>
+</div><h2 id="TapestryInversionofControlFAQ-TapestryInversionofControlContainer">Tapestry Inversion of Control Container</h2><p>Main article: <a shape="rect" href="ioc.html">Tapestry IoC</a></p><p>&#160;</p><div class="aui-label" style="float:right" title="Related Articles">
 
 
 
@@ -144,7 +167,30 @@
   }
 }
 </pre>
-</div></div><p>After Tapestry invokes the constructor of the service implementation, and after it performs any field injections, it invokes post injection methods. The methods must be public and return void. Parameters to a post injection method represent further injections ... in the above example, the RegistryShutdownHub is injected into the PostInjection method, since it is only used inside that one method.</p><div class="confluence-information-macro confluence-information-macro-warning"><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>It is <strong>not</strong> recommended that MyServiceImpl take RegistryShutdownHub as a constructor parameter and register itself as a listener inside the constructor. Doing so is an example of <a shape="rect" class="external-link" href="http://www.ibm.com/developerworks/java/library/j-jtp0618.html" >unsafe publishing</a>, a remote but potential threa
 d safety issue.</p></div></div><p>This same technique will work for any kind of resource that must be cleaned up or destroyed when the registry shuts down.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Be careful not to invoke methods on any service proxy objects as they will also be shutting down with the Registry. A RegistryShutdownListener should not be reliant on anything outside of itself.</p></div></div><h3 id="TapestryInversionofControlFAQ-HowdoImakemyservicestartupwiththerestoftheapplication,ratherthanlazily?">How do I make my service startup with the rest of the application, rather than lazily?</h3><p>Tapestry services are designed to be <em>lazy</em>; they are only fully realized when needed: when the first method on the service interface is invoked.</p><p>Sometimes a service does extra work t
 hat is desirable at application startup: examples may be registering message handlers with a JMS implementation, or setting up indexing. Since the service's constructor (or <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/PostInjection.html">@PostInjection</a> methods) are not invoked until the service is realized.</p><p>The solution is the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/EagerLoad.html">@EagerLoad</a> annotation; service implementation classes marked with this annotation are loaded when the Registry is first startup, rather than lazily.</p></div>
+</div></div><p>After Tapestry invokes the constructor of the service implementation, and after it performs any field injections, it invokes post injection methods. The methods must be public and return void. Parameters to a post injection method represent further injections ... in the above example, the RegistryShutdownHub is injected into the PostInjection method, since it is only used inside that one method.</p><div class="confluence-information-macro confluence-information-macro-warning"><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>It is <strong>not</strong> recommended that MyServiceImpl take RegistryShutdownHub as a constructor parameter and register itself as a listener inside the constructor. Doing so is an example of <a shape="rect" class="external-link" href="http://www.ibm.com/developerworks/java/library/j-jtp0618.html" >unsafe publishing</a>, a remote but potential threa
 d safety issue.</p></div></div><p>This same technique will work for any kind of resource that must be cleaned up or destroyed when the registry shuts down.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Be careful not to invoke methods on any service proxy objects as they will also be shutting down with the Registry. A RegistryShutdownListener should not be reliant on anything outside of itself.</p></div></div><h3 id="TapestryInversionofControlFAQ-HowdoImakemyservicestartupwiththerestoftheapplication,ratherthanlazily?">How do I make my service startup with the rest of the application, rather than lazily?</h3><p>Tapestry services are designed to be <em>lazy</em>; they are only fully realized when needed: when the first method on the service interface is invoked.</p><p>Sometimes a service does extra work t
 hat is desirable at application startup: examples may be registering message handlers with a JMS implementation, or setting up indexing. Since the service's constructor (or <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/PostInjection.html">@PostInjection</a> methods) are not invoked until the service is realized.</p><p>The solution is the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/EagerLoad.html">@EagerLoad</a> annotation; service implementation classes marked with this annotation are loaded when the Registry is first startup, rather than lazily.    
+</p><div class="atb-scrollbar-macro">
+    <div class="prev">
+        <a shape="rect" href="injection-faq.html" rel="prev">
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-left">Previous</span>
+                                <span class="title">Injection FAQ</span>
+            </a>
+
+    </div>
+    <div class="parent">
+                    <a shape="rect" href="frequently-asked-questions.html" rel="parent">
+                                            <span class="aui-icon aui-icon-small atb-icon-arrow-up">Up</span>
+                                        <span class="title">Frequently Asked Questions</span>
+                </a>
+
+            </div>
+    <div class="next">
+        <a shape="rect" href="security-faq.html" rel="next">
+                <span class="title">Security FAQ</span>
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-right">Next</span>
+                            </a>
+
+    </div>
+</div></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/templating-and-markup-faq.html
==============================================================================
--- websites/production/tapestry/content/templating-and-markup-faq.html (original)
+++ websites/production/tapestry/content/templating-and-markup-faq.html Sun Nov  8 17:21:51 2015
@@ -67,7 +67,30 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><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">
+<div id="ConfluenceContent">    
+<div class="atb-scrollbar-macro">
+    <div class="prev">
+        <a shape="rect" href="general-questions.html" rel="prev">
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-left">Previous</span>
+                                <span class="title">General Questions</span>
+            </a>
+
+    </div>
+    <div class="parent">
+                    <a shape="rect" href="frequently-asked-questions.html" rel="parent">
+                                            <span class="aui-icon aui-icon-small atb-icon-arrow-up">Up</span>
+                                        <span class="title">Frequently Asked Questions</span>
+                </a>
+
+            </div>
+    <div class="next">
+        <a shape="rect" href="page-and-component-classes-faq.html" rel="next">
+                <span class="title">Page And Component Classes FAQ</span>
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-right">Next</span>
+                            </a>
+
+    </div>
+</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">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
 </pre>
@@ -111,7 +134,30 @@
     return isUrgent() ? "urgent" : null;
   }
 </pre>
-</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><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><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></t
 r></thead><tbody></tbody></table></p><p></p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p></div>
+</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>    
+<div class="atb-scrollbar-macro">
+    <div class="prev">
+        <a shape="rect" href="general-questions.html" rel="prev">
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-left">Previous</span>
+                                <span class="title">General Questions</span>
+            </a>
+
+    </div>
+    <div class="parent">
+                    <a shape="rect" href="frequently-asked-questions.html" rel="parent">
+                                            <span class="aui-icon aui-icon-small atb-icon-arrow-up">Up</span>
+                                        <span class="title">Frequently Asked Questions</span>
+                </a>
+
+            </div>
+    <div class="next">
+        <a shape="rect" href="page-and-component-classes-faq.html" rel="next">
+                <span class="title">Page And Component Classes FAQ</span>
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-right">Next</span>
+                            </a>
+
+    </div>
+</div><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><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></tbody></table></p><p></p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/test-page-2.html
==============================================================================
--- websites/production/tapestry/content/test-page-2.html (original)
+++ websites/production/tapestry/content/test-page-2.html Sun Nov  8 17:21:51 2015
@@ -69,11 +69,11 @@
 <div id="content">
 <div id="ConfluenceContent"><p>
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1437340833548 {padding: 0px;}
-div.rbtoc1437340833548 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1437340833548 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1447003244665 {padding: 0px;}
+div.rbtoc1447003244665 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1447003244665 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1437340833548">
+/*]]>*/</style></p><div class="toc-macro rbtoc1447003244665">
 <ul class="toc-indentation"><li><a shape="rect" href="#TestPage2-Generalquestions">General questions</a>
 <ul class="toc-indentation"><li><a shape="rect" href="#TestPage2-HowdoIgetstartedwithTapestry?">How do I get started with Tapestry?</a></li><li><a shape="rect" href="#TestPage2-WhydoesTapestryusePrototype?WhynotinsertfavoriteJavaScriptlibraryhere?">Why does Tapestry use Prototype? Why not insert favorite JavaScript library here?</a></li><li><a shape="rect" href="#TestPage2-WhydoesTapestryhaveitsownInversionofControlContainer?WhynotSpringorGuice?">Why does Tapestry have its own Inversion of Control Container? Why not Spring or Guice?</a></li><li><a shape="rect" href="#TestPage2-HowdoIupgradefromTapestry4toTapestry5?">How do I upgrade from Tapestry 4 to Tapestry 5?</a></li><li><a shape="rect" href="#TestPage2-WhyaretherebothRequestandHttpServletRequest?">Why are there both Request and HttpServletRequest?</a></li></ul>
 </li></ul>

Modified: websites/production/tapestry/content/using-select-with-a-list.html
==============================================================================
--- websites/production/tapestry/content/using-select-with-a-list.html (original)
+++ websites/production/tapestry/content/using-select-with-a-list.html Sun Nov  8 17:21:51 2015
@@ -67,7 +67,30 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><h1 id="UsingSelectWithaList-UsingSelectWithaList">Using Select With a List</h1><p>The documentation for the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Select.html">Select Component</a> and the <a shape="rect" href="tutorial.html">Tapestry Tutorial</a> provide simplistic examples of populating a drop-down menu (as the (X)HTML <em>Select</em> element) using comma-delimited strings and enums. However, most real-world Tapestry applications need to populate such menus using values from a database, commonly in the form of java.util.List objects. Doing so generally requires a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/SelectModel.html">SelectModel</a> and a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ValueEncoder.html">ValueEncoder</a> bound to the Sel
 ect component with its "model" and "encoder" parameters:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div id="ConfluenceContent">    
+<div class="atb-scrollbar-macro">
+    <div class="prev">
+        <a shape="rect" href="meta-programming-page-content.html" rel="prev">
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-left">Previous</span>
+                                <span class="title">Meta-Programming Page Content</span>
+            </a>
+
+    </div>
+    <div class="parent">
+                    <a shape="rect" href="cookbook.html" rel="parent">
+                                            <span class="aui-icon aui-icon-small atb-icon-arrow-up">Up</span>
+                                        <span class="title">Cookbook</span>
+                </a>
+
+            </div>
+    <div class="next">
+        <a shape="rect" href="ioc-cookbook.html" rel="next">
+                <span class="title">IoC cookbook</span>
+                                    <span class="aui-icon aui-icon-small atb-icon-arrow-right">Next</span>
+                            </a>
+
+    </div>
+</div><h1 id="UsingSelectWithaList-UsingSelectWithaList">Using Select With a List</h1><p>The documentation for the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Select.html">Select Component</a> and the <a shape="rect" href="tutorial.html">Tapestry Tutorial</a> provide simplistic examples of populating a drop-down menu (as the (X)HTML <em>Select</em> element) using comma-delimited strings and enums. However, most real-world Tapestry applications need to populate such menus using values from a database, commonly in the form of java.util.List objects. Doing so generally requires a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/SelectModel.html">SelectModel</a> and a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ValueEncoder.html">ValueEncoder</a> bound to the Select component with its
  "model" and "encoder" parameters:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">&lt;t:select t:id="colorMenu" value="selectedColor" model="ColorSelectModel" encoder="colorEncoder" /&gt;
 </pre>
 </div></div><p>In the above example, ColorSelectModel must be of type SelectModel, or anything that Tapestry knows how to <a shape="rect" href="parameter-type-coercion.html">coerce</a> into a SelectModel, such as a List or a Map or a "value=label,value=label,..." delimited string, or anything Tapestry knows how to coerce into a List or Map, such as an Array or a comma-delimited String.</p><h2 id="UsingSelectWithaList-SelectModel">SelectModel</h2><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">