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/11/23 03:19:30 UTC

svn commit: r930167 - in /websites/production/tapestry/content: ./ cache/ exploring-the-project.data/ implementing-the-hi-lo-guessing-game.data/

Author: buildbot
Date: Sun Nov 23 02:19:29 2014
New Revision: 930167

Log:
Production update by buildbot for tapestry

Modified:
    websites/production/tapestry/content/cache/main.pageCache
    websites/production/tapestry/content/exploring-the-project.data/app-error-1.png
    websites/production/tapestry/content/exploring-the-project.data/app-error-2.png
    websites/production/tapestry/content/exploring-the-project.data/app-live-reload.png
    websites/production/tapestry/content/exploring-the-project.html
    websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.data/hilo-1.png
    websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html

Modified: websites/production/tapestry/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/exploring-the-project.data/app-error-1.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/exploring-the-project.data/app-error-2.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/exploring-the-project.data/app-live-reload.png
==============================================================================
Binary files - no diff available.

Modified: websites/production/tapestry/content/exploring-the-project.html
==============================================================================
--- websites/production/tapestry/content/exploring-the-project.html (original)
+++ websites/production/tapestry/content/exploring-the-project.html Sun Nov 23 02:19:29 2014
@@ -238,7 +238,7 @@ public class Index
 <p>The value inside the curly braces is a <em>property expression</em>. Tapestry uses its own property expression language that is expressive, fast, and type-safe.</p>    <div class="aui-message warning shadowed information-macro">
                             <span class="aui-icon icon-warning">Icon</span>
                 <div class="message-content">
-                            <pre>Tapestry does _not_ use reflection to implement property expressions.</pre>
+                            <pre>Tapestry does NOT use reflection to implement property expressions.</pre>
                     </div>
     </div>
 <p>More advanced property expressions can traverse multiple properties (for example, <code>user.address.city</code>), or even invoke public methods. Here the expansion simply reads the <code>currentTime</code> property of the page.</p><p>Tapestry follows the rules defined by Sun's JavaBeans specification: a property name of <code>currentTime</code> maps to two methods: <code>getCurrentTime()</code> and <code>setCurrentTime()</code>. If you omit one or the other of these methods, the property is either read only (as here), or write only. (Keep in mind that as far as JavaBeans properties go, it's the <em>methods</em> that count; the names of the instance variables, or even whether they exist, is immaterial.)</p><p>Tapestry does go one step further: it ignores case when matching properties inside the expansion to properties of the page. In the template we could say ${currenttime} or ${CurrentTime} or any variation, and Tapestry will <em>still</em> invoke the <code>getCurrentTime()</cod
 e> method.</p><p>Note that in Tapestry it is not necessary to configure what object holds the <code>currentTime</code> property; a template and a page are always used in combination with each other; expressions are always rooted in the page instance, in this case, an instance of the Index class.</p><p>The Index.tml template includes a second expansion:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
@@ -264,13 +264,13 @@ public class Index
 
 
 
-<span class="gliffy-container" id="gliffy-container-24346949-1602" data-fullwidth="913" data-ceoid="24188263" data-edit="${diagramEditLink.getLinkUrl()}" data-full="/confluence/plugins/gliffy/viewer.action?inline=false&amp;attachmentId=24346949&amp;attachmentVersion=2&amp;lastPage=%2Fpages%2Fviewpage.action%3FpageId%3D24188263" data-filename="Templates and Parameters">
+<span class="gliffy-container" id="gliffy-container-24346949-4846" data-fullwidth="913" data-ceoid="24188263" data-edit="${diagramEditLink.getLinkUrl()}" data-full="/confluence/plugins/gliffy/viewer.action?inline=false&amp;attachmentId=24346949&amp;attachmentVersion=2&amp;lastPage=%2Fpages%2Fviewpage.action%3FpageId%3D24188263" data-filename="Templates and Parameters">
 
-    <map id="gliffy-map-24346949-8372" name="gliffy-map-24346949-8372"></map>
+    <map id="gliffy-map-24346949-2363" name="gliffy-map-24346949-2363"></map>
 
-    <img class="gliffy-image gliffy-image-border" id="gliffy-image-24346949-1602" width="304" height="300" data-full-width="913" data-full-height="901" src="https://cwiki.apache.org/confluence/download/attachments/24188263/Templates%20and%20Parameters.png?version=2&amp;modificationDate=1371888025000&amp;api=v2" alt="Templates and Parameters" usemap="#gliffy-map-24346949-8372">
+    <img class="gliffy-image gliffy-image-border" id="gliffy-image-24346949-4846" width="304" height="300" data-full-width="913" data-full-height="901" src="https://cwiki.apache.org/confluence/download/attachments/24188263/Templates%20and%20Parameters.png?version=2&amp;modificationDate=1371888025000&amp;api=v2" alt="Templates and Parameters" usemap="#gliffy-map-24346949-2363">
 
-    <map class="gliffy-dynamic" id="gliffy-dynamic-map-24346949-1602" name="gliffy-dynamic-map-24346949-1602"></map>
+    <map class="gliffy-dynamic" id="gliffy-dynamic-map-24346949-4846" name="gliffy-dynamic-map-24346949-4846"></map>
 </span>
 
 
@@ -283,7 +283,7 @@ public class Index
     return &quot;A great day to learn Tapestry&quot;;
   }
 ]]></script>
-</div></div><p>Make sure you save changes; then click the refresh link in the web browser:</p><p><img class="confluence-embedded-image" width="700" src="https://cwiki.apache.org/confluence/download/attachments/24188263/app-live-reload.png?version=2&amp;modificationDate=1321974913000&amp;api=v2" data-image-src="/confluence/download/attachments/24188263/app-live-reload.png?version=2&amp;modificationDate=1321974913000&amp;api=v2"></p><div class="navmenu" style="float:right; width:30%; background:white; margin:3px; padding:3px">
+</div></div><p>Make sure you save changes; then click the refresh link in the web browser:</p><p><img class="confluence-embedded-image" width="700" src="https://cwiki.apache.org/confluence/download/attachments/24188263/app-live-reload.png?version=5&amp;modificationDate=1416707986159&amp;api=v2" data-image-src="/confluence/download/attachments/24188263/app-live-reload.png?version=5&amp;modificationDate=1416707986159&amp;api=v2"></p><div class="navmenu" style="float:right; width:30%; background:white; margin:3px; padding:3px">
     <div class="aui-message warning shadowed information-macro">
                             <span class="aui-icon icon-warning">Icon</span>
                 <div class="message-content">
@@ -291,13 +291,13 @@ public class Index
 <p>If Live Class Reloading isn't working for you, check the Troubleshooting section at <a shape="rect" href="class-reloading.html" title="Class Reloading">Class Reloading</a>.</p>
                     </div>
     </div>
-</div><p>This is one of Tapestry's early <em>wow factor</em> features: changes to your component classes are picked up immediately (a feature we call Live Class Reloading). No restart. No re-deploy. Make the changes and see them <em>now</em>. Nothing should slow you down or get in the way of you getting your job done.</p><p>But ... what if you make a mistake? What if you got the name in the template wrong. Give it a try; in the template, change ${currentTime} to, say, ${currenTime}, and see what you get:</p><p><img class="confluence-embedded-image" width="700" src="https://cwiki.apache.org/confluence/download/attachments/24188263/app-error-1.png?version=1&amp;modificationDate=1291068475000&amp;api=v2" data-image-src="/confluence/download/attachments/24188263/app-error-1.png?version=1&amp;modificationDate=1291068475000&amp;api=v2"></p><p>This is Tapestry's exception report page. It's quite detailed. It clearly identifies what Tapestry was doing, and relates the problem to a specific 
 line in the template, which is shown in context. Tapestry always expands out the entire stack of exceptions, because it is so common for exceptions to be thrown, caught, and re-thrown inside other exceptions. In fact, if we scroll down just a little bit, we see more detail about this exception, plus a little bit of help:</p><p><img class="confluence-embedded-image" width="700" src="https://cwiki.apache.org/confluence/download/attachments/24188263/app-error-2.png?version=1&amp;modificationDate=1291068475000&amp;api=v2" data-image-src="/confluence/download/attachments/24188263/app-error-2.png?version=1&amp;modificationDate=1291068475000&amp;api=v2"></p><p>This is part of Tapestry's way: it not only spells out exactly what it was doing and what went wrong, but it even helps you find a solution; here it tells you the names of properties you could have used.</p><p>Tapestry displays the stack trace of the deepest exception, along with lots of details about the run-time environment: detail
 s about the current request, the HttpSession (if one exists), and even a detailed list of all JVM system properties. Scroll down to see all this information.</p>    <div class="aui-message hint shadowed information-macro">
+</div><p>This is one of Tapestry's early <em>wow factor</em> features: changes to your component classes are picked up immediately (a feature we call Live Class Reloading). No restart. No re-deploy. Make the changes and see them <em>now</em>. Nothing should slow you down or get in the way of you getting your job done.</p><p>But ... what if you make a mistake? What if you got the name in the template wrong. Give it a try; in the template, change ${currentTime} to, say, ${currenTime}, and see what you get:</p><p><img class="confluence-embedded-image" width="700" src="https://cwiki.apache.org/confluence/download/attachments/24188263/app-error-1.png?version=3&amp;modificationDate=1416707595797&amp;api=v2" data-image-src="/confluence/download/attachments/24188263/app-error-1.png?version=3&amp;modificationDate=1416707595797&amp;api=v2"></p><p>This is Tapestry's exception report page. It's quite detailed. It clearly identifies what Tapestry was doing, and relates the problem to a specific 
 line in the template, which is shown in context. Tapestry always expands out the entire stack of exceptions, because it is so common for exceptions to be thrown, caught, and re-thrown inside other exceptions. In fact, if we scroll down just a little bit, we see more detail about this exception, plus a little bit of help:</p><p><img class="confluence-embedded-image" width="700" src="https://cwiki.apache.org/confluence/download/attachments/24188263/app-error-2.png?version=4&amp;modificationDate=1416707595000&amp;api=v2" data-image-src="/confluence/download/attachments/24188263/app-error-2.png?version=4&amp;modificationDate=1416707595000&amp;api=v2"></p><p>This is part of Tapestry's way: it not only spells out exactly what it was doing and what went wrong, but it even helps you find a solution; here it tells you the names of properties you could have used.</p>    <div class="aui-message hint shadowed information-macro">
                             <span class="aui-icon icon-hint">Icon</span>
                 <div class="message-content">
                             <p>This level of detail reflects that the application has been configured to run in <em>development mode</em> instead of <em>production mode</em>. In production mode, the exception report would simply be the top level exception message. However, most production applications go further and customize how Tapestry handles and reports exceptions.</p>
                     </div>
     </div>
-<p>There was a bunch of other stuff on this page, related to links and Ajax and other things, that we'll ignore for the moment.</p><hr><p>&#160;</p><style type="text/css">/*<![CDATA[*/
+<p>Tapestry displays the stack trace of the deepest exception, along with lots of details about the run-time environment: details about the current request, the HttpSession (if one exists), and even a detailed list of all JVM system properties. Scroll down to see all this information.</p><p>Next up: let's play a game...</p><hr><p>&#160;</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;}

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

Modified: websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html
==============================================================================
--- websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html (original)
+++ websites/production/tapestry/content/implementing-the-hi-lo-guessing-game.html Sun Nov 23 02:19:29 2014
@@ -48,19 +48,13 @@
 </div></div>
 
 <div id="top">
-<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em">
-<p>
-<span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
-</p><form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html">
+<div id="smallbanner"><div class="searchbox" style="float:right;margin: .3em 1em .1em 1em"><span style="color: #999; font-size: 90%">Tapestry docs, issues, wikis &amp; blogs:</span>
+<form enctype="application/x-www-form-urlencoded" method="get" action="http://tapestry.apache.org/search.html">
   <input type="text" name="q">
   <input type="submit" value="Search">
 </form>
 
-</div>
-
-<div class="emblem" style="float:left"><a shape="rect" href="index.html"><img class="confluence-embedded-image" src="https://cwiki.apache.org/confluence/download/attachments/21791252/tapestry_s.png?version=3&amp;modificationDate=1293093635000&amp;api=v2" data-image-src="/confluence/download/attachments/21791252/tapestry_s.png?version=3&amp;modificationDate=1293093635000&amp;api=v2"></a></div>
-<div class="title" style="float:left; margin: 0 0 0 3em">
-<h1 id="SmallBanner-PageTitle">Implementing the Hi-Lo Guessing Game</h1></div></div>
+</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">Implementing the Hi-Lo Guessing Game</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -98,7 +92,7 @@ table.ScrollbarTable td.ScrollbarNextIco
 {
 }
 ]]></script>
-</div></div><p>Running the application gives us our start:</p><p><img class="confluence-embedded-image" width="700" src="https://cwiki.apache.org/confluence/download/attachments/23340505/hilo-1.png?version=1&amp;modificationDate=1290111983000&amp;api=v2" data-image-src="/confluence/download/attachments/23340505/hilo-1.png?version=1&amp;modificationDate=1290111983000&amp;api=v2"></p><p>However, clicking the link doesn't do anything yet, as its just a placeholder \&lt;a\&gt; tag, not an actual Tapestry component. Let's think about what should happen when the user clicks that link:</p><ul><li>A random target number between 1 and 10 should be selected</li><li>The number of guesses taken should be reset to 0</li><li>The user should be sent to the Guess page to make a guess</li></ul><p>Our first step is to find out when the user clicks that "start guessing" link. In a typical web application framework, we might start thinking about URLs and handlers and maybe some sort of XML configuratio
 n file. But this is Tapestry, so we're going to work with components and methods on our classes.</p><p>First, the component. We want to perform an action (selecting the number) before continuing on to the Guess page. The ActionLink component is just what we need; it creates a link with a URL that will trigger an action event in our code ... but that's getting ahead of ourselves. First up, convert the \&lt;a\&gt; tag to an ActionLink component:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Index.tml (partial)</b></div><div class="codeContent panelContent pdl">
+</div></div><p>Running the application gives us our start:</p><p><img class="confluence-embedded-image" width="700" src="https://cwiki.apache.org/confluence/download/attachments/23340505/hilo-1.png?version=2&amp;modificationDate=1416709010700&amp;api=v2" data-image-src="/confluence/download/attachments/23340505/hilo-1.png?version=2&amp;modificationDate=1416709010700&amp;api=v2"></p><p>However, clicking the link doesn't do anything yet, as its just a placeholder \&lt;a\&gt; tag, not an actual Tapestry component. Let's think about what should happen when the user clicks that link:</p><ul><li>A random target number between 1 and 10 should be selected</li><li>The number of guesses taken should be reset to 0</li><li>The user should be sent to the Guess page to make a guess</li></ul><p>Our first step is to find out when the user clicks that "start guessing" link. In a typical web application framework, we might start thinking about URLs and handlers and maybe some sort of XML configuratio
 n file. But this is Tapestry, so we're going to work with components and methods on our classes.</p><p>First, the component. We want to perform an action (selecting the number) before continuing on to the Guess page. The ActionLink component is just what we need; it creates a link with a URL that will trigger an action event in our code ... but that's getting ahead of ourselves. First up, convert the \&lt;a\&gt; tag to an ActionLink component:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Index.tml (partial)</b></div><div class="codeContent panelContent pdl">
 <script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[  &lt;p&gt;
     &lt;t:actionlink t:id=&quot;start&quot;&gt;start guessing&lt;/t:actionlink&gt;
   &lt;/p&gt;
@@ -329,7 +323,7 @@ public class GameOver
   
 &lt;/html&gt;
 ]]></script>
-</div></div><p>That wraps up the basics of Tapestry; we've demonstrated the basics of linking pages together and passing information from page to page in code as well as incorporating data inside URLs.</p><p>There's still more room to refactor this toy application; for example, making it possible to start a new game from the GameOver page (and doing it in a way that doesn't duplicate code). In addition, later we'll see other ways of sharing information between pages that are less cumbersome than the setup-and-persist approach shown here.</p><p>Next up, we'll start delving into how Tapestry handles HTML forms and user input.</p><style type="text/css">/*<![CDATA[*/
+</div></div><p>That wraps up the basics of Tapestry; we've demonstrated the basics of linking pages together and passing information from page to page in code as well as incorporating data inside URLs.</p><p>There's still more room to refactor this toy application; for example, making it possible to start a new game from the GameOver page (and doing it in a way that doesn't duplicate code). In addition, later we'll see other ways of sharing information between pages that are less cumbersome than the setup-and-persist approach shown here.</p><p>Next up, we'll start delving into how Tapestry handles HTML forms and user input.&#160;</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;}