Author: buildbot
Date: Sun Nov 23 01:19:32 2014
New Revision: 930163
Log:
Production update by buildbot for tapestry
Modified:
websites/production/tapestry/content/cache/main.pageCache
websites/production/tapestry/content/exploring-the-project.html
Modified: websites/production/tapestry/content/cache/main.pageCache
==============================================================================
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
01:19:32 2014
@@ -166,79 +166,7 @@ public class Index
}
}
]]></script>
-</div></div><p>There's a bit going on in this listing, as the Index page
attempts to demonstrate a bunch of different ideas in Tapestry. Even so, the
class is essentially pretty simple: Tapestry pages and components have no base
classes to extend, no interfaces to implement, and are just a very pure POJO
(Plain Old Java Object) ... with some special naming conventions and
annotations for fields and methods.</p><p>You do have to meet the Tapestry
framework partway:</p><ul><li>You need to put the Java class in the expected
package, here com.example.tutorial.pages</li><li>The class must be
public</li><li>You need to make sure there's a public, no-arguments constructor
(here, the Java compiler has silently provided one for us)</li><li>All
non-static fields must be <strong>private</strong></li></ul><p>As we saw when
running the application, the page displays the current date and time, as well
as a couple of extra links. The <code>currentTime</code> property is where that
value comes from
; shortly we'll see how that value is referenced in the template, so it can be
extracted from the page and output.</p><p>Tapestry always matches a page class
to a template; neither is functional without the other. In fact, components
within a page are treated the same way (except that components do not always
have templates).</p><p>You will often hear about the <a shape="rect"
class="external-link" href="http://en.wikipedia.org/wiki/Model_view_controller"
>Model-View-Controller pattern</a> (MVC). In Tapestry, the page class acts as
both the Model (the source of data) and the controller (the logic that responds
to user interaction). The template is the View in MVC. As a model, the page
exposes JavaBeans properties that can be referenced in the
template.</p><p>Let's look at how the component template builds on the Java
class to provide the full user interface.</p><h1
id="ExploringtheProject-ComponentTemplate">Component Template</h1><p>Tapestry
pages are the combination of a POJO Java
class with a Tapestry component template. The template has the same name as
the Java class, but has the extension <code>.tml</code>. Since the Java class
here is com.example.tutorial.pages.Index, the template file will be located at
src/main/resource/com/example/tutorial/pages/Index.tml. Ultimately, both the
Java class and the component template file will be stored in the same folder
within the deployed WAR file.</p><p>Tapestry component templates are
well-formed XML documents. This means that you can use any available XML
editor. Templates may even have a DOCTYPE or an XML schema to validate the
structure of the template
page</p><p> </p><p> </p><p> </p><p> </p><style
type='text/css'>
-.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;
- border-left: 1px solid #8898B8;
- border-bottom: 1px solid #6B7C9B;
- margin: 1px;
- text-decoration: none;
-}
-.FootnoteNum a {
- margin-top: 2px;
- margin-right: 0px;
-}
-.FootnoteNum {
- font-size: x-small;
- text-align: right;
- padding-bottom: 4px;
-}
-.footnote-th1 {
- text-align: right;
-}
-.Footnote {
- padding-left: 7px;
- margin-bottom: 4px;
- border: 1px none #DDDDDD;
- writingMode: tb-rl;
-}
-.accessibility {
- display: none;
- visibility: hidden;
-}
-@media aural,braille,embossed {
- .FootnoteMarker, .FootnoteNum a {
- border: 1px solid #000000;
- background: #ffffff none;
- }
- .accessibility {
- display: run-in;
- visibility: visible;
- }
-}
-</style>
-<script type='text/javascript' language='JavaScript'>
-//<!--\n
-var effectInProgress = {};
-var despamEffect = function (id,effectType,duration) {
- if ((effectInProgress[id]) || (typeof(Effect)=="undefined") ||
(typeof(Effect[effectType])=="undefined")) return;
- new Effect[effectType](id);
- effectInProgress[id]=true;
- setTimeout('effectInProgress[\"'+id+'\"]=false;',duration*1000);
-};
-var oldFootnoteId = '';
-var footnoteHighlight = function(id,pulsateNum) {
- if (oldFootnoteId!='')
document.getElementById('Footnote'+oldFootnoteId).style['borderStyle'] = 'none';
- oldFootnoteId = id;
- document.getElementById('Footnote'+id).style['borderStyle'] = 'solid';
- despamEffect('Footnote'+id,'Highlight',1)
- if (pulsateNum) despamEffect('FootnoteNum'+id,'Pulsate',3)
-}
-var footnoteMarkerHighlight = function(id) {
- if (oldFootnoteId!='')
document.getElementById('Footnote'+oldFootnoteId).style['borderStyle'] = 'none';
- oldFootnoteId = '';
- despamEffect('FootnoteMarker'+id,'Pulsate',3)
-}
-//-->
-</script>
-
-<sup id="FootnoteMarker1">
- <a shape="rect" class="FootnoteMarker" name="FootnoteMarker1"
href="#Footnote1" onclick="footnoteHighlight("1",true);"
alt="Footnote: Click here to display the footnote" title="Footnote: Click here
to display the footnote">
- 1
- </a>
-</sup>
-<p> </p><p> </p><p> </p><p> </p><p>.</p><p> </p><p>For
the most part, a Tapestry component template looks like ordinary
XHTML:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width:
1px;"><b>src/main/resources/com/example/tutorial/pages/Index.tml</b></div><div
class="codeContent panelContent pdl">
+</div></div><p>There's a bit going on in this listing, as the Index page
attempts to demonstrate a bunch of different ideas in Tapestry. Even so, the
class is essentially pretty simple: Tapestry pages and components have no base
classes to extend, no interfaces to implement, and are just a very pure POJO
(Plain Old Java Object) ... with some special naming conventions and
annotations for fields and methods.</p><p>You do have to meet the Tapestry
framework partway:</p><ul><li>You need to put the Java class in the expected
package, here com.example.tutorial.pages</li><li>The class must be
public</li><li>You need to make sure there's a public, no-arguments constructor
(here, the Java compiler has silently provided one for us)</li><li>All
non-static fields must be <strong>private</strong></li></ul><p>As we saw when
running the application, the page displays the current date and time, as well
as a couple of extra links. The <code>currentTime</code> property is where that
value comes from
; shortly we'll see how that value is referenced in the template, so it can be
extracted from the page and output.</p><p>Tapestry always matches a page class
to a template; neither is functional without the other. In fact, components
within a page are treated the same way (except that components do not always
have templates).</p><p>You will often hear about the <a shape="rect"
class="external-link" href="http://en.wikipedia.org/wiki/Model_view_controller"
>Model-View-Controller pattern</a> (MVC). In Tapestry, the page class acts as
both the Model (the source of data) and the controller (the logic that responds
to user interaction). The template is the View in MVC. As a model, the page
exposes JavaBeans properties that can be referenced in the
template.</p><p>Let's look at how the component template builds on the Java
class to provide the full user interface.</p><h1
id="ExploringtheProject-ComponentTemplate">Component Template</h1><p>Tapestry
pages are the combination of a POJO Java
class with a Tapestry component template. The template has the same name as
the Java class, but has the extension <code>.tml</code>. Since the Java class
here is com.example.tutorial.pages.Index, the template file will be located at
src/main/resource/com/example/tutorial/pages/Index.tml. Ultimately, both the
Java class and the component template file will be stored in the same folder
within the deployed WAR file.</p><p>Tapestry component templates are
well-formed XML documents. This means that you can use any available XML
editor. Templates may even have a DOCTYPE or an XML schema to validate the
structure of the template page.</p><p><em>Note that Tapestry parses component
templates using a non-validating parser; it only checks for well-formedness:
proper syntax, balanced elements, attribute values are quoted, and so forth. It
is reasonable for your build process to perform some kind of template
validation, but Tapestry accepts the template as-is, as long as it parses
cleanly.</em><
/p><p>For the most part, a Tapestry component template looks like ordinary
XHTML:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width:
1px;"><b>src/main/resources/com/example/tutorial/pages/Index.tml</b></div><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[<html t:type="layout"
title="tutorial1 Index"
t:sidebarTitle="Framework Version"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
@@ -288,16 +216,10 @@ var footnoteMarkerHighlight = function(i
<p>You do have to name your component template
file, Index.tml, with the <strong>exact same case</strong> as the component
class name, Index. If you get the case wrong, it may work on some operating
systems (such as Mac OS X, Windows) and not on others (Linux, and most others).
This can be really vexing, as it is common to develop on Windows and deploy on
Linux or Solaris, so be careful about case in this one area.</p>
</div>
</div>
-<p>The goal in Tapestry is for component templates, such as Index.tml, to look
as much as possible like ordinary, static HTML
files</p><p> </p><p> </p><p> </p><p> </p>
-<sup id="FootnoteMarker2">
- <a shape="rect" class="FootnoteMarker" name="FootnoteMarker2"
href="#Footnote2" onclick="footnoteHighlight("2",true);"
alt="Footnote: Click here to display the footnote" title="Footnote: Click here
to display the footnote">
- 2
- </a>
-</sup>
-<p> </p><p> </p><p> </p><p> </p><p>. In fact, the
expectation is that in many cases, the templates will start as static HTML
files, created by a web developer, and then be <em>instrumented</em> to act as
live Tapestry pages.</p><p> </p><p>Tapestry hides non-standard elements
and attributes inside XML namespaces. By convention, the prefix "t:" is used
for the primary namespace, but that is not a requirement, any prefix you want
to use is fine.</p><p>This short template demonstrates quite a few features of
Tapestry.</p> <div class="aui-message problem shadowed information-macro">
+<p>The goal in Tapestry is for component templates, such as Index.tml, to look
as much as possible like ordinary, static HTML files. (By static, we mean
unchanging, as opposed to a dynamically generated Tapestry page.)</p><p>In
fact, the expectation is that in many cases, the templates will start as static
HTML files, created by a web developer, and then be <em>instrumented</em> to
act as live Tapestry pages.</p><p>Tapestry hides non-standard elements and
attributes inside XML namespaces. By convention, the prefix "t:" is used for
the primary namespace, but that is not a requirement, any prefix you want to
use is fine.</p><p>This short template demonstrates quite a few features of
Tapestry.</p> <div class="aui-message problem shadowed information-macro">
<span class="aui-icon icon-problem">Icon</span>
<div class="message-content">
- <p>Part of the concept of the quickstart archetype
is to demonstrate a bunch of different features, approaches and common patterns
used in Tapestry, thus we're hitting you with a lot all at once.</p>
+ <p>Part of the concept of the quickstart archetype
is to demonstrate a bunch of different features, approaches, and common
patterns used in Tapestry. So yes, we're hitting you with a lot all at once.</p>
</div>
</div>
<p>First of all, there are two XML namespaces defined:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
@@ -313,37 +235,19 @@ var footnoteMarkerHighlight = function(i
<p>If you are coming to Tapestry 5 from Tapestry 4
or earlier, expansions are a concise replacement for the Insert component.</p>
</div>
</div>
-<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><p> </p><p> </p><p> </p><p> </p>
-<sup id="FootnoteMarker3">
- <a shape="rect" class="FootnoteMarker" name="FootnoteMarker3"
href="#Footnote3" onclick="footnoteHighlight("3",true);"
alt="Footnote: Click here to display the footnote" title="Footnote: Click here
to display the footnote">
- 3
- </a>
-</sup>
-<p> </p><p> </p><p> </p><p> </p><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> </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</p><p> </p><p> </p><p> </p><p> </p>
-<sup id="FootnoteMarker4">
- <a shape="rect" class="FootnoteMarker" name="FootnoteMarker4"
href="#Footnote4" onclick="footnoteHighlight("4",true);"
alt="Footnote: Click here to display the footnote" title="Footnote: Click here
to display the footnote">
- 4
- </a>
-</sup>
-<p> </p><p> </p><p> </p><p> </p><p>.</p><p> </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()</code> 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">
+<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>
+ </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">
<script class="theme: Default; brush: xml; gutter: false"
type="syntaxhighlighter"><![CDATA[ <p>${message:greeting}</p>
]]></script>
-</div></div><p>Here <code>greeting</code> is not a property of the page; its
actually a localized message key. Every Tapestry page and component is allowed
to have its own message
catalog</p><p> </p><p> </p><p> </p><p> </p>
-<sup id="FootnoteMarker5">
- <a shape="rect" class="FootnoteMarker" name="FootnoteMarker5"
href="#Footnote5" onclick="footnoteHighlight("5",true);"
alt="Footnote: Click here to display the footnote" title="Footnote: Click here
to display the footnote">
- 5
- </a>
-</sup>
-<p> </p><p> </p><p> </p><p> </p><p>.</p><p> </p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width:
1px;"><b>src/main/resources/com/example/tutorial/pages/Index.properties</b></div><div
class="codeContent panelContent pdl">
+</div></div><p>Here <code>greeting</code> is not a property of the page; its
actually a localized message key. Every Tapestry page and component is allowed
to have its own message catalog. (There's also a global message catalog,
<em>which we'll describe later</em>.)</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width:
1px;"><b>src/main/resources/com/example/tutorial/pages/Index.properties</b></div><div
class="codeContent panelContent pdl">
<script class="theme: Default; brush: java; gutter: false"
type="syntaxhighlighter"><![CDATA[greeting=Welcome to Tapestry 5! We hope that
this project template will get you going in style.
]]></script>
-</div></div><p>Message catalogs are useful for storing repeating strings
outside of code or templates, though their primary purpose is related to
localization of the application (which will be described in more detail in a
later chapter). Messages that may be used across multiple pages can be stored
in the application's global message catalog,
src/main/webapp/WEB-INF/app.properties, instead.</p><p>This "message:" prefix
is not some special case; there are actually quite a few of these <em>binding
prefixes</em> built into Tapestry, each having a specific purpose. In fact,
omitting a binding prefix in an expansion is exactly the same as using the
"prop:" binding prefix, which means to treat the binding as a property
expression.</p><p>Expansions are useful for extracting a piece of information
and rendering it out to the client as a string, but the real heavy lifting of
Tapestry occurs inside components.</p><h1
id="ExploringtheProject-ComponentsInsideTemplates">Components Inside Templa
tes</h1><p>Components can be represented inside a component template in two
ways</p><p> </p><p> </p><p> </p><p> </p>
-<sup id="FootnoteMarker6">
- <a shape="rect" class="FootnoteMarker" name="FootnoteMarker6"
href="#Footnote6" onclick="footnoteHighlight("6",true);"
alt="Footnote: Click here to display the footnote" title="Footnote: Click here
to display the footnote">
- 6
- </a>
-</sup>
-<p> </p><p> </p><p> </p><p> </p><p>:</p><p> </p><ul><li>As
an ordinary element, but with a t:type attribute to define the type of
component.</li></ul><ul><li>As an element in the Tapestry namespace, in which
case the element name determines the type.</li></ul><p>Here we've used an
<html> element to represent the application's Layout component.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><p>Message catalogs are useful for storing repeating strings
outside of code or templates, though their primary purpose is related to
localization of the application (which will be described in more detail in a
later chapter). Messages that may be used across multiple pages can be stored
in the application's global message catalog,
src/main/webapp/WEB-INF/app.properties, instead.</p><p>This "message:" prefix
is not some special case; there are actually quite a few of these <em>binding
prefixes</em> built into Tapestry, each having a specific purpose. In fact,
omitting a binding prefix in an expansion is exactly the same as using the
"prop:" binding prefix, which means to treat the binding as a property
expression.</p><p>Expansions are useful for extracting a piece of information
and rendering it out to the client as a string, but the real heavy lifting of
Tapestry occurs inside components.</p><h1
id="ExploringtheProject-ComponentsInsideTemplates">Components Inside Templa
tes</h1><p>Components can be represented inside a component template in two
ways:</p><ul><li>As an ordinary element, but with a t:type attribute to define
the type of component.</li></ul><ul><li>As an element in the Tapestry
namespace, in which case the element name determines the type.</li></ul><p>Here
we've used an <html> element to represent the application's Layout
component.</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[<html t:type="layout" ...>
...
</html>
@@ -360,13 +264,13 @@ var footnoteMarkerHighlight = function(i
-<span class="gliffy-container" id="gliffy-container-24346949-7996"
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-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">
- <map id="gliffy-map-24346949-6882" name="gliffy-map-24346949-6882"></map>
+ <map id="gliffy-map-24346949-8372" name="gliffy-map-24346949-8372"></map>
- <img class="gliffy-image gliffy-image-border"
id="gliffy-image-24346949-7996" 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-6882">
+ <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">
- <map class="gliffy-dynamic" id="gliffy-dynamic-map-24346949-7996"
name="gliffy-dynamic-map-24346949-7996"></map>
+ <map class="gliffy-dynamic" id="gliffy-dynamic-map-24346949-1602"
name="gliffy-dynamic-map-24346949-1602"></map>
</span>
@@ -393,44 +297,7 @@ var footnoteMarkerHighlight = function(i
<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><p> </p><p> </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><tr
name="Footnote1"><td colspan="1" rowspan="1" valign="top" class="FootnoteNum"
headings="footnote-th1">
- <a shape="rect" id="FootnoteNum1" href="#FootnoteMarker1"
onclick="footnoteMarkerHighlight("1");"
onmouseover="footnoteHighlight("1",false);" alt="Footnote: Click to
return to reference in text" title="Footnote: Click to return to reference in
text">
- 1
- </a>
- </td><td colspan="1" rowspan="1" valign="top" class="Footnote"
id="Footnote1" width="100%" headings="footnote-th2">
- Tapestry parses component templates using a non-validating parser;
it only checks for well-formedness: proper syntax, balanced elements, attribute
values are quoted, and so forth. It is reasonable for your <em>build
process</em> to perform some kind of template validation, but Tapestry accepts
the template as-is, as long as it parses cleanly.
-
-<p> </p></td></tr><tr name="Footnote2"><td colspan="1" rowspan="1"
valign="top" class="FootnoteNum" headings="footnote-th1">
- <a shape="rect" id="FootnoteNum2" href="#FootnoteMarker2"
onclick="footnoteMarkerHighlight("2");"
onmouseover="footnoteHighlight("2",false);" alt="Footnote: Click to
return to reference in text" title="Footnote: Click to return to reference in
text">
- 2
- </a>
- </td><td colspan="1" rowspan="1" valign="top" class="Footnote"
id="Footnote2" width="100%" headings="footnote-th2">
- By static, we mean unchanging, as opposed to a dynamically generated
Tapestry page.
- </td></tr><tr name="Footnote3"><td colspan="1" rowspan="1" valign="top"
class="FootnoteNum" headings="footnote-th1">
- <a shape="rect" id="FootnoteNum3" href="#FootnoteMarker3"
onclick="footnoteMarkerHighlight("3");"
onmouseover="footnoteHighlight("3",false);" alt="Footnote: Click to
return to reference in text" title="Footnote: Click to return to reference in
text">
- 3
- </a>
- </td><td colspan="1" rowspan="1" valign="top" class="Footnote"
id="Footnote3" width="100%" headings="footnote-th2">
- Tapestry does <em>not</em> use reflection to implement property
expressions.
- </td></tr><tr name="Footnote4"><td colspan="1" rowspan="1" valign="top"
class="FootnoteNum" headings="footnote-th1">
- <a shape="rect" id="FootnoteNum4" href="#FootnoteMarker4"
onclick="footnoteMarkerHighlight("4");"
onmouseover="footnoteHighlight("4",false);" alt="Footnote: Click to
return to reference in text" title="Footnote: Click to return to reference in
text">
- 4
- </a>
- </td><td colspan="1" rowspan="1" valign="top" class="Footnote"
id="Footnote4" width="100%" headings="footnote-th2">
- 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.
- </td></tr><tr name="Footnote5"><td colspan="1" rowspan="1" valign="top"
class="FootnoteNum" headings="footnote-th1">
- <a shape="rect" id="FootnoteNum5" href="#FootnoteMarker5"
onclick="footnoteMarkerHighlight("5");"
onmouseover="footnoteHighlight("5",false);" alt="Footnote: Click to
return to reference in text" title="Footnote: Click to return to reference in
text">
- 5
- </a>
- </td><td colspan="1" rowspan="1" valign="top" class="Footnote"
id="Footnote5" width="100%" headings="footnote-th2">
- There's also a global message catalog, which we'll describe later.
- </td></tr><tr name="Footnote6"><td colspan="1" rowspan="1" valign="top"
class="FootnoteNum" headings="footnote-th1">
- <a shape="rect" id="FootnoteNum6" href="#FootnoteMarker6"
onclick="footnoteMarkerHighlight("6");"
onmouseover="footnoteHighlight("6",false);" alt="Footnote: Click to
return to reference in text" title="Footnote: Click to return to reference in
text">
- 6
- </a>
- </td><td colspan="1" rowspan="1" valign="top" class="Footnote"
id="Footnote6" width="100%" headings="footnote-th2">
- Ok, there's a third way as well, which will be discussed in good
time.
-
</td></tr></tbody></table></p><p> </p><p> </p><p> </p><style
type="text/css">/*<![CDATA[*/
+<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[*/
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;}