Modified: websites/production/tapestry/content/documentation.html
==============================================================================
--- websites/production/tapestry/content/documentation.html (original)
+++ websites/production/tapestry/content/documentation.html Sun Apr 26 21:22:55 
2020
@@ -67,7 +67,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><div 
style="float:right;margin-left:1em"><h2 id="Documentation-AllTopics">All 
Topics</h2><ul class="childpages-macro"><li><a  
href="introduction.html">Introduction</a></li><li><a  
href="getting-started.html">Getting Started</a></li><li><a  
href="principles.html">Principles</a></li><li><a  
href="tapestry-tutorial.html">Tapestry Tutorial</a><ul 
class="childpages-macro"><li><a  
href="dependencies-tools-and-plugins.html">Dependencies, Tools and 
Plugins</a></li><li><a  href="creating-the-skeleton-application.html">Creating 
The Skeleton Application</a></li><li><a  
href="exploring-the-project.html">Exploring the Project</a></li><li><a  
href="implementing-the-hi-lo-guessing-game.html">Implementing the Hi-Lo 
Guessing Game</a></li><li><a  
href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To 
Create User Forms</a></li><li><a  
href="using-tapestry-with-hibernate.html">Using Tapestry With 
Hibernate</a></li></ul></li><li><a  href="us
 er-guide.html">User Guide</a><ul class="childpages-macro"><li><a  
href="supported-environments-and-versions.html">Supported Environments and 
Versions</a></li><li><a  href="project-layout.html">Project 
Layout</a></li><li><a  href="configuration.html">Configuration</a></li><li><a  
href="runtime-exceptions.html">Runtime Exceptions</a></li><li><a  
href="class-reloading.html">Class Reloading</a></li><li><a  
href="component-reference.html">Component Reference</a></li><li><a  
href="annotations.html">Annotations</a></li><li><a  
href="component-classes.html">Component Classes</a></li><li><a  
href="component-templates.html">Component Templates</a></li><li><a  
href="property-expressions.html">Property Expressions</a></li><li><a  
href="component-parameters.html">Component Parameters</a></li><li><a  
href="parameter-type-coercion.html">Parameter Type Coercion</a></li><li><a  
href="layout-component.html">Layout Component</a></li><li><a  
href="component-mixins.html">Component Mixins</a><ul class="c
 hildpages-macro"><li><a  href="built-in-mixins.html">Built-in 
Mixins</a></li></ul></li><li><a  href="page-navigation.html">Page 
Navigation</a></li><li><a  href="localization.html">Localization</a></li><li><a 
 href="page-life-cycle.html">Page Life Cycle</a></li><li><a  
href="request-processing.html">Request Processing</a></li><li><a  
href="component-rendering.html">Component Rendering</a></li><li><a  
href="component-events.html">Component Events</a></li><li><a  
href="url-rewriting.html">URL rewriting</a></li><li><a  
href="dom.html">DOM</a></li><li><a  href="response-compression.html">Response 
Compression</a></li><li><a  href="security.html">Security</a></li><li><a  
href="https.html">HTTPS</a></li><li><a  
href="content-type-and-markup.html">Content Type and Markup</a></li><li><a  
href="persistent-page-data.html">Persistent Page Data</a></li><li><a  
href="session-storage.html">Session Storage</a><ul 
class="childpages-macro"><li><a  href="clustering-issues.html">Clustering 
Issues</a></l
 i></ul></li><li><a  href="injection.html">Injection</a></li><li><a  
href="environmental-services.html">Environmental Services</a></li><li><a  
href="css.html">CSS</a></li><li><a  href="assets.html">Assets</a></li><li><a  
href="forms-and-validation.html">Forms and Validation</a></li><li><a  
href="beaneditform-guide.html">BeanEditForm Guide</a></li><li><a  
href="uploading-files.html">Uploading Files</a></li><li><a  
href="logging.html">Logging</a></li><li><a  
href="unit-testing-pages-or-components.html">Unit testing pages or 
components</a></li><li><a  href="integration-testing.html">Integration 
Testing</a></li><li><a  href="development-dashboard.html">Development 
Dashboard</a></li><li><a  href="modules.html">Modules</a><ul 
class="childpages-macro"><li><a  href="built-in-modules.html">Built In 
Modules</a></li><li><a  href="third-party-modules.html">Third Party 
Modules</a></li></ul></li><li><a  href="ioc.html">IOC</a><ul 
class="childpages-macro"><li><a  href="tapestry-ioc-overview.html">T
 apestry IoC Overview</a></li><li><a  href="tapestry-ioc-modules.html">Tapestry 
IoC Modules</a></li><li><a  href="defining-tapestry-ioc-services.html">Defining 
Tapestry IOC Services</a></li><li><a  href="service-advisors.html">Service 
Advisors</a></li><li><a  href="tapestry-ioc-decorators.html">Tapestry IoC 
Decorators</a></li><li><a  href="tapestry-ioc-configuration.html">Tapestry IoC 
Configuration</a></li><li><a  href="case-insensitivity.html">Case 
Insensitivity</a></li><li><a  href="autoloading-modules.html">Autoloading 
Modules</a></li><li><a  href="service-implementation-reloading.html">Service 
Implementation Reloading</a></li><li><a  
href="ordering-by-constraints.html">Ordering by Constraints</a></li><li><a  
href="symbols.html">Symbols</a></li><li><a  
href="chainbuilder-service.html">ChainBuilder Service</a></li><li><a  
href="pipelinebuilder-service.html">PipelineBuilder Service</a></li><li><a  
href="shadowbuilder-service.html">ShadowBuilder Service</a></li><li><a  
href="strategy
 builder-service.html">StrategyBuilder Service</a></li><li><a  
href="injection-in-detail.html">Injection in Detail</a></li><li><a  
href="object-providers.html">Object Providers</a></li><li><a  
href="service-serialization.html">Service Serialization</a></li><li><a  
href="type-coercion.html">Type Coercion</a></li><li><a  
href="starting-the-ioc-registry.html">Starting the IoC Registry</a></li><li><a  
href="registry-startup.html">Registry Startup</a></li><li><a  
href="parallel-execution.html">Parallel Execution</a></li><li><a  
href="logging-in-tapestry.html">Logging in Tapestry</a></li><li><a  
href="using-jsr-330-standard-annotations.html">Using JSR 330 standard 
annotations</a></li><li><a  href="operation-tracker.html">Operation 
Tracker</a></li></ul></li><li><a  href="hibernate-core.html">Hibernate - 
Core</a><ul class="childpages-macro"><li><a  
href="hibernate-core-conf.html">Hibernate - Core - Conf</a></li><li><a  
href="hibernate.html">Hibernate</a></li></ul></li><li><a  href="integrati
 ng-with-spring-framework.html">Integrating with Spring 
Framework</a></li><li><a  href="bean-validation.html">Bean 
Validation</a></li><li><a  href="component-report.html">Component 
Report</a></li><li><a  href="aliases.html">Aliases</a></li><li><a  
href="integrating-with-jpa.html">Integrating with JPA</a></li><li><a  
href="client-side-javascript.html">Client-Side JavaScript</a><ul 
class="childpages-macro"><li><a  href="javascript-modules.html">JavaScript 
Modules</a></li><li><a  href="coffeescript.html">CoffeeScript</a></li><li><a  
href="typescript.html">TypeScript</a></li><li><a  
href="legacy-javascript.html">Legacy JavaScript</a></li><li><a  
href="ajax-and-zones.html">Ajax and Zones</a></li></ul></li></ul></li><li><a  
href="cheat-sheets.html">Cheat Sheets</a><ul class="childpages-macro"><li><a  
href="application-module-class-cheat-sheet.html">Application Module Class Cheat 
Sheet</a></li><li><a  href="component-cheat-sheet.html">Component Cheat 
Sheet</a></li><li><a  href="tapestry-for
 -jsf-users.html">Tapestry for JSF Users</a></li></ul></li><li><a  
href="cookbook.html">Cookbook</a><ul class="childpages-macro"><li><a  
href="default-parameter.html">Default Parameter</a></li><li><a  
href="overriding-exception-reporting.html">Overriding Exception 
Reporting</a></li><li><a  href="error-page-recipe.html">Error Page 
Recipe</a></li><li><a  href="supporting-informal-parameters.html">Supporting 
Informal Parameters</a></li><li><a  href="component-libraries.html">Component 
Libraries</a></li><li><a  href="switching-cases.html">Switching 
Cases</a></li><li><a  href="enum-parameter-recipe.html">Enum Parameter 
Recipe</a></li><li><a  href="extending-the-if-component.html">Extending the If 
Component</a></li><li><a  
href="meta-programming-page-content.html">Meta-Programming Page 
Content</a></li><li><a  href="using-select-with-a-list.html">Using Select With 
a List</a></li><li><a  href="ioc-cookbook.html">IoC cookbook</a><ul 
class="childpages-macro"><li><a  href="ioc-cookbook-basic-se
 rvices-and-injection.html">IoC Cookbook - Basic Services and 
Injection</a></li><li><a  href="ioc-cookbook-overriding-ioc-services.html">IoC 
Cookbook - Overriding IoC Services</a></li><li><a  
href="ioc-cookbook-patterns.html">IoC Cookbook - Patterns</a></li><li><a  
href="ioc-cookbook-service-configurations.html">IoC cookbook - Service 
Configurations</a></li></ul></li><li><a  
href="performance-and-clustering.html">Performance and 
Clustering</a></li><li><a  href="google-app-engine.html">Google App 
Engine</a></li></ul></li><li><a  
href="frequently-asked-questions.html">Frequently Asked Questions</a><ul 
class="childpages-macro"><li><a  href="general-questions.html">General 
Questions</a></li><li><a  href="templating-and-markup-faq.html">Templating and 
Markup FAQ</a></li><li><a  href="page-and-component-classes-faq.html">Page And 
Component Classes FAQ</a></li><li><a  
href="forms-and-form-components-faq.html">Forms and Form Components 
FAQ</a></li><li><a  href="beaneditform-faq.html">BeanEdi
 tForm FAQ</a></li><li><a  href="link-components-faq.html">Link Components 
FAQ</a></li><li><a  href="component-events-faq.html">Component Events 
FAQ</a></li><li><a  href="javascript-faq.html">JavaScript FAQ</a></li><li><a  
href="ajax-components-faq.html">Ajax Components FAQ</a></li><li><a  
href="injection-faq.html">Injection FAQ</a></li><li><a  
href="tapestry-inversion-of-control-faq.html">Tapestry Inversion of Control 
FAQ</a></li><li><a  href="security-faq.html">Security FAQ</a></li><li><a  
href="integration-with-existing-applications.html">Integration with existing 
applications</a></li><li><a  href="request-processing-faq.html">Request 
Processing FAQ</a></li><li><a  
href="limitations.html">Limitations</a></li><li><a  
href="specific-errors-faq.html">Specific Errors FAQ</a></li><li><a  
href="hibernate-support-faq.html">Hibernate Support FAQ</a></li><li><a  
href="maven-support-faq.html">Maven Support FAQ</a></li><li><a  
href="release-upgrade-faq.html">Release Upgrade FAQ</a></li></ul>
 </li><li><a  href="release-notes.html">Release Notes</a><ul 
class="childpages-macro"><li><a  href="how-to-upgrade.html">How to 
Upgrade</a></li><li><a  href="release-notes-50.html">Release Notes 
5.0</a></li><li><a  href="release-notes-51.html">Release Notes 
5.1</a></li><li><a  href="release-notes-52.html">Release Notes 5.2</a><ul 
class="childpages-macro"><li><a  href="release-notes-520.html">Release Notes 
5.2.0</a></li><li><a  href="release-notes-521.html">Release Notes 
5.2.1</a></li><li><a  href="release-notes-522.html">Release Notes 
5.2.2</a></li><li><a  href="release-notes-523.html">Release Notes 
5.2.3</a></li><li><a  href="release-notes-524.html">Release Notes 
5.2.4</a></li><li><a  href="release-notes-525.html">Release Notes 
5.2.5</a></li><li><a  href="release-notes-526.html">Release Notes 
5.2.6</a></li></ul></li><li><a  href="release-notes-53.html">Release Notes 
5.3</a></li><li><a  href="release-notes-531.html">Release Notes 
5.3.1</a></li><li><a  href="release-notes-532.html">Re
 lease Notes 5.3.2</a></li><li><a  href="release-notes-533.html">Release Notes 
5.3.3</a></li><li><a  href="release-notes-534.html">Release Notes 
5.3.4</a></li><li><a  href="release-notes-535.html">Release Notes 
5.3.5</a></li><li><a  href="release-notes-536.html">Release Notes 
5.3.6</a></li><li><a  href="release-notes-537.html">Release Notes 
5.3.7</a></li><li><a  href="release-notes-538.html">Release Notes 
5.3.8</a></li><li><a  href="release-notes-54.html">Release Notes 
5.4</a></li><li><a  href="release-notes-541.html">Release Notes 
5.4.1</a></li><li><a  href="release-notes-542.html">Release Notes 
5.4.2</a></li><li><a  href="release-notes-543.html">Release Notes 
5.4.3</a></li><li><a  href="release-notes-544.html">Release Notes 
5.4.4</a></li><li><a  href="release-notes-545.html">Release Notes 
5.4.5</a></li><li><a  href="release-notes-550.html">Release Notes 
5.5.0</a></li></ul></li><li><a  href="javascript-rewrite-in-54.html">JavaScript 
Rewrite in 5.4</a></li><li><a  href="support.html"
 >Support</a></li><li><a  href="developer-information.html">Developer 
 >Information</a><ul class="childpages-macro"><li><a  
 >href="building-tapestry-from-source.html">Building Tapestry from 
 >Source</a></li><li><a  href="confluence-site-setup.html">Confluence Site 
 >Setup</a><ul class="childpages-macro"><li><a  
 >href="since-and-deprecated-user-macros.html">Since and Deprecated User 
 >Macros</a></li></ul></li><li><a  href="developer-bible.html">Developer 
 >Bible</a></li><li><a  href="release-process.html">Release 
 >Process</a></li><li><a  href="the-tapestry-jail.html">The tapestry 
 >jail</a></li><li><a  href="version-numbers.html">Version 
 >Numbers</a></li></ul></li></ul></div>
+                <div id="ConfluenceContent"><div 
style="float:right;margin-left:1em"><h2 id="Documentation-AllTopics">All 
Topics</h2><ul class="childpages-macro"><li><a  
href="introduction.html">Introduction</a></li><li><a  
href="getting-started.html">Getting Started</a></li><li><a  
href="principles.html">Principles</a></li><li><a  
href="tapestry-tutorial.html">Tapestry Tutorial</a><ul 
class="childpages-macro"><li><a  
href="dependencies-tools-and-plugins.html">Dependencies, Tools and 
Plugins</a></li><li><a  href="creating-the-skeleton-application.html">Creating 
The Skeleton Application</a></li><li><a  
href="exploring-the-project.html">Exploring the Project</a></li><li><a  
href="implementing-the-hi-lo-guessing-game.html">Implementing the Hi-Lo 
Guessing Game</a></li><li><a  
href="using-beaneditform-to-create-user-forms.html">Using BeanEditForm To 
Create User Forms</a></li><li><a  
href="using-tapestry-with-hibernate.html">Using Tapestry With 
Hibernate</a></li></ul></li><li><a  href="us
 er-guide.html">User Guide</a><ul class="childpages-macro"><li><a  
href="supported-environments-and-versions.html">Supported Environments and 
Versions</a></li><li><a  href="project-layout.html">Project 
Layout</a></li><li><a  href="configuration.html">Configuration</a></li><li><a  
href="runtime-exceptions.html">Runtime Exceptions</a></li><li><a  
href="class-reloading.html">Class Reloading</a></li><li><a  
href="component-reference.html">Component Reference</a></li><li><a  
href="annotations.html">Annotations</a></li><li><a  
href="component-classes.html">Component Classes</a></li><li><a  
href="component-templates.html">Component Templates</a></li><li><a  
href="property-expressions.html">Property Expressions</a></li><li><a  
href="component-parameters.html">Component Parameters</a></li><li><a  
href="parameter-type-coercion.html">Parameter Type Coercion</a></li><li><a  
href="layout-component.html">Layout Component</a></li><li><a  
href="component-mixins.html">Component Mixins</a><ul class="c
 hildpages-macro"><li><a  href="built-in-mixins.html">Built-in 
Mixins</a></li></ul></li><li><a  href="page-navigation.html">Page 
Navigation</a></li><li><a  href="localization.html">Localization</a></li><li><a 
 href="page-life-cycle.html">Page Life Cycle</a></li><li><a  
href="request-processing.html">Request Processing</a></li><li><a  
href="component-rendering.html">Component Rendering</a></li><li><a  
href="component-events.html">Component Events</a></li><li><a  
href="url-rewriting.html">URL rewriting</a></li><li><a  
href="dom.html">DOM</a></li><li><a  href="response-compression.html">Response 
Compression</a></li><li><a  href="security.html">Security</a></li><li><a  
href="https.html">HTTPS</a></li><li><a  
href="content-type-and-markup.html">Content Type and Markup</a></li><li><a  
href="persistent-page-data.html">Persistent Page Data</a></li><li><a  
href="session-storage.html">Session Storage</a><ul 
class="childpages-macro"><li><a  href="clustering-issues.html">Clustering 
Issues</a></l
 i></ul></li><li><a  href="injection.html">Injection</a></li><li><a  
href="environmental-services.html">Environmental Services</a></li><li><a  
href="css.html">CSS</a></li><li><a  href="assets.html">Assets</a></li><li><a  
href="forms-and-validation.html">Forms and Validation</a></li><li><a  
href="beaneditform-guide.html">BeanEditForm Guide</a></li><li><a  
href="uploading-files.html">Uploading Files</a></li><li><a  
href="logging.html">Logging</a></li><li><a  
href="unit-testing-pages-or-components.html">Unit testing pages or 
components</a></li><li><a  href="integration-testing.html">Integration 
Testing</a></li><li><a  href="development-dashboard.html">Development 
Dashboard</a></li><li><a  href="modules.html">Modules</a><ul 
class="childpages-macro"><li><a  href="built-in-modules.html">Built In 
Modules</a></li><li><a  href="third-party-modules.html">Third Party 
Modules</a></li></ul></li><li><a  href="ioc.html">IOC</a><ul 
class="childpages-macro"><li><a  href="tapestry-ioc-overview.html">T
 apestry IoC Overview</a></li><li><a  href="tapestry-ioc-modules.html">Tapestry 
IoC Modules</a></li><li><a  href="defining-tapestry-ioc-services.html">Defining 
Tapestry IOC Services</a></li><li><a  href="service-advisors.html">Service 
Advisors</a></li><li><a  href="tapestry-ioc-decorators.html">Tapestry IoC 
Decorators</a></li><li><a  href="tapestry-ioc-configuration.html">Tapestry IoC 
Configuration</a></li><li><a  href="case-insensitivity.html">Case 
Insensitivity</a></li><li><a  href="autoloading-modules.html">Autoloading 
Modules</a></li><li><a  href="service-implementation-reloading.html">Service 
Implementation Reloading</a></li><li><a  
href="ordering-by-constraints.html">Ordering by Constraints</a></li><li><a  
href="symbols.html">Symbols</a></li><li><a  
href="chainbuilder-service.html">ChainBuilder Service</a></li><li><a  
href="pipelinebuilder-service.html">PipelineBuilder Service</a></li><li><a  
href="shadowbuilder-service.html">ShadowBuilder Service</a></li><li><a  
href="strategy
 builder-service.html">StrategyBuilder Service</a></li><li><a  
href="injection-in-detail.html">Injection in Detail</a></li><li><a  
href="object-providers.html">Object Providers</a></li><li><a  
href="service-serialization.html">Service Serialization</a></li><li><a  
href="type-coercion.html">Type Coercion</a></li><li><a  
href="starting-the-ioc-registry.html">Starting the IoC Registry</a></li><li><a  
href="registry-startup.html">Registry Startup</a></li><li><a  
href="parallel-execution.html">Parallel Execution</a></li><li><a  
href="logging-in-tapestry.html">Logging in Tapestry</a></li><li><a  
href="using-jsr-330-standard-annotations.html">Using JSR 330 standard 
annotations</a></li><li><a  href="operation-tracker.html">Operation 
Tracker</a></li></ul></li><li><a  href="hibernate-core.html">Hibernate - 
Core</a><ul class="childpages-macro"><li><a  
href="hibernate-core-conf.html">Hibernate - Core - Conf</a></li><li><a  
href="hibernate.html">Hibernate</a></li><li><a  href="hibernate-user-guid
 e.html">Hibernate User Guide</a></li></ul></li><li><a  
href="integrating-with-spring-framework.html">Integrating with Spring 
Framework</a></li><li><a  href="bean-validation.html">Bean 
Validation</a></li><li><a  href="component-report.html">Component 
Report</a></li><li><a  href="aliases.html">Aliases</a></li><li><a  
href="integrating-with-jpa.html">Integrating with JPA</a></li><li><a  
href="client-side-javascript.html">Client-Side JavaScript</a><ul 
class="childpages-macro"><li><a  href="javascript-modules.html">JavaScript 
Modules</a></li><li><a  href="coffeescript.html">CoffeeScript</a></li><li><a  
href="typescript.html">TypeScript</a></li><li><a  
href="legacy-javascript.html">Legacy JavaScript</a></li><li><a  
href="ajax-and-zones.html">Ajax and Zones</a></li></ul></li></ul></li><li><a  
href="cheat-sheets.html">Cheat Sheets</a><ul class="childpages-macro"><li><a  
href="application-module-class-cheat-sheet.html">Application Module Class Cheat 
Sheet</a></li><li><a  href="component-chea
 t-sheet.html">Component Cheat Sheet</a></li><li><a  
href="tapestry-for-jsf-users.html">Tapestry for JSF 
Users</a></li></ul></li><li><a  href="cookbook.html">Cookbook</a><ul 
class="childpages-macro"><li><a  href="default-parameter.html">Default 
Parameter</a></li><li><a  href="overriding-exception-reporting.html">Overriding 
Exception Reporting</a></li><li><a  href="error-page-recipe.html">Error Page 
Recipe</a></li><li><a  href="supporting-informal-parameters.html">Supporting 
Informal Parameters</a></li><li><a  href="component-libraries.html">Component 
Libraries</a></li><li><a  href="switching-cases.html">Switching 
Cases</a></li><li><a  href="enum-parameter-recipe.html">Enum Parameter 
Recipe</a></li><li><a  href="extending-the-if-component.html">Extending the If 
Component</a></li><li><a  
href="meta-programming-page-content.html">Meta-Programming Page 
Content</a></li><li><a  href="using-select-with-a-list.html">Using Select With 
a List</a></li><li><a  href="ioc-cookbook.html">IoC cookbo
 ok</a><ul class="childpages-macro"><li><a  
href="ioc-cookbook-basic-services-and-injection.html">IoC Cookbook - Basic 
Services and Injection</a></li><li><a  
href="ioc-cookbook-overriding-ioc-services.html">IoC Cookbook - Overriding IoC 
Services</a></li><li><a  href="ioc-cookbook-patterns.html">IoC Cookbook - 
Patterns</a></li><li><a  href="ioc-cookbook-service-configurations.html">IoC 
cookbook - Service Configurations</a></li></ul></li><li><a  
href="performance-and-clustering.html">Performance and 
Clustering</a></li><li><a  href="google-app-engine.html">Google App 
Engine</a></li></ul></li><li><a  
href="frequently-asked-questions.html">Frequently Asked Questions</a><ul 
class="childpages-macro"><li><a  href="general-questions.html">General 
Questions</a></li><li><a  href="templating-and-markup-faq.html">Templating and 
Markup FAQ</a></li><li><a  href="page-and-component-classes-faq.html">Page And 
Component Classes FAQ</a></li><li><a  
href="forms-and-form-components-faq.html">Forms and Fo
 rm Components FAQ</a></li><li><a  href="beaneditform-faq.html">BeanEditForm 
FAQ</a></li><li><a  href="link-components-faq.html">Link Components 
FAQ</a></li><li><a  href="component-events-faq.html">Component Events 
FAQ</a></li><li><a  href="javascript-faq.html">JavaScript FAQ</a></li><li><a  
href="ajax-components-faq.html">Ajax Components FAQ</a></li><li><a  
href="injection-faq.html">Injection FAQ</a></li><li><a  
href="tapestry-inversion-of-control-faq.html">Tapestry Inversion of Control 
FAQ</a></li><li><a  href="security-faq.html">Security FAQ</a></li><li><a  
href="integration-with-existing-applications.html">Integration with existing 
applications</a></li><li><a  href="request-processing-faq.html">Request 
Processing FAQ</a></li><li><a  
href="limitations.html">Limitations</a></li><li><a  
href="specific-errors-faq.html">Specific Errors FAQ</a></li><li><a  
href="hibernate-support-faq.html">Hibernate Support FAQ</a></li><li><a  
href="maven-support-faq.html">Maven Support FAQ</a></li><li
 ><a  href="release-upgrade-faq.html">Release Upgrade 
 >FAQ</a></li></ul></li><li><a  href="release-notes.html">Release Notes</a><ul 
 >class="childpages-macro"><li><a  href="how-to-upgrade.html">How to 
 >Upgrade</a></li><li><a  href="release-notes-50.html">Release Notes 
 >5.0</a></li><li><a  href="release-notes-51.html">Release Notes 
 >5.1</a></li><li><a  href="release-notes-52.html">Release Notes 5.2</a><ul 
 >class="childpages-macro"><li><a  href="release-notes-520.html">Release Notes 
 >5.2.0</a></li><li><a  href="release-notes-521.html">Release Notes 
 >5.2.1</a></li><li><a  href="release-notes-522.html">Release Notes 
 >5.2.2</a></li><li><a  href="release-notes-523.html">Release Notes 
 >5.2.3</a></li><li><a  href="release-notes-524.html">Release Notes 
 >5.2.4</a></li><li><a  href="release-notes-525.html">Release Notes 
 >5.2.5</a></li><li><a  href="release-notes-526.html">Release Notes 
 >5.2.6</a></li></ul></li><li><a  href="release-notes-53.html">Release Notes 
 >5.3</a></li><li><a  href="release-notes-531.html
 ">Release Notes 5.3.1</a></li><li><a  href="release-notes-532.html">Release 
Notes 5.3.2</a></li><li><a  href="release-notes-533.html">Release Notes 
5.3.3</a></li><li><a  href="release-notes-534.html">Release Notes 
5.3.4</a></li><li><a  href="release-notes-535.html">Release Notes 
5.3.5</a></li><li><a  href="release-notes-536.html">Release Notes 
5.3.6</a></li><li><a  href="release-notes-537.html">Release Notes 
5.3.7</a></li><li><a  href="release-notes-538.html">Release Notes 
5.3.8</a></li><li><a  href="release-notes-54.html">Release Notes 
5.4</a></li><li><a  href="release-notes-541.html">Release Notes 
5.4.1</a></li><li><a  href="release-notes-542.html">Release Notes 
5.4.2</a></li><li><a  href="release-notes-543.html">Release Notes 
5.4.3</a></li><li><a  href="release-notes-544.html">Release Notes 
5.4.4</a></li><li><a  href="release-notes-545.html">Release Notes 
5.4.5</a></li><li><a  href="release-notes-550.html">Release Notes 
5.5.0</a></li></ul></li><li><a  href="javascript-rewrite-in-
 54.html">JavaScript Rewrite in 5.4</a></li><li><a  
href="support.html">Support</a></li><li><a  
href="developer-information.html">Developer Information</a><ul 
class="childpages-macro"><li><a  
href="building-tapestry-from-source.html">Building Tapestry from 
Source</a></li><li><a  href="confluence-site-setup.html">Confluence Site 
Setup</a><ul class="childpages-macro"><li><a  
href="since-and-deprecated-user-macros.html">Since and Deprecated User 
Macros</a></li></ul></li><li><a  href="developer-bible.html">Developer 
Bible</a></li><li><a  href="release-process.html">Release 
Process</a></li><li><a  href="the-tapestry-jail.html">The tapestry 
jail</a></li><li><a  href="version-numbers.html">Version 
Numbers</a></li></ul></li></ul></div>
 
 
 <p>Welcome to the Tapestry 5 Documentation, a collection of guides to teach 
beginners the basics and help experienced developers deepen their understanding 
of Tapestry's power.</p><h1 
id="Documentation-Highlights">Highlights</h1><p>These are the most useful 
starting points for common needs.</p><div class="table-wrap"><table 
class="wrapped confluenceTable"><colgroup span="1"><col span="1"><col 
span="1"></colgroup><tbody><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a  
href="introduction.html">Introduction</a></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>An overview of Tapestry's general approach and 
philosophy</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a  href="getting-started.html">Getting 
Started</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A quick 
guide to creating your first Tapestry project, using Maven</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a  
href="tapestry-tutorial.html">Tap
 estry Tutorial</a></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Picks up where <em>Getting Started</em> leaves off, 
explaining in greater detail how Tapestry works</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a  href="user-guide.html">User 
Guide</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Detailed 
articles on every Tapestry feature</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a  href="community.html">Community</a></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Getting support, mailing lists, 
JIRA, outside resources, and access to the source</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a  
href="cookbook.html">Cookbook</a></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Guides to doing common things with 
Tapestry</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong><a  
href="frequently-asked-questions.html">FAQ</a></strong></p><
 /td><td colspan="1" rowspan="1" class="confluenceTd"><p>A quick place to check 
for common problems and solutions</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a  href="component-cheat-sheet.html">Component Cheat 
Sheet</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A concise 
guide to component classes, methods and annotations</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://refcardz.dzone.com/refcardz/apache-tapestry-50?oid=hom7948"; 
rel="nofollow">Refcard</a></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>A color, six page foldout guide to Tapestry 5.0 
(PDF)</p></td></tr></tbody></table></div><h1 
id="Documentation-APIandComponentReference">API and Component 
Reference</h1><div class="table-wrap"><table class="relative-table wrapped 
confluenceTable" style="width: 30.0165%;"><colgroup span="1"><col span="1" 
style="width: 30.7309%;"><col span="1" style="width: 8.62385%;"><col 
 span="1" style="width: 8.62385%;"><col span="1" style="width: 8.62385%;"><col 
span="1" style="width: 11.9083%;"><col span="1" style="width: 12.6239%;"><col 
span="1" style="width: 18.8654%;"></colgroup><tbody><tr><th colspan="1" 
rowspan="1" class="confluenceTh"><p>API (Javadoc):</p></th><td colspan="1" 
rowspan="1" class="confluenceTd"><p>5.0<sup>1</sup></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>5.1<sup>1</sup></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>5.2<sup>1</sup></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://tapestry.apache.org/5.3.7/apidocs/";>5.3.8</a></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><a  class="external-link" 
href="http://tapestry.apache.org/5.4";>5.4</a></td><td colspan="1" rowspan="1" 
class="confluenceTd"><strong><a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs";>5.5</a></strong></td></tr><tr><th
 colspan="1" rowspan="1" class="confluenceTh">
 <p>Component Reference:</p></th><td colspan="1" rowspan="1" 
class="confluenceTd"><p>5.0<sup>1</sup></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>5.1<sup>1</sup></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>5.2<sup>1</sup></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><em><span class="confluence-link">see 
5.5</span></em></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><em>see 5.5</em></td><td colspan="1" rowspan="1" 
class="confluenceTd"><a  href="component-reference.html"><strong>5.5</strong> 
(current)</a></td></tr><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Release Notes:</p></th><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a  href="release-notes-50.html">5.0</a></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><a  
href="release-notes-51.html">5.1</a></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><a  href="release-notes-52.html">5.2</a></p></td><td 
colspan="1" rowspan="1" class="conflue
 nceTd"><p><a  href="release-notes-538.html">5.3.8</a></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><a  
href="release-notes-54.html">5.4</a></td><td colspan="1" rowspan="1" 
class="confluenceTd"><strong><a  
href="release-notes-550.html">5.5</a></strong></td></tr></tbody></table></div><p><sup>1</sup>
 needs to be built manually from archived sources at <a  class="external-link" 
href="http://archive.apache.org/dist/tapestry/";>http://archive.apache.org/dist/tapestry/</a>.</p><h1
 id="Documentation-UserGuide">User Guide</h1><p><span 
class="confluence-anchor-link" id="Documentation-userguide"></span>The <a  
href="user-guide.html">User Guide</a> consists of over 75 pages of detailed 
information on the concepts behind Tapestry and instructions on how to use this 
powerful tool. Highlights include:</p><ul><li class="confluence-link"><a  
href="client-side-javascript.html">Client-Side JavaScript</a> and <a  
href="ajax-and-zones.html">Ajax and Zones</a> describe Tapestry's built-in supp
 ort for dynamic in-page behavior.</li><li><a  
href="integrating-with-spring-framework.html">Integrating with Spring 
Framework</a> describes how to integrate Spring into your Tapestry 
application.</li><li><a  href="hibernate.html">Tapestry/Hibernate Integration 
Library</a> provides out-of-the-box support for using Hibernate 3.</li><li><a  
href="bean-validation.html">JSR 303: Bean Validation</a> shows how to use 
standard annotations for validation</li><li><a  
href="integration-testing.html">Integration Testing</a> shows how to test your 
application with Selenium.</li></ul><p><a  href="user-guide.html">More 
topics</a>...</p><h1 
id="Documentation-BlogsbyTapestryDevelopersandtheCommunity">Blogs by Tapestry 
Developers and the Community</h1><ul><li><a  class="external-link" 
href="http://tapestryjava.blogspot.com/"; rel="nofollow">Tapestry Central</a> is 
Howard Lewis Ship's blog. As the creator of Tapestry, he provides valuable 
insights into Tapestry's latest features and future directions.<
 /li><li><a  class="external-link" href="http://blog.tapestry5.de/"; 
rel="nofollow">Igor Drobiazko's blog</a> (committer &amp; PMC) contains news on 
Tapestry development and will guide you through some of the most exciting parts 
of Tapestry.</li><li><a  class="external-link" 
href="http://tawus.wordpress.com/"; rel="nofollow">Java Magic</a> (by Taha 
Hafeez, committer) has a series of tutorials illustrating some of the more 
advanced Tapestry and Plastic features and techniques.</li></ul><h1 
id="Documentation-BooksonTapestry">Books on Tapestry</h1><p>There are at least 
9 published <a  href="books.html">books on Tapestry</a>, including three on 
Tapestry 5.</p><h1 id="Documentation-TapestryPresentations">Tapestry 
Presentations</h1><ul><li>Mark Shead's <a  class="external-link" 
href="http://blog.markshead.com/900/tapestry-5-10-minute-demo/"; 
rel="nofollow">10 Minute Demo</a></li><li>H. L. Ship's <a  
class="external-link" href="https://www.youtube.com/watch?v=5BGt7eMFC20"; 
rel="nofollow">Tapest
 ry 5.4 - Bootstrap-enhanced Exception Reporting</a></li><li><a  
class="external-link" 
href="http://blog.tapestry5.de/wp-content/uploads/2010/06/JSF-2.0-vs-Tapestry-5.pdf";
 rel="nofollow">JavaServer Faces 2.0 vs. Tapestry 5</a> (PDF) A Head-to-Head 
Comparison by Igor Drobiazko at Jazoon 2010</li><li><a  class="external-link" 
href="http://www.parleys.com/#st=5&amp;sl=5&amp;id=1700"; 
rel="nofollow">Tapestry 5: Java power, Scripting Ease</a> (VIDEO) by Howard 
Lewis Ship at Devoxx 2009</li></ul><p><a  href="presentations.html">More 
presentations</a> ...</p><h1 id="Documentation-TapestryWikis">Tapestry 
Wikis</h1><ul><li><a  class="external-link" 
href="http://wiki.apache.org/tapestry/FrontPage";>Tapestry Community Wiki</a> 
(Moin Moin) contains a lot of user-generated information on different Tapestry 
use cases.</li><li><a  
href="https://cwiki.apache.org/confluence/x/VCFkAQ";>Documentation Source 
wiki</a> (Confluence) &#8211; the wiki used as the content editor for the 
official Tapestry documen
 tation</li></ul><h1 id="Documentation-Gettinghelp">Getting help</h1><p>The 
primary method of support is the <a  href="mailing-lists.html">Tapestry Mailing 
Lists</a>.</p><p>In addition, there are occasionally questions and answers 
about Tapestry at <a  class="external-link" 
href="http://stackoverflow.com/questions/tagged/tapestry"; rel="nofollow">Stack 
Overflow</a>.</p><h1 id="Documentation-TheDeveloperCorner">The Developer 
Corner</h1><p><a  href="developer-information.html">Developer Information</a> 
gives information needed by the Tapestry developers</p><p><br 
clear="none"></p></div>

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 Apr 26 
21:22:55 2020
@@ -77,7 +77,7 @@
 
       <div id="content">
                 <div id="ConfluenceContent"><p>The layout of the project 
follows the sensible standards promoted by Maven:</p><ul><li>Java source files 
under <code>src/main/java</code></li><li>Web application files under 
<code>src/main/webapp</code> (including 
<code>src/main/webapp/WEB-INF</code>)</li><li>Java test sources under 
<code>src/test/java</code></li><li>Non-code resources (including Tapestry page 
and component templates) under <code>src/main/resources</code> and 
<code>src/test/resources</code></li></ul><p>Let's look at what Maven has 
created from the archetype, starting with the web.xml configuration 
file:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>src/main/webapp/WEB-INF/web.xml</b></div><div class="codeContent 
panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">&lt;?xml version="1.0" 
encoding="UTF-8"?&gt;
 &lt;!DOCTYPE web-app
         PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
         "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;
@@ -117,7 +117,7 @@ of where to look for pages, components a
 &lt;/web-app&gt;
 </pre>
 </div></div><p>This is short and sweet: you can see that the package name you 
provided earlier shows up as the <code>tapestry.app-package</code> context 
parameter; the TapestryFilter instance will use this information to locate the 
Java classes for pages and components.</p><p>Tapestry operates as a <em>servlet 
filter</em> rather than as a traditional <em>servlet</em>. In this way, 
Tapestry has a chance to intercept all incoming requests, to determine which 
ones apply to Tapestry pages (or other resources). The net effect is that you 
don't have to maintain any additional configuration for Tapestry to operate, 
regardless of how many pages or components you add to your 
application.</p><p>Much of the rest of web.xml is configuration to match 
Tapestry execution modes against module classes. An execution mode defines how 
the application is being run: the default execution mode is "production", but 
the web.xml defines two additional modes: "development" and "qa" (for "Quality 
Assurance"). 
 The module classes indicated will be loaded for those execution modes, and can 
change the configuration of the application is various ways. We'll come back to 
execution modes and module classes later in the tutorial.</p><p>Tapestry pages 
minimally consist of an ordinary Java class plus a component template 
file.</p><p>In the root of your web application, a page named "Index" will be 
used for any request that specifies no additional path after the context 
name.</p><h1 id="ExploringtheProject-IndexJavaClass">Index Java 
Class</h1><p>Tapestry has very specific rules for where page classes go. 
Tapestry adds a sub-package, "pages", to the root application package 
("com.example.tutorial1"); the Java classes for pages goes there. Thus the full 
Java class name is 
<code>com.example.</code>tutorial<code>1.pages.Index</code>.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 
1px;"><b>src/main/java/com/example/tutorial/p
 ages/Index.java</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">package com.example.tutorial1.pages;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">package 
com.example.tutorial1.pages;
 
 import org.apache.tapestry5.Block;
 import org.apache.tapestry5.EventContext;
@@ -189,7 +189,7 @@ public class Index
 }
 </pre>
 </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.tutorial1.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 fro
 m; 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  
class="external-link" href="http://en.wikipedia.org/wiki/Model_view_controller"; 
rel="nofollow">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 Ja
 va 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.</e
 m></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/tutorial1/pages/Index.tml</b></div><div 
class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">&lt;html t:type="layout" title="tutorial1 Index"
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">&lt;html t:type="layout" 
title="tutorial1 Index"
       xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd";
       xmlns:p="tapestry:parameter"&gt;
 
@@ -232,28 +232,28 @@ public class Index
 
 &lt;/html&gt;</pre>
 </div></div><div class="confluence-information-macro 
confluence-information-macro-tip"><span class="aui-icon aui-icon-small 
aui-iconfont-approve confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>You <strong>do</strong> 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. (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="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>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 commonly defined:</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;">  
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd";
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">  
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd";
   xmlns:p="tapestry:parameter"
 </pre>
 </div></div><p>The first namespace, "t:", it used to identify 
Tapestry-specific elements and attributes. Although there is an XSD (that is, a 
XML schema definition), it is incomplete (for reasons explained 
shortly).</p><p>The second namespace, "p:", is a way of marking a chunk of the 
template as a parameter passed into another component. We'll expand on that 
shortly.</p><p>A Tapestry component template consists mostly of standard XHTML 
that will pass down to the client web browser unchanged. The dynamic aspects of 
the template are represented by <em>components</em> and 
<em>expansions</em>.</p><h1 
id="ExploringtheProject-ExpansionsinTemplates">Expansions in 
Templates</h1><p>Let's start with expansions. Expansions are an easy way of 
including some dynamic output when rendering the page. By default, an expansion 
refers to a JavaBeans property of the page:</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;p&gt;The current time is: ${currentTime}&lt;/p&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">  &lt;p&gt;The current time 
is: ${currentTime}&lt;/p&gt;
 </pre>
 </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><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"><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 eithe
 r 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()</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">
-<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">    &lt;p&gt;${message:greeting}&lt;/p&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">    
&lt;p&gt;${message:greeting}&lt;/p&gt;
 </pre>
 </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">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">greeting=Welcome to Tapestry 5!  We hope that this 
project template will get you going in style.
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">greeting=Welcome to 
Tapestry 5!  We hope that this project template will get you going in style.
 </pre>
 </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 &lt;html&gt; element to represent the application's Layout 
component.</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;html t:type="layout" ...&gt; 
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">&lt;html t:type="layout" 
...&gt; 
   ...
 &lt;/html&gt;
 </pre>
 </div></div><p>But for the EventLink component, we've used an element in the 
Tapestry namespace:</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;t:eventlink page="Index"&gt;refresh 
page&lt;/t:eventlink&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">&lt;t:eventlink 
page="Index"&gt;refresh page&lt;/t:eventlink&gt;
 </pre>
 </div></div><p>Which form you select is a matter of choice. In the vast 
majority of cases, they are exactly equivalent.</p><p>As elsewhere, case is 
ignored. Here the types ("layout" and "eventlink") were in all lower case; the 
actual class names are Layout and EventLink. Further, Tapestry "blends" the 
core library components in with the components defined by this application; 
thus type "layout" is mapped to application component class 
com.example.tutorial.components.Layout, but "eventlink" is mapped to Tapestry's 
built-in org.apache.tapestry5.corelib.components.EventLink 
class.</p><p>Tapestry components are configured using parameters; for each 
component, there is a set of parameters, each with a specific type and purpose. 
Some parameters are required, others are optional. Attributes of the element 
are used to <em>bind</em> parameters to specific literal values, or to page 
properties. Tapestry is flexible here as well; you can always place an 
attribute in the Tapestry namespace (usi
 ng the "t:" prefix), but in most cases, this is unnecessary.</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;html t:type="layout" title="tutorial1 Index"
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">&lt;html t:type="layout" 
title="tutorial1 Index"
       p:sidebarTitle="Framework Version" ...
 </pre>
 </div></div><p>This binds two parameters, <code>title</code> and 
<code>sidebarTitle</code>, of the Layout component to the literal strings 
"tutorial1 Index" and "Framework Version", respectively.</p><p>The Layout 
component will actually provide the bulk of the HTML ultimately sent to the 
browser; we'll look at its template in a later chapter. The point is, the 
page's template is integrated into the Layout component's template. The 
following diagram shows how parameters passed to the Layout component end up 
rendered in the final page:</p><p>    
@@ -261,21 +261,21 @@ public class Index
 
 
 
-<span class="gliffy-container" id="gliffy-container-24346949-8953" 
data-fullwidth="913" data-ceoid="24188263" 
data-edit="${diagramEditLink.getLinkUrl()}" 
data-full="${diagramZoomLink.getLinkUrl()}" data-filename="Templates and 
Parameters">
+<span class="gliffy-container" id="gliffy-container-24346949-4330" 
data-fullwidth="913" data-ceoid="24188263" 
data-edit="${diagramEditLink.getLinkUrl()}" 
data-full="${diagramZoomLink.getLinkUrl()}" data-filename="Templates and 
Parameters">
 
-    <map id="gliffy-map-24346949-504" name="gliffy-map-24346949-504"></map>
+    <map id="gliffy-map-24346949-5749" name="gliffy-map-24346949-5749"></map>
 
-    <img class="gliffy-image gliffy-image-border" 
id="gliffy-image-24346949-8953" 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-504">
+    <img class="gliffy-image gliffy-image-border" 
id="gliffy-image-24346949-4330" 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-5749">
 
-    <map class="gliffy-dynamic" id="gliffy-dynamic-map-24346949-8953" 
name="gliffy-dynamic-map-24346949-8953"></map>
+    <map class="gliffy-dynamic" id="gliffy-dynamic-map-24346949-4330" 
name="gliffy-dynamic-map-24346949-4330"></map>
 </span>
 
 
 </p><p>The interesting point here (and this is an advanced concept in 
Tapestry, one we'll return to later) is that we can pass a chunk of the 
Index.tml template to the Layout component as the <code>sidebar</code> 
parameter. That's what the tapestry:parameter namespace (the "p:" prefix) is 
for; the element name is matched against a parameter of the component and the 
entire block of the template is passed into the Layout component ... which 
decides where, inside <em>its</em> template, that block gets rendered.</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;t:eventlink event="complete" class="btn 
btn-default"&gt;Complete&amp;raquo;&lt;/t:eventlink&gt;
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">&lt;t:eventlink 
event="complete" class="btn 
btn-default"&gt;Complete&amp;raquo;&lt;/t:eventlink&gt;
 </pre>
 </div></div><p>This time, it's the <code>page</code> parameter of the PageLink 
component that is bound, to the literal value "Index" (which is the name of 
this page). This gets rendered as a URL that re-renders the page, which is how 
the current time gets updated. You can also create links to other pages in the 
application and, as we'll see in later chapters, attach additional information 
to the URL beyond just the page name.</p><h1 
id="ExploringtheProject-AMagicTrick">A Magic Trick</h1><p>Now it's time for a 
magic trick. Edit Index.java and change the <code>getCurrentTime()</code> 
method to:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>Index.java (partial)</b></div><div class="codeContent panelContent 
pdl">
-<pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">  public String getCurrentTime()
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml; 
gutter: false; theme: Default" data-theme="Default">  public String 
getCurrentTime()
   {
     return "A great day to learn Tapestry";
   }

Added: websites/production/tapestry/content/footerv2.html
==============================================================================
--- websites/production/tapestry/content/footerv2.html (added)
+++ websites/production/tapestry/content/footerv2.html Sun Apr 26 21:22:55 2020
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+       
+       <!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<html>
+<head>
+  <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+  <meta http-equiv="x-ua-compatible" content="IE=9">
+  <meta name="viewport" content="width=device-width, initial-scale=1"> 
+  <title>
+          FooterV2 -- Apache Tapestry
+      </title>
+  <link type="text/css" rel="stylesheet" href="/resources/space.css" />
+
+  
+  <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
+
+</head>
+
+<body>
+
+  <div class="wrapper bs">
+
+        <div id="navigation"><div class="nav"><ul class="alternate"><li><a  
href="index.html">Home</a></li><li><a  href="getting-started.html">Getting 
Started</a></li><li><a  href="documentation.html">Documentation</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">About</a></li><li><a  class="external-link" 
href="http://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="community.html">Community</a></li><li><a  class="external-link" 
href="http://www.apache.org/security/";>Security</a></li><li><a  
class="external-link" href="http://www.apache.org/";>Apache</a></li><li><a  
class="external-link" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  class="external-link" 
href="http://www.apache.org/foundation/thanks.html";>Thanks</a></li></ul></div>
+
+</div>
+
+          <div id="top">
+            <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="https://tapestry.apache.org/search.html";>
+  <input type="text" name="q">
+  <input type="submit" value="Search">
+</form>
+
+</div>
+
+
+<div class="emblem" style="float:left"><p><span 
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image 
confluence-external-resource" 
src="https://tapestry.apache.org/images/tapestry_small.png"; 
data-image-src="https://tapestry.apache.org/images/tapestry_small.png";></span></p></div>
+
+
+<div class="title" style="float:left; margin: 0 0 0 3em"><h1 
id="SmallBanner-PageTitle">FooterV2</h1></div>
+
+</div>
+      <div class="clearer"></div>
+      </div>
+
+      <div class="clearer"></div>
+
+      <div id="breadcrumbs">
+                <a href="index.html">Apache Tapestry</a>&nbsp;&gt;&nbsp;<a 
href="index.html">Index</a>&nbsp;&gt;&nbsp;<a href="footerv2.html">FooterV2</a>
+        <a class="edit" title="Edit this page (requires approval -- just ask 
on the mailing list)" 
href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=152112579";>edit</a>
+      </div>
+
+      <div id="content">
+                <div id="ConfluenceContent"><p><footer class="py-3"> 
+  <div class="container-fluid">
+    <div class="container">
+      <div class="row">
+        <div class="col-4 col-lg-2">
+          <span class="font-weight-bold">Apache Tapestry</span>
+          <ul><li><a  href="index.html">Home</a></li><li><a  
href="download.html">Download</a></li><li><a  
href="about.html">Team</a></li><li><a  
href="https://www.apache.org/licenses/LICENSE-2.0";>License</a></li></ul>
+          <span class="font-weight-bold">Documentation</span>
+          <ul><li><a  href="introduction.html">Introduction</a></li><li><a  
href="principles.html">Principles</a></li><li><i class="fas fa-play"></i> <a  
href="getting-started.html">Getting Started</a></li><li><i class="fas 
fa-play"></i> <a  href="user-guide.html">User Guide</a></li><li><i class="fas 
fa-book"></i> <a  href="documentation.html">Docs</a></li><li><i class="fas 
fa-book"></i> <a  href="component-reference.html">Component 
Reference</a></li><li><i class="fas fa-book"></i> <a  
href="current/apidocs">Apidocs</a></li><li><a  
href="frequently-asked-questions.html">FAQ</a></li></ul>
+        </div>
+        <div class="col-4 col-lg-2">
+          <span class="font-weight-bold">Community</span>
+          <ul><li><i class="fas fa-envelope-open-text"></i> <a  
href="community.html">Mailing Lists</a></li><li><i class="fab 
fa-stack-overflow"> </i> <a  
href="https://stackoverflow.com/questions/tagged/tapestry";>StackOverflow</a></li><li><a
  href="support.html">Support</a></li><li><a  href="community.html">Getting 
Involved</a></li><li><a  
href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=$page.id";
 title="Edit this page (requires approval, just ask on the mailing list)">Edit 
this page</a></li></ul>
+          <span class="font-weight-bold">Social</span>
+          <ul><li><i class="fab fa-twitter"></i> <a  
href="https://twitter.com/ApacheTapestry";>@ApacheTapestry</a></li><li><i 
class="fas fa-hashtag"></i> <a  
href="https://twitter.com/hashtag/tapestry5";>#tapestry5</a></li></ul>
+          <span class="font-weight-bold">Development</span>
+          <ul><li><i class="fab fa-git"></i> <a  
href="https://gitbox.apache.org/repos/asf?p=tapestry-5.git";>Source 
Code</a></li><li><i class="fab fa-jira"></i> <a  
href="https://issues.apache.org/jira/browse/TAP5";>Issues</a></li></ul>
+        </div>
+        <div class="col-4 col-lg-2">
+          <span class="font-weight-bold">Apache</span>
+          <ul><li><a  href="https://www.apache.org/";>About 
Apache</a></li><li><a  
href="https://apachecon.com/?ref=royale.apache.org";>Events</a></li><li><a  
href="https://www.apache.org/foundation/sponsorship.html";>Sponsorship</a></li><li><a
  href="https://www.apache.org/licenses/LICENSE-2.0";>License</a></li><li><a  
href="https://www.apache.org/security/";>Security</a></li><li><a  
href="https://www.apache.org/foundation/thanks.html";>Thanks!</a></li></ul>
+        </div>
+        <div class="col-md-12 col-lg-6 clearfix">
+          <span class="font-weight-bold d-block">About us</span>
+          <p class="float-right ml-3 mb-0"><img 
src="images/apache-tapestry-icon-light.svg" width="100" alt="Apache Tapestry" 
title="Apache Tapestry"></p>
+          <p><a  href="https://tapestry.apache.org/";>Apache 
Tapestry&#8482;</a> is a open-source component-oriented framework for creating 
dynamic, robust, highly scalable web applications in Java.</p>
+          <p>Tapestry complements and builds upon the standard Java Servlet 
API, and so it works in any servlet container or application server.</p>
+          <p class="float-right ml-3 mb-0"><img 
src="images/apache-powered-by.svg" width="100" alt="Apache PoweredBy" 
title="Apache PoweredBy"></p>
+          <p><a  href="https://tapestry.apache.org/";>Apache 
Tapestry&#8482;</a>, <a  href="https://www.apache.org/";>Apache&#8482;</a> and 
the <a  href="https://www.apache.org/foundation/press/kit/";>Apache feather 
logo&#8482;</a>
+            are trademarks of The Apache Software Foundation. All other marks 
mentioned may be trademarks or registered trademarks of their respective 
owners.</p>
+          </div></div></div></div></footer></p>
+        </div>
+      
+      <div class="row">
+        <div class="col-12">
+          Copyright &#169; 2020 The Apache Software Foundation, Licensed under 
the <a  href="https://www.apache.org/licenses/LICENSE-2.0";>Apache License, 
Version 2.0</a>.
+        </div>
+      </div>
+    
+  
+<br clear="none">
+      </div>
+
+      <div class="clearer"></div>
+    
+    <div id="footer">
+            <div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache 
feather logo, and the Apache Tapestry project logo are trademarks of The Apache 
Software Foundation.<br clear="none">
+</p><p><script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-400821-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; 
ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(ga, s);
+  })();
+</script></p><p></p></div>
+    </div>
+
+    <div id="comments_thread"></div>
+    <script type="text/javascript" 
src="https://comments.apache.org/show_comments.lua?site=tapestry&amp;page=http://tapestry.apache.org/footerv2.html";
 async="true">
+    </script>
+    <noscript>
+      <iframe width="100%" height="500" 
src="https://comments.apache.org/iframe.lua?site=tapestry&amp;page=http://tapestry.apache.org/footerv2.html";></iframe>
+    </noscript>
+
+  </div>
+
+</body>
+</html>

Modified: 
websites/production/tapestry/content/forms-and-form-components-faq.html
==============================================================================
--- websites/production/tapestry/content/forms-and-form-components-faq.html 
(original)
+++ websites/production/tapestry/content/forms-and-form-components-faq.html Sun 
Apr 26 21:22:55 2020
@@ -78,11 +78,11 @@
 
       <div id="content">
                 <div id="ConfluenceContent"><h1 
id="FormsandFormComponentsFAQ-FormsandFormComponents">Forms and Form 
Components</h1><p>Main article: <a  href="forms-and-validation.html">Forms and 
Validation</a></p><h2 
id="FormsandFormComponentsFAQ-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1587536393779 {padding: 0px;}
-div.rbtoc1587536393779 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1587536393779 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1587935966276 {padding: 0px;}
+div.rbtoc1587935966276 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1587935966276 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1587536393779">
+/*]]>*/</style></p><div class="toc-macro rbtoc1587935966276">
 <ul class="toc-indentation"><li><a  
href="#FormsandFormComponentsFAQ-Whatisthet:formdatahiddenfieldfor?">What is 
the t:formdata hidden field for?</a></li><li><a  
href="#FormsandFormComponentsFAQ-HowdoIchangethelabelforafieldonthefly?">How do 
I change the label for a field on the fly?</a></li><li><a  
href="#FormsandFormComponentsFAQ-Tapestryfocusesonthewrongfieldinmyform,howdoIfixthat?">Tapestry
 focuses on the wrong field in my form, how do I fix that?</a></li></ul>
 </div><h2 
id="FormsandFormComponentsFAQ-Whatisthet:formdatahiddenfieldfor?">What is the 
<code>t:formdata</code> hidden field for?</h2><p>In Tapestry, rendering a form 
can be a complicated process; inside the body of the Form component are many of 
field components: TextField, Select, TextArea, and so forth. Each of these must 
pull data out of your data model and convert it to the string form used inside 
the client web browser. In addition, JavaScript to support client-side 
validation must be generated. This can be further complicated by the use of 
Loop and If components, or made really complicated by the use of Block (to 
render portions of other pages: this is what the BeanEditForm component 
does).</p><p>Along the way, the Form is generating unique form control names 
for each field component, as it renders.</p><p>When the client-side Form is 
submitted, an event is triggered on the server-side Form component. It now 
needs to locate each component, in turn, inform the component of its 
 control name, and allow the component to read the corresponding query 
parameter. The component then converts the client-side string back into a 
server-side value and performs validations before updating the data 
model.</p><p>That's where <code>t:formdata</code> comes in. While components 
are rendering, they are using the FormSupport environmental object to record 
callbacks:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>FormSupport.java (partial)</b></div><div class="codeContent 
panelContent pdl">
 <pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: true; theme: Default" data-theme="Default">public interface FormSupport 
extends ClientElement

Modified: websites/production/tapestry/content/forms-and-validation.html
==============================================================================
--- websites/production/tapestry/content/forms-and-validation.html (original)
+++ websites/production/tapestry/content/forms-and-validation.html Sun Apr 26 
21:22:55 2020
@@ -122,11 +122,11 @@
 
 
 <p><br clear="none"></p><p>Tapestry provides support for creating and 
rendering forms, populating their fields, and validating user input. For simple 
cases, input validation is declarative, meaning you simply tell Tapestry what 
validations to apply to a given field, and it takes care of it on the server 
and (optionally) on the client as well. In addition, you can provide event 
handler methods&#160;in your page or component classes to handle more complex 
validation scenarios.</p><p>Finally, Tapestry not only makes it easy to present 
errors messages to the user, but it can also automatically highlight form 
fields when validation fails.</p><p><strong>Contents</strong></p><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1587536386205 {padding: 0px;}
-div.rbtoc1587536386205 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1587536386205 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1587936090741 {padding: 0px;}
+div.rbtoc1587936090741 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1587936090741 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1587536386205">
+/*]]>*/</style></p><div class="toc-macro rbtoc1587936090741">
 <ul class="toc-indentation"><li>Related Articles</li></ul>
 <ul><li><a  href="#FormsandValidation-TheFormComponent">The Form Component</a>
 <ul class="toc-indentation"><li><a  href="#FormsandValidation-FormEvents">Form 
Events</a></li><li><a  href="#FormsandValidation-HandlingEvents">Handling 
Events</a></li><li><a  
href="#FormsandValidation-TrackingValidationErrors">Tracking Validation 
Errors</a></li><li><a  
href="#FormsandValidation-StoringDataBetweenRequests">Storing Data Between 
Requests</a></li><li><a  
href="#FormsandValidation-ConfiguringFieldsandLabels">Configuring Fields and 
Labels</a></li></ul>

Modified: websites/production/tapestry/content/general-questions.html
==============================================================================
--- websites/production/tapestry/content/general-questions.html (original)
+++ websites/production/tapestry/content/general-questions.html Sun Apr 26 
21:22:55 2020
@@ -78,11 +78,11 @@
 
       <div id="content">
                 <div id="ConfluenceContent"><h1 
id="GeneralQuestions-GeneralQuestions">General Questions</h1><h2 
id="GeneralQuestions-Contents">Contents</h2><p><style 
type="text/css">/*<![CDATA[*/
-div.rbtoc1587536388792 {padding: 0px;}
-div.rbtoc1587536388792 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1587536388792 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1587936065730 {padding: 0px;}
+div.rbtoc1587936065730 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1587936065730 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1587536388792">
+/*]]>*/</style></p><div class="toc-macro rbtoc1587936065730">
 <ul class="toc-indentation"><li><a  
href="#GeneralQuestions-HowdoIgetstartedwithTapestry?">How do I get started 
with Tapestry?</a></li><li><a  
href="#GeneralQuestions-WhydoesTapestryusePrototype(inversionsbefore5.4)?WhynotinsertfavoriteJavaScriptlibraryhere?">Why
 does Tapestry use Prototype (in versions before 5.4)? Why not insert favorite 
JavaScript library here?</a></li><li><a  
href="#GeneralQuestions-WhydoesTapestryhaveitsownInversionofControlContainer?WhynotSpringorGuice?">Why
 does Tapestry have its own Inversion of Control Container? Why not Spring or 
Guice?</a></li><li><a  
href="#GeneralQuestions-HowdoIupgradefromTapestry4toTapestry5?">How do I 
upgrade from Tapestry 4 to Tapestry 5?</a></li><li><a  
href="#GeneralQuestions-HowdoIupgradefromoneversionofTapestry5toanother?">How 
do I upgrade from one version of Tapestry 5 to another?</a></li><li><a  
href="#GeneralQuestions-WhyaretherebothRequestandHttpServletRequest?">Why are 
there both Request and HttpServletRequest?</a></li></ul
 >
 </div><h2 id="GeneralQuestions-HowdoIgetstartedwithTapestry?">How do I get 
started with Tapestry?</h2><p class="confluence-link">The easiest way to get 
started is to use <a  class="external-link" 
href="http://maven.apache.org";>Apache Maven</a> to create your initial project; 
Maven can use an <em>archetype</em> (a kind of project template) to create a 
bare-bones Tapestry application for you. See the&#160;<a  
href="getting-started.html">Getting Started</a> page for more 
details.</p><p>Even without Maven, Tapestry is quite easy to set up. You just 
need to <a  href="general-questions.html">download</a> the binaries and setup 
your build to place them inside your WAR's WEB-INF/lib folder. The rest is just 
some one-time <a  href="configuration.html">configuration of the web.xml 
deployment descriptor</a>.</p><h2 
id="GeneralQuestions-WhydoesTapestryusePrototype(inversionsbefore5.4)?WhynotinsertfavoriteJavaScriptlibraryhere?">Why
 does Tapestry use Prototype (in versions before 5.4)? Why not <
 em>insert favorite JavaScript library here</em>?</h2><p>An important goal for 
Tapestry is seamless DHTML and Ajax integration. To serve that goal, it was 
important that the built in components be capable of Ajax operations, such as 
dynamically re-rendering parts of the page. Because of that, it made sense to 
bundle a well-known JavaScript library as part of Tapestry.</p><p>At the time 
(this would be 2006-ish), Prototype and Scriptaculous were well known and well 
documented, whereas jQuery was just getting started.</p><p>The intent has 
always been to make this aspect of Tapestry pluggable. Tapestry 5.4 includes 
the option of either Prototype or jQuery, and future versions of Tapestry will 
likely remove Prototype as an option..</p><h2 
id="GeneralQuestions-WhydoesTapestryhaveitsownInversionofControlContainer?WhynotSpringorGuice?">Why
 does Tapestry have its own Inversion of Control Container? Why not Spring or 
Guice?</h2><p>An Inversion of Control Container is <em>the</em> key piece of 
 Tapestry's infrastructure. It is absolutely necessary to create software as 
robust, performant and extensible as Tapestry.</p><p>Tapestry IoC includes a 
number of features that distinguish itself from other 
containers:</p><ul><li>Configured in code, not XML</li><li>Built-in extension 
mechanism for services: configurations and contributions</li><li>Built-in 
aspect oriented programming model (service decorations and advice)</li><li>Easy 
modularization</li><li>Best-of-breed exception reporting</li></ul><p>Because 
Tapestry is implemented on top of its IoC container, and because the container 
makes it easy to extend or replace any service inside the container, it is 
possible to make the small changes to Tapestry needed to customize it to any 
project's needs.</p><p>In addition &#8211; and this is critical&#160;&#8211; 
Tapestry allows 3rd party libraries to be built that fully participate in the 
configurability of Tapestry itself. This means that such libraries can be 
configured the same w
 ay Tapestry itself is configured, and such libraries can also configure 
Tapestry itself. This <em>distributed configuration</em> requires an IOC 
container that fully supports such configurability.</p><h2 
id="GeneralQuestions-HowdoIupgradefromTapestry4toTapestry5?">How do I upgrade 
from Tapestry 4 to Tapestry 5?</h2><p>There is no existing tool that supports 
upgrading from Tapestry 4 to Tapestry 5; Tapestry 5 is a complete 
rewrite.</p><p>Many of the basic concepts in Tapestry 4 are still present in 
Tapestry 5, but refactored, improved, streamlined, and simplified. The basic 
concept of pages, templates and components are largely the same. Other aspects, 
such as server-side event handling, is markedly different.</p><p>Tapestry 5 is 
designed so that it can live side-by-side in the same servlet as a Tapestry 4 
app, without package namespace conflicts, sharing session data and common 
resources such as images and CSS. This means that you can gradually migrate a 
Tapestry 4 app to Tapestry 5
  one page (or one portion of the app) at a time.</p><h2 
id="GeneralQuestions-HowdoIupgradefromoneversionofTapestry5toanother?">How do I 
upgrade from one version of Tapestry 5 to another?</h2><p>Main Article: <a  
href="how-to-upgrade.html">How to Upgrade</a>.</p><p>A lot of effort goes into 
making an upgrade from one Tapestry 5 release to another go smoothly. In the 
general case, it is just a matter of updating the version number in your Maven 
<code>build.xml</code> or Gradle <code>build.gradle</code> file and executing 
the appropriate commands (e.g., <code>gradle idea</code> or <code>mvn 
eclipse:eclipse</code>) to bring your local workspace up to date with the 
latest binaries.</p><p>After changing dependencies, you should always perform a 
clean recompile of your application.</p><p>We make every effort to ensure 
backwards-compatibility. Tapestry is mostly coded in terms of interfaces; those 
interfaces are stable to a point: interfaces your code is expected to implement 
are usually co
 mpletely frozen; interfaces your code is expected to invoke, such as the 
interfaces to IoC services, are stable, but may have new methods added in a 
release; existing methods are not changed.</p><p>In <em>rare</em> cases a 
choice is necessary between fixing bugs (or adding essential functionality) and 
maintaining complete backwards compatibility; in those cases, an incompatible 
change may be introduced. These are always discussed in detail in the&#160;<a  
href="release-notes.html">Release Notes</a> for the specific release. You 
should always read the release notes before attempting an upgrade, and always 
(really, <em>always</em>) be prepared to retest your application 
afterwards.</p><p>Note that you should be careful any time you make use of 
<strong>internal</strong> APIs (you can tell an API is internal by the package 
name, <code>org.apache.tapestry5.internal). </code>Internal APIs may change 
<em>at any time</em>; there's no guarantee of backwards compatibility. Please 
always check
  on the documentation, or consult the user mailing list, to see if there's a 
stable, public alternative. If you do make use of internal APIs, be sure to get 
a discussion going so that your needs can be met in the future by a stable, 
public API.</p><h2 
id="GeneralQuestions-WhyaretherebothRequestandHttpServletRequest?"><span 
style="color: rgb(83,145,38);">Why are there both Request and 
HttpServletRequest?</span></h2><p>Tapestry's Request interface is <em>very</em> 
close to the standard HttpServletRequest interface. It differs in a few ways, 
omitting some unneeded methods, and adding a couple of new methods (such as 
<code>isXHR()</code>), as well as changing how some existing methods operate. 
For example, <code>getParameterNames()</code> returns a sorted List of Strings; 
HttpServletRequest returns an Enumeration, which is a very dated 
approach.</p><p>However, the stronger reason for Request (and the related 
interfaces Response and Session) is to enable the support for Portlets at some 
 point in the future. By writing code in terms of Tapestry's Request, and not 
HttpServletRequest, you can be assured that the same code will operate in both 
Servlet Tapestry and Portlet Tapestry.</p></div>
       </div>

Modified: websites/production/tapestry/content/google-app-engine.html
==============================================================================
--- websites/production/tapestry/content/google-app-engine.html (original)
+++ websites/production/tapestry/content/google-app-engine.html Sun Apr 26 
21:22:55 2020
@@ -76,7 +76,7 @@
 
       <div id="content">
                 <div id="ConfluenceContent"><p>Tapestry apps should run fine 
on Google App Engine (GAE) if you follow certain important steps.</p><h2 
id="GoogleAppEngine-RequiredConfigurationSettings">Required Configuration 
Settings</h2><ul><li><p>Set <code>tapestry.production-mode</code> to true (to 
turn off live class reloading, among other things)</p></li><li><p>Set the 
<code>tapestry.restrictive-environment</code> configuration symbol to true (to 
prevent Tapestry from writing exception reports and cached resources to the 
file system)</p></li><li><p>Set the <code>tapestry.thread-pool-enabled</code> 
configuration symbol to false (to prevent Tapestry's PeriodicExecutor from 
attempting to spawn threads)</p></li></ul><h3 
id="GoogleAppEngine-Exampleconfiguration">Example configuration</h3><p>Your 
application's module class (generally AppModule.java) can set these symbols 
where it sets others (either in a method named contributeApplicationDefaults or 
one annotated with&#160;@Applicatio
 nDefaults and @Contribute), as shown below.</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>AppModule (partial)</b></div><div 
class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">&#160;&#160;&#160;&#160; @ApplicationDefaults
+<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; 
gutter: false; theme: Default" data-theme="Default">&#160;&#160;&#160;&#160; 
@ApplicationDefaults
 &#160;&#160;&#160;&#160; @Contribute(SymbolProvider.class)
 &#160;&#160;&#160;&#160; public static void configureMyApp(
 &#160;&#160;&#160;&#160;&#160;&#160;&#160; MappedConfiguration&lt;String, 
String&gt; configuration)


Reply via email to