Author: buildbot
Date: Sat Jul 13 18:20:44 2013
New Revision: 869367
Log:
Production update by buildbot for tapestry
Modified:
websites/production/tapestry/content/cache/main.pageCache
websites/production/tapestry/content/tapestry-for-jsf-users.html
Modified: websites/production/tapestry/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.
Modified: websites/production/tapestry/content/tapestry-for-jsf-users.html
==============================================================================
--- websites/production/tapestry/content/tapestry-for-jsf-users.html (original)
+++ websites/production/tapestry/content/tapestry-for-jsf-users.html Sat Jul 13
18:20:44 2013
@@ -169,7 +169,7 @@ public class HelloWorld {
<p>JSF uses the Unified Expression Language with the #{...} or ${...} syntax
for accessing Backing Bean properties. For its part, Tapestry uses the ${...}
syntax with a similar but more limited expression language called <a
shape="rect" href="property-expressions.html" title="Property
Expressions">Property Expressions</a>. Both allow easy access to properties via
the usual JavaBean conventions, but with Tapestry you don't have to specify
which class the expression starts at (because it always starts at the component
class corresponding to the template). Some comparisons:</p>
<div class="table-wrap">
-<table class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1"
class="confluenceTd"> </td><th colspan="1" rowspan="1"
class="confluenceTh"> JSF Syntax </th><th colspan="1" rowspan="1"
class="confluenceTh"> Tapestry Syntax </th></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"> Property (calls getMyProperty() or setMyProperty())
</td><td colspan="1" rowspan="1" class="confluenceTd">
#{employeeBean.employeeName} </td><td colspan="1" rowspan="1"
class="confluenceTd"> ${employeeName} </td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"> Boolean property (calls isHourly() or setHourly())
</td><td colspan="1" rowspan="1" class="confluenceTd"> #{employeeBean.hourly}
</td><td colspan="1" rowspan="1" class="confluenceTd"> ${hourly}
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Property chain
</td><td colspan="1" rowspan="1" class="confluenceTd">
#{employeeBean.address.street} </td><td colspan="1" rowspan="1"
class="confluenceTd"> ${address.stre
et} </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Null-safe
property chain </td><td colspan="1" rowspan="1" class="confluenceTd">
#{employeeBean.address.street} </td><td colspan="1" rowspan="1"
class="confluenceTd"> ${address?.street} </td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"> 5th element in a List </td><td colspan="1"
rowspan="1" class="confluenceTd"> #{employeeBean.employees[5].name} </td><td
colspan="1" rowspan="1" class="confluenceTd"> ${employees.get(5).name}
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Negation
</td><td colspan="1" rowspan="1" class="confluenceTd"> #{! employeeBean.hourly}
</td><td colspan="1" rowspan="1" class="confluenceTd"> ${! hourly}
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Arithmetic
& relational operators </td><td colspan="1" rowspan="1"
class="confluenceTd"> +-*/% div mod </td><td colspan="1" rowspan="1"
class="confluenceTd"> <em>not available</em> </td></tr><tr><td co
lspan="1" rowspan="1" class="confluenceTd"> Relational operators </td><td
colspan="1" rowspan="1" class="confluenceTd"> == != ne < lt > gt <= le
>= ge </td><td colspan="1" rowspan="1" class="confluenceTd"> <em>not
available</em> </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">
Ternary operator </td><td colspan="1" rowspan="1" class="confluenceTd">
#{myBean.foo < 0 ? 'bar' : 'baz'} </td><td colspan="1" rowspan="1"
class="confluenceTd"> <em>not available</em> </td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"> Method calling </td><td colspan="1"
rowspan="1" class="confluenceTd"> #{myBean.employees.size()} </td><td
colspan="1" rowspan="1" class="confluenceTd"> ${employees.size()}
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Iterated Range
</td><td colspan="1" rowspan="1" class="confluenceTd"> <em>not avaialble</em>
</td><td colspan="1" rowspan="1" class="confluenceTd"> ${1..10}
</td></tr><tr><td colspan="1" rowspan="1" class=
"confluenceTd"> Iterated Range (calculated) </td><td colspan="1" rowspan="1"
class="confluenceTd"> <em>not avaialble</em> </td><td colspan="1" rowspan="1"
class="confluenceTd"> ${1..groupList.size()} </td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"> List </td><td colspan="1" rowspan="1"
class="confluenceTd"> <em>not available</em> </td><td colspan="1" rowspan="1"
class="confluenceTd"> ${ [ user.name, user.email, user.phone ] }
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Map </td><td
colspan="1" rowspan="1" class="confluenceTd"> <em>not available</em> </td><td
colspan="1" rowspan="1" class="confluenceTd"> ${ { 'id':'4039','type':'hourly'
} } </td></tr></tbody></table>
+<table class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1"
class="confluenceTd"> </td><th colspan="1" rowspan="1"
class="confluenceTh"> JSF Syntax </th><th colspan="1" rowspan="1"
class="confluenceTh"> Tapestry Syntax </th></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"> Property (calls getEmployeeName() or setEmployeeName())
</td><td colspan="1" rowspan="1" class="confluenceTd">
#{employeeBean.employeeName} </td><td colspan="1" rowspan="1"
class="confluenceTd"> ${employeeName} </td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"> Boolean property (calls isHourly() or setHourly())
</td><td colspan="1" rowspan="1" class="confluenceTd"> #{employeeBean.hourly}
</td><td colspan="1" rowspan="1" class="confluenceTd"> ${hourly}
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Property chain
</td><td colspan="1" rowspan="1" class="confluenceTd">
#{employeeBean.address.street} </td><td colspan="1" rowspan="1"
class="confluenceTd"> ${address.
street} </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">
Null-safe property chain </td><td colspan="1" rowspan="1" class="confluenceTd">
#{employeeBean.address.street} </td><td colspan="1" rowspan="1"
class="confluenceTd"> ${address?.street} </td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"> 5th element in a List </td><td colspan="1"
rowspan="1" class="confluenceTd"> #{employeeBean.employees[5].name} </td><td
colspan="1" rowspan="1" class="confluenceTd"> ${employees.get(5).name}
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Negation
</td><td colspan="1" rowspan="1" class="confluenceTd"> #{! employeeBean.hourly}
</td><td colspan="1" rowspan="1" class="confluenceTd"> ${! hourly}
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Arithmetic
& relational operators </td><td colspan="1" rowspan="1"
class="confluenceTd"> +-*/% div mod </td><td colspan="1" rowspan="1"
class="confluenceTd"> <em>not available</em> </td></tr><tr><t
d colspan="1" rowspan="1" class="confluenceTd"> Relational operators </td><td
colspan="1" rowspan="1" class="confluenceTd"> == != ne < lt > gt <= le
>= ge </td><td colspan="1" rowspan="1" class="confluenceTd"> <em>not
available</em> </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">
Ternary operator </td><td colspan="1" rowspan="1" class="confluenceTd">
#{myBean.foo < 0 ? 'bar' : 'baz'} </td><td colspan="1" rowspan="1"
class="confluenceTd"> <em>not available</em> </td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"> Method calling </td><td colspan="1"
rowspan="1" class="confluenceTd"> #{myBean.employees.size()} </td><td
colspan="1" rowspan="1" class="confluenceTd"> ${employees.size()}
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Iterated Range
</td><td colspan="1" rowspan="1" class="confluenceTd"> <em>not avaialble</em>
</td><td colspan="1" rowspan="1" class="confluenceTd"> ${1..10}
</td></tr><tr><td colspan="1" rowspan="1" cl
ass="confluenceTd"> Iterated Range (calculated) </td><td colspan="1"
rowspan="1" class="confluenceTd"> <em>not avaialble</em> </td><td colspan="1"
rowspan="1" class="confluenceTd"> ${1..groupList.size()} </td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"> List </td><td colspan="1"
rowspan="1" class="confluenceTd"> <em>not available</em> </td><td colspan="1"
rowspan="1" class="confluenceTd"> ${ [ user.name, user.email, user.phone ] }
</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"> Map </td><td
colspan="1" rowspan="1" class="confluenceTd"> <em>not available</em> </td><td
colspan="1" rowspan="1" class="confluenceTd"> ${ { 'id':'4039','type':'hourly'
} } </td></tr></tbody></table>
</div>
@@ -179,7 +179,7 @@ public class HelloWorld {
<h3><a shape="rect" name="TapestryforJSFUsers-Eventhandling"></a>Event
handling</h3>
-<p>In JSF, you specify the event via the <tt>action</tt> parameter (for
example, <h:commandButton value="Submit"
action="employeeBean.saveChanges">). For Tapestry, event handler methods are
found by method naming conventions (onSomeEvent() or by method annotations
(@Event), based on a combination of the "t:id" attribute and event name, and
the action name used depends on the component. For example, the
"<actionlink>" component in Tapestry emits an "action" event when
clicked, and you handle that event in your "onAction()" method.</p>
+<p>In JSF, you specify the event via the <tt>action</tt> parameter (for
example, <h:commandButton value="Submit"
action="employeeBean.saveChanges">). For Tapestry, event handler methods are
found by method naming conventions (onSomeEvent() or by method annotations
(@Event), based on a combination of the "t:id" attribute and event name, and
the action name used depends on the component. For example, the
"<t:actionlink>" component in Tapestry emits an "action" event when
clicked, and you handle that event in your "onAction()" method.</p>
<h2><a shape="rect" name="TapestryforJSFUsers-Validation"></a>Validation</h2>
@@ -200,7 +200,7 @@ public class Employee {
<p>By contrast, Tapestry implements this Post-Redirect-Get pattern by default.
The URL will always reflect the page you're seeing, not the page you just came
from.</p>
-<p>Note that by default Tapestry does not save property values across the
Post-Redirect-Get cycle. This means that you have to consider how (and whether)
to persist property values from one page to the next. The usual solution is to
either make the values part of the page's <a shape="rect"
href="navigation.html#Navigation-PageActivation">Activation Context</a> or <a
shape="rect" href="persistent-page-data.html" title="Persistent Page
Data">@Persist the properties</a> in the session.</p>
+<p>Note that by default Tapestry does not save property values across the
Post-Redirect-Get cycle. This means that you have to consider how (and whether)
to persist property values from one page to the next. The usual solution is to
either make the values part of the page's <a shape="rect"
href="navigation.html#Navigation-PageActivation">Activation Context</a> (which
means the values will be appended to the URL) or <a shape="rect"
href="persistent-page-data.html" title="Persistent Page Data">@Persist the
properties</a> the values in the session.</p>
<h2><a shape="rect"
name="TapestryforJSFUsers-CustomandCompositeComponents"></a>Custom and
Composite Components</h2>