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&attachmentId=24346949&attachmentVersion=2&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&attachmentId=24346949&attachmentVersion=2&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&modificationDate=1371888025000&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&modificationDate=1371888025000&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 "A great day to learn Tapestry";
}
]]></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&modificationDate=1321974913000&api=v2"
data-image-src="/confluence/download/attachments/24188263/app-live-reload.png?version=2&modificationDate=1321974913000&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&modificationDate=1416707986159&api=v2"
data-image-src="/confluence/download/attachments/24188263/app-live-reload.png?version=5&modificationDate=1416707986159&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&modificationDate=1291068475000&api=v2"
data-image-src="/confluence/download/attachments/24188263/app-error-1.png?version=1&modificationDate=1291068475000&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&modificationDate=1291068475000&api=v2"
data-image-src="/confluence/download/attachments/24188263/app-error-2.png?version=1&modificationDate=1291068475000&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&modificationDate=1416707595797&api=v2"
data-image-src="/confluence/download/attachments/24188263/app-error-1.png?version=3&modificationDate=1416707595797&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&modificationDate=1416707595000&api=v2"
data-image-src="/confluence/download/attachments/24188263/app-error-2.png?version=4&modificationDate=1416707595000&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> </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> </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 &
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 & 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&modificationDate=1293093635000&api=v2"
data-image-src="/confluence/download/attachments/21791252/tapestry_s.png?version=3&modificationDate=1293093635000&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&modificationDate=1290111983000&api=v2"
data-image-src="/confluence/download/attachments/23340505/hilo-1.png?version=1&modificationDate=1290111983000&api=v2"></p><p>However,
clicking the link doesn't do anything yet, as its just a placeholder
\<a\> 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 \<a\> 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&modificationDate=1416709010700&api=v2"
data-image-src="/confluence/download/attachments/23340505/hilo-1.png?version=2&modificationDate=1416709010700&api=v2"></p><p>However,
clicking the link doesn't do anything yet, as its just a placeholder
\<a\> 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 \<a\> 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[ <p>
<t:actionlink t:id="start">start
guessing</t:actionlink>
</p>
@@ -329,7 +323,7 @@ public class GameOver
</html>
]]></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. </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;}