Modified: websites/production/tapestry/content/release-notes-53.html
==============================================================================
--- websites/production/tapestry/content/release-notes-53.html (original)
+++ websites/production/tapestry/content/release-notes-53.html Mon Feb 19
19:21:08 2018
@@ -77,14 +77,14 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry versions 5.2 and 5.3. To upgrade from 5.2 to 5.3,
most users who are not using deprecated features will be able to just update
the Maven dependency in their POM file (or <a
href="release-notes-53.html">download</a> the new JAR file) and the new version
will just work. However, please read carefully below before upgrading, and also
review the <a href="release-notes-53.html">Release Notes 5.3</a>
instructions.</p><p><strong>Contents</strong></p><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1518405666726 {padding: 0px;}
-div.rbtoc1518405666726 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1518405666726 li {margin-left: 0px;padding-left: 0px;}
+ <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry versions 5.2 and 5.3. To upgrade from 5.2 to 5.3,
most users who are not using deprecated features will be able to just update
the Maven dependency in their POM file (or <a
href="release-notes-53.html">download</a> the new JAR file) and the new version
will just work. However, please read carefully below before upgrading, and also
review the <a href="how-to-upgrade.html">How to Upgrade</a>
instructions.</p><p><strong>Contents</strong></p><p><style
type="text/css">/*<![CDATA[*/
+div.rbtoc1519068041406 {padding: 0px;}
+div.rbtoc1519068041406 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068041406 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1518405666726">
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068041406">
<ul class="toc-indentation"><li><a
href="#ReleaseNotes5.3-BreakingChanges">Breaking Changes</a></li><li><a
href="#ReleaseNotes5.3-NewFeatures">New Features</a></li><li><a
href="#ReleaseNotes5.3-Sub-tasksCompleted">Sub-tasks Completed</a></li><li><a
href="#ReleaseNotes5.3-BugsFixed">Bugs Fixed</a></li><li><a
href="#ReleaseNotes5.3-ImprovementsMade">Improvements Made</a></li><li><a
href="#ReleaseNotes5.3-NewFeaturesImplemented">New Features
Implemented</a></li><li><a href="#ReleaseNotes5.3-TasksCompleted">Tasks
Completed</a></li></ul>
-</div><h2 id="ReleaseNotes5.3-BreakingChanges">Breaking
Changes</h2><p>Tapestry now depends on Servlet API version <strong>2.5</strong>
(prior releases worked with 2.4).</p><p>Tapestry no longer supports the ability
to inject the component id into a String field. This was rarely (if ever) used
functionality that caused unwanted conflicts elsewhere. When a component needs
to know its component id, it may inject the <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ComponentResources.html">ComponentResources</a>
object, and invoke <code>getCompleteId()</code>.</p><p>Tapestry templates
without a <!DOCTYPE> are treated a bit differently in Tapestry 5.3; they
are treated as if they have the HTML5 doctype (<code><!DOCTYPE
html></code>). See further notes about <a
href="release-notes-53.html">component templates</a>.</p><p>Many classes and
interfaces that were deprecated in prior releases of Tapestry have been removed
in Tapestry 5.3.
See <a class="external-link"
href="https://issues.apache.org/jira/browse/TAP5-1432">the full list</a>. As
always, you should use your IDE to find and replace all deprecated items
<em>before</em> you upgrade. The following are the most significant of
these:</p><ul><li>@IncludeJavaScriptLibrary and @IncludeStylesheet annotations
(replaced by @<a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/annotations/Import.html">Import</a>)</li><li>@ApplicationState
annotation (replaced with @<a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/annotations/SessionState.html">SessionState</a>)</li><li>"validateForm"
event triggered by Form component (replaced with "validate"
event)</li><li>Code and constants related to page pooling</li></ul><p>In
addition, some of the abstract base classes used with the tapestry-func library
have changed into interfaces; you will want to recompile, but may also need to
adjust your cod
e, depending on your compiler settings and use of the standard Java @Override
annotation.</p><p>Because of the upgrade to Prototype 1.7, existing JavaScript
that uses <code>value.toJSON()</code> may break; replace with
<code>Object.toJSON(value)</code>.</p><p>Some number of interfaces and APIs in
Tapestry 5.3 will be removed in Tapestry 5.4 or later. These
include:</p><ul><li>The <a class="external-link"
href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/RenderSupport.html">RenderSupport</a>
environmental (replaced with the <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a>
environmental)</li><li>The <a class="external-link"
href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/ajax/MultiZoneUpdate.html">MultiZoneUpdate</a>
object, replaced with <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/ajax
/AjaxResponseRenderer.html">AjaxResponseRenderer</a></li><li>ClassFactory
service and ClassFab interface (replaced with the <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ioc/services/PlasticProxyFactory.html">PlasticProxyFactory</a>
service and <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/plastic/PlasticClass.html">PlasticClass</a>
interface)</li><li>The "suppress redirects" functionality, which allows
component event requests to respond directly with HTML, as in Tapestry
4.</li></ul><h2 id="ReleaseNotes5.3-NewFeatures">New Features</h2><h3
id="ReleaseNotes5.3-Underscore.js">Underscore.js</h3><p>Tapestry now bundles <a
class="external-link" href="http://documentcloud.github.com/underscore/"
rel="nofollow">Underscore.js</a>, a useful library for expressive functional
programming in the browser. It is used in <em>no conflict mode</em>, made
available as the <code>T5._</code> object.</p><h3 id
="ReleaseNotes5.3-UserAlerts">User Alerts</h3><p>Tapestry now has a central
mechanism for handling user alerts; this includes the AlertManager service and
the Alerts component. Just add an Alerts component to your application's
standard layout component and Tapestry takes care of the rest. Alerts can be
added during both traditional and Ajax requests, and may be transient
(displayed for a few seconds), normal, or sticky (persist until the user
expressly dismisses them). Alerts support three severities: info, warn(ing) and
error; the look and feel can be customized by overriding Tapestry's default CSS
rules.</p><h3 id="ReleaseNotes5.3-Renderingcomments">Rendering
comments</h3><p>It is now possible to have Tapestry emit rendering comments;
these are comments (such as <code><!--BEGIN Index:loop (context:Index.tml,
line 15)--></code>) that can assist you in debugging markup output on the
client-side. This is enabled for all requests using the configuration symbol
<code>tapestry.co
mponent-render-tracing-enabled</code>, and can be added to any request by
adding the query parameter <code>t:component-trace=true</code> to the URL. This
will significantly increase the size of the rendered markup, but can be very
helpful with complex layouts to determine which component was responsible for
which portion of the rendered page.</p><h3
id="ReleaseNotes5.3-Adaptableservicecontributions">Adaptable service
contributions</h3><p>When making contributions to a service, you are no longer
restricted to contributing a value that is assignable to the type associated
with the configuration; objects of any type may be contributed, and the
TypeCoercer service is used to coerce the value to the configuration's
type.</p><h3 id="ReleaseNotes5.3-Componentdebuggingimprovements">Component
debugging improvements</h3><p>Because of how Tapestry instruments your pages
and components, using a debugger has been difficult with Tapestry page and
component classes; any mutable field shows its def
ault value in the debugger, regardless of what has been written to the field
or read out of it. In Tapestry 5.3, when in <em>development mode</em>, Tapestry
now shadows values read from or written to such fields into the fields
themselves (this has also been fixed in the 5.2.5 maintenance release). This
shadowing does not occur in production, to avoid potential memory leaks.</p><h3
id="ReleaseNotes5.3-Reloadingdisabledinproduction">Reloading disabled in
production</h3><p>Tapestry no longer checks for changes to Tapestry component
class files, templates, or message catalogs in production mode. It is assumed
that Tapestry applications are packaged as WAR files in production, and that
changing the WAR file causes the servlet container to redeploy the entire
application. This change is to improve throughput and reduce memory consumption
in production applications.</p><h3
id="ReleaseNotes5.3-String-to-Enumcoercions">String-to-Enum
coercions</h3><p>The TypeCoercer service now automaticall
y generates String-to-Enum coercions without requiring a specific
contribution. This coercion is case insensitive. A contribution is still
allowed, and will take priority over the default coercion, but is only
necessary to support "aliases" for enum values outside those defined by the
enum type itself.</p><h3
id="ReleaseNotes5.3-JavaScriptandCSSminimization">JavaScript and CSS
minimization</h3><p>A new optional library, tapestry-yuicompressor, has been
added. This library adds support for compressing JavaScript libraries and CSS
files using <a class="external-link"
href="http://developer.yahoo.com/yui/compressor/" rel="nofollow">the
YUICompressor library</a>.</p><h3
id="ReleaseNotes5.3-ComponentClassTransformWorkerService">ComponentClassTransformWorker
Service</h3><p>The type of this service has changed from <a
class="external-link"
href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/services/ComponentClassTransformWorker.html">ComponentClassTransformWorker</a>
to <a
class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/transform/ComponentClassTransformWorker2.html">ComponentClassTransformWorker2</a>.
Contributions of type ComponentClassTransformWorker will automatically be
coerced to the new ComponentClassTransformWorker2 interface. However, if you
use the @Contribute annotation to mark the method that makes contributions, you
will need to update the annotation to indicate the new service interface. If
you followed the naming convention, and named your method
<code>contributeComponentClassTransformWorker()</code>, you don't need to
change anything.</p><h3
id="ReleaseNotes5.3-AjaxResponseRenderer">AjaxResponseRenderer</h3><p>The <a
class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.html">AjaxResponseRenderer</a>
service makes it easier to customize the partial page response generated when
updating a <a class="external-link" href
="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Zone.html">Zone</a>
component, replacing the <a class="external-link"
href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/ajax/MultiZoneUpdate.html">MultiZoneUpdate</a>
object as an event handler method return value.</p><h3
id="ReleaseNotes5.3-TapestryJavaDoc">Tapestry JavaDoc</h3><p>Tapestry now
includes a new library, tapestry-javadoc, that replaces the old Maven-based
component report. Simply by placing a <code>@tapestrydoc</code> annotation into
your component's JavaDoc, Tapestry will generate complete documentation as part
of JavaDoc ... no more switching back and forth between JavaDoc and the
Maven-generated component report, and no more reliance on Maven for component
documentation.</p><h3 id="ReleaseNotes5.3-Skinning/ThemingSupport">Skinning /
Theming Support</h3><p>Tapestry now adds the ability to skin and/or theme your
pages and components. Its an extension of how Tapestry manag
es pages per locale, but adds new application-defined <em>axes</em> along with
rules to find the resources. See <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/pageload/ComponentResourceSelector.html">ComponentResourceSelector</a>
and <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.html">ComponentRequestSelectorAnalyzer</a>.</p><p>There's
also a new <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Dynamic.html">Dynamic</a>
component, which uses an external template, not a Tapestry template, which can
be selected at runtime.</p><h3 id="ReleaseNotes5.3-TreeComponent">Tree
Component</h3><p>Tapestry finally has a proper <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Tree.html">Tree</a>
component for navigating hierarc
hical data. It's efficient and Ajax-enabled, and fully customizable.</p><h3
id="ReleaseNotes5.3-FormCancelledEvent">Form Cancelled Event</h3><p>Form
components now recognize when the client-side form was cancelled. A new
"cancelled" event is triggered early in the submission process, which allows
the page to bypass all property updates and input validations, when
desired.</p><h3
id="ReleaseNotes5.3-ImplicitOrderedConfigurationConstraints">Implicit
OrderedConfiguration Constraints</h3><p>When using <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ioc/OrderedConfiguration.html">OrderedConfiguration.add()</a>
with no constraints, Tapestry will now implicitly order the added element
after the previously added element, within the same method. In prior releases,
such elements were added with no constraints. This makes it easier to
contribute a group of related items with an implicit ordering.</p><h3
id="ReleaseNotes5.3-NewComponentClassValidation
s">New Component Class Validations</h3><p>Tapestry includes new validations of
component classes to help cut down on many common errors; Tapestry now checks
that component ids referenced by an event handler method (the
<code>From</code><em>component id</em> part of the method name) actually
matches a component defined in the template ... this quickly identifies typos
in method names. This check can be disabled with a configuration symbol, as
existing 5.2 apps may have such errors and still operate (that is, they may
have <em>dead</em> event handler methods that will never be invoked).</p><h3
id="ReleaseNotes5.3-ApplicationFolder">Application Folder</h3><p>Tapestry can
now be configured to execute inside a folder, which can be useful when running
Tapestry inside a web application that contains other servlets or filters, as a
way to prevent conflicts.</p><h3
id="ReleaseNotes5.3-ImprovedQuickstartArchetype">Improved Quickstart
Archetype</h3><p>The Maven quickstart archetype has been br
ought up to date, and now demonstrates several new bits of common useful
functionality. It also generates support for <a class="external-link"
href="http://gradle.org/" rel="nofollow">Gradle</a> as the build tool.</p><h3
id="ReleaseNotes5.3-WhitelistedPages">Whitelisted Pages</h3><p>The new @<a
class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/annotations/WhitelistAccessOnly.html">WhitelistAccessOnly</a>
annotation marks a page as accessible only from white-listed clients; the
rules for the whitelist are <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/security/ClientWhitelist.html">extensible</a>.
The default rule is that only access from localhost is on the white-list. Use
this annotation on pages that may expose sensitive data, such as built-in
application dashboards and the like.</p><h3
id="ReleaseNotes5.3-PageCatalog">Page Catalog</h3><p>Tapestry applications now
include a built-in "Page
Catalog" page, which lists all the loaded pages of the application, with
details about construction time and number of components. The page requires
whitelist access (see above comment), and some functionality is only available
in development mode. PageCatalog can be used to load all pages of your
application, which is useful to quickly spot problems in your pages ...
especially useful when upgrading from a prior release of Tapestry.</p><h3
id="ReleaseNotes5.3-Client-SideJavaScriptLogging">Client-Side JavaScript
Logging</h3><p>The integrated Blackbird client-side console has been removed.
In its place are the floating console messages combined with logging to the
Firebug or WebKit console. Tapestry no longer captures JavaScript
initialization exceptions, so that they may be properly reported to the native
console. These changes should make debugging client-side JavaScript much
easier.</p><p>In addition, Tapestry will now display a pop-up window containing
the full exception report f
or a server-side error that occurs during an Ajax request, which makes
debugging server-side problems that occur as part of an Ajax request
<em>significantly</em> easier. Note that this logic is tied to performing a <a
class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Zone.html">Zone</a>
update.</p><h2 id="ReleaseNotes5.3-Sub-tasksCompleted">Sub-tasks
Completed</h2><p> </p><ul><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1433">TAP5-1433</a>] -
Remove deprecated methods of PerthreadManager service
+</div><h2 id="ReleaseNotes5.3-BreakingChanges">Breaking
Changes</h2><p>Tapestry now depends on Servlet API version <strong>2.5</strong>
(prior releases worked with 2.4).</p><p>Tapestry no longer supports the ability
to inject the component id into a String field. This was rarely (if ever) used
functionality that caused unwanted conflicts elsewhere. When a component needs
to know its component id, it may inject the <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ComponentResources.html">ComponentResources</a>
object, and invoke <code>getCompleteId()</code>.</p><p>Tapestry templates
without a <!DOCTYPE> are treated a bit differently in Tapestry 5.3; they
are treated as if they have the HTML5 doctype (<code><!DOCTYPE
html></code>). See further notes about <a
href="component-templates.html">component templates</a>.</p><p>Many classes and
interfaces that were deprecated in prior releases of Tapestry have been removed
in Tapestry 5.
3. See <a class="external-link"
href="https://issues.apache.org/jira/browse/TAP5-1432">the full list</a>. As
always, you should use your IDE to find and replace all deprecated items
<em>before</em> you upgrade. The following are the most significant of
these:</p><ul><li>@IncludeJavaScriptLibrary and @IncludeStylesheet annotations
(replaced by @<a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/annotations/Import.html">Import</a>)</li><li>@ApplicationState
annotation (replaced with @<a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/annotations/SessionState.html">SessionState</a>)</li><li>"validateForm"
event triggered by Form component (replaced with "validate"
event)</li><li>Code and constants related to page pooling</li></ul><p>In
addition, some of the abstract base classes used with the tapestry-func library
have changed into interfaces; you will want to recompile, but may also need to
adjust your
code, depending on your compiler settings and use of the standard Java
@Override annotation.</p><p>Because of the upgrade to Prototype 1.7, existing
JavaScript that uses <code>value.toJSON()</code> may break; replace with
<code>Object.toJSON(value)</code>.</p><p>Some number of interfaces and APIs in
Tapestry 5.3 will be removed in Tapestry 5.4 or later. These
include:</p><ul><li>The <a class="external-link"
href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/RenderSupport.html">RenderSupport</a>
environmental (replaced with the <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a>
environmental)</li><li>The <a class="external-link"
href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/ajax/MultiZoneUpdate.html">MultiZoneUpdate</a>
object, replaced with <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/a
jax/AjaxResponseRenderer.html">AjaxResponseRenderer</a></li><li>ClassFactory
service and ClassFab interface (replaced with the <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ioc/services/PlasticProxyFactory.html">PlasticProxyFactory</a>
service and <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/plastic/PlasticClass.html">PlasticClass</a>
interface)</li><li>The "suppress redirects" functionality, which allows
component event requests to respond directly with HTML, as in Tapestry
4.</li></ul><h2 id="ReleaseNotes5.3-NewFeatures">New Features</h2><h3
id="ReleaseNotes5.3-Underscore.js">Underscore.js</h3><p>Tapestry now bundles <a
class="external-link" href="http://underscorejs.org/"
rel="nofollow">Underscore.js</a>, a useful library for expressive functional
programming in the browser. It is used in <em>no conflict mode</em>, made
available as the <code>T5._</code> object.</p><h3 id="ReleaseNotes5.
3-UserAlerts">User Alerts</h3><p>Tapestry now has a central mechanism for
handling user alerts; this includes the AlertManager service and the Alerts
component. Just add an Alerts component to your application's standard layout
component and Tapestry takes care of the rest. Alerts can be added during both
traditional and Ajax requests, and may be transient (displayed for a few
seconds), normal, or sticky (persist until the user expressly dismisses them).
Alerts support three severities: info, warn(ing) and error; the look and feel
can be customized by overriding Tapestry's default CSS rules.</p><h3
id="ReleaseNotes5.3-Renderingcomments">Rendering comments</h3><p>It is now
possible to have Tapestry emit rendering comments; these are comments (such as
<code><!--BEGIN Index:loop (context:Index.tml, line 15)--></code>) that
can assist you in debugging markup output on the client-side. This is enabled
for all requests using the configuration symbol
<code>tapestry.component-render-t
racing-enabled</code>, and can be added to any request by adding the query
parameter <code>t:component-trace=true</code> to the URL. This will
significantly increase the size of the rendered markup, but can be very helpful
with complex layouts to determine which component was responsible for which
portion of the rendered page.</p><h3
id="ReleaseNotes5.3-Adaptableservicecontributions">Adaptable service
contributions</h3><p>When making contributions to a service, you are no longer
restricted to contributing a value that is assignable to the type associated
with the configuration; objects of any type may be contributed, and the
TypeCoercer service is used to coerce the value to the configuration's
type.</p><h3 id="ReleaseNotes5.3-Componentdebuggingimprovements">Component
debugging improvements</h3><p>Because of how Tapestry instruments your pages
and components, using a debugger has been difficult with Tapestry page and
component classes; any mutable field shows its default value in th
e debugger, regardless of what has been written to the field or read out of
it. In Tapestry 5.3, when in <em>development mode</em>, Tapestry now shadows
values read from or written to such fields into the fields themselves (this has
also been fixed in the 5.2.5 maintenance release). This shadowing does not
occur in production, to avoid potential memory leaks.</p><h3
id="ReleaseNotes5.3-Reloadingdisabledinproduction">Reloading disabled in
production</h3><p>Tapestry no longer checks for changes to Tapestry component
class files, templates, or message catalogs in production mode. It is assumed
that Tapestry applications are packaged as WAR files in production, and that
changing the WAR file causes the servlet container to redeploy the entire
application. This change is to improve throughput and reduce memory consumption
in production applications.</p><h3
id="ReleaseNotes5.3-String-to-Enumcoercions">String-to-Enum
coercions</h3><p>The TypeCoercer service now automatically generates Stri
ng-to-Enum coercions without requiring a specific contribution. This coercion
is case insensitive. A contribution is still allowed, and will take priority
over the default coercion, but is only necessary to support "aliases" for enum
values outside those defined by the enum type itself.</p><h3
id="ReleaseNotes5.3-JavaScriptandCSSminimization">JavaScript and CSS
minimization</h3><p>A new optional library, tapestry-yuicompressor, has been
added. This library adds support for compressing JavaScript libraries and CSS
files using <a class="external-link"
href="http://developer.yahoo.com/yui/compressor/" rel="nofollow">the
YUICompressor library</a>.</p><h3
id="ReleaseNotes5.3-ComponentClassTransformWorkerService">ComponentClassTransformWorker
Service</h3><p>The type of this service has changed from <a
class="external-link"
href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/services/ComponentClassTransformWorker.html">ComponentClassTransformWorker</a>
to <a class="externa
l-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/transform/ComponentClassTransformWorker2.html">ComponentClassTransformWorker2</a>.
Contributions of type ComponentClassTransformWorker will automatically be
coerced to the new ComponentClassTransformWorker2 interface. However, if you
use the @Contribute annotation to mark the method that makes contributions, you
will need to update the annotation to indicate the new service interface. If
you followed the naming convention, and named your method
<code>contributeComponentClassTransformWorker()</code>, you don't need to
change anything.</p><h3
id="ReleaseNotes5.3-AjaxResponseRenderer">AjaxResponseRenderer</h3><p>The <a
class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.html">AjaxResponseRenderer</a>
service makes it easier to customize the partial page response generated when
updating a <a class="external-link" href="http://tapestr
y.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Zone.html">Zone</a>
component, replacing the <a class="external-link"
href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/ajax/MultiZoneUpdate.html">MultiZoneUpdate</a>
object as an event handler method return value.</p><h3
id="ReleaseNotes5.3-TapestryJavaDoc">Tapestry JavaDoc</h3><p>Tapestry now
includes a new library, tapestry-javadoc, that replaces the old Maven-based
component report. Simply by placing a <code>@tapestrydoc</code> annotation into
your component's JavaDoc, Tapestry will generate complete documentation as part
of JavaDoc ... no more switching back and forth between JavaDoc and the
Maven-generated component report, and no more reliance on Maven for component
documentation.</p><h3 id="ReleaseNotes5.3-Skinning/ThemingSupport">Skinning /
Theming Support</h3><p>Tapestry now adds the ability to skin and/or theme your
pages and components. Its an extension of how Tapestry manages pages per loc
ale, but adds new application-defined <em>axes</em> along with rules to find
the resources. See <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/pageload/ComponentResourceSelector.html">ComponentResourceSelector</a>
and <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.html">ComponentRequestSelectorAnalyzer</a>.</p><p>There's
also a new <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Dynamic.html">Dynamic</a>
component, which uses an external template, not a Tapestry template, which can
be selected at runtime.</p><h3 id="ReleaseNotes5.3-TreeComponent">Tree
Component</h3><p>Tapestry finally has a proper <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Tree.html">Tree</a>
component for navigating hierarchical data. It's
efficient and Ajax-enabled, and fully customizable.</p><h3
id="ReleaseNotes5.3-FormCancelledEvent">Form Cancelled Event</h3><p>Form
components now recognize when the client-side form was cancelled. A new
"cancelled" event is triggered early in the submission process, which allows
the page to bypass all property updates and input validations, when
desired.</p><h3
id="ReleaseNotes5.3-ImplicitOrderedConfigurationConstraints">Implicit
OrderedConfiguration Constraints</h3><p>When using <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ioc/OrderedConfiguration.html">OrderedConfiguration.add()</a>
with no constraints, Tapestry will now implicitly order the added element
after the previously added element, within the same method. In prior releases,
such elements were added with no constraints. This makes it easier to
contribute a group of related items with an implicit ordering.</p><h3
id="ReleaseNotes5.3-NewComponentClassValidations">New Component
Class Validations</h3><p>Tapestry includes new validations of component
classes to help cut down on many common errors; Tapestry now checks that
component ids referenced by an event handler method (the
<code>From</code><em>component id</em> part of the method name) actually
matches a component defined in the template ... this quickly identifies typos
in method names. This check can be disabled with a configuration symbol, as
existing 5.2 apps may have such errors and still operate (that is, they may
have <em>dead</em> event handler methods that will never be invoked).</p><h3
id="ReleaseNotes5.3-ApplicationFolder">Application Folder</h3><p>Tapestry can
now be configured to execute inside a folder, which can be useful when running
Tapestry inside a web application that contains other servlets or filters, as a
way to prevent conflicts.</p><h3
id="ReleaseNotes5.3-ImprovedQuickstartArchetype">Improved Quickstart
Archetype</h3><p>The Maven quickstart archetype has been brought up to date
, and now demonstrates several new bits of common useful functionality. It
also generates support for <a class="external-link" href="http://gradle.org/"
rel="nofollow">Gradle</a> as the build tool.</p><h3
id="ReleaseNotes5.3-WhitelistedPages">Whitelisted Pages</h3><p>The new @<a
class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/annotations/WhitelistAccessOnly.html">WhitelistAccessOnly</a>
annotation marks a page as accessible only from white-listed clients; the
rules for the whitelist are <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/security/ClientWhitelist.html">extensible</a>.
The default rule is that only access from localhost is on the white-list. Use
this annotation on pages that may expose sensitive data, such as built-in
application dashboards and the like.</p><h3
id="ReleaseNotes5.3-PageCatalog">Page Catalog</h3><p>Tapestry applications now
include a built-in "PageCatalog" page, w
hich lists all the loaded pages of the application, with details about
construction time and number of components. The page requires whitelist access
(see above comment), and some functionality is only available in development
mode. PageCatalog can be used to load all pages of your application, which is
useful to quickly spot problems in your pages ... especially useful when
upgrading from a prior release of Tapestry.</p><h3
id="ReleaseNotes5.3-Client-SideJavaScriptLogging">Client-Side JavaScript
Logging</h3><p>The integrated Blackbird client-side console has been removed.
In its place are the floating console messages combined with logging to the
Firebug or WebKit console. Tapestry no longer captures JavaScript
initialization exceptions, so that they may be properly reported to the native
console. These changes should make debugging client-side JavaScript much
easier.</p><p>In addition, Tapestry will now display a pop-up window containing
the full exception report for a server-side
error that occurs during an Ajax request, which makes debugging server-side
problems that occur as part of an Ajax request <em>significantly</em> easier.
Note that this logic is tied to performing a <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Zone.html">Zone</a>
update.</p><h2 id="ReleaseNotes5.3-Sub-tasksCompleted">Sub-tasks
Completed</h2><p> </p><ul><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1433">TAP5-1433</a>] -
Remove deprecated methods of PerthreadManager service
</li><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1434">TAP5-1434</a>] -
Remove old IOCSymbols class, and outdated constants from IOCConstants
</li><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1435">TAP5-1435</a>] -
Remove proxy-related building method from ClassFabUtils, since moved to
ClassFactory#createProxy()
</li><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1436">TAP5-1436</a>] -
Remove @ApplicationState annotation, replaced with @SessionState
Modified: websites/production/tapestry/content/release-notes-531.html
==============================================================================
--- websites/production/tapestry/content/release-notes-531.html (original)
+++ websites/production/tapestry/content/release-notes-531.html Mon Feb 19
19:21:08 2018
@@ -77,7 +77,7 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><p>This bugfix release is a
drop-in replacement for the <a href="release-notes-531.html">5.3</a> release.
Any 5.3 user is encouraged to upgrade. Be sure to review the <a
href="release-notes-531.html">Release Notes 5.3.1</a> instructions first,
though.</p><p> </p><h2> Bugs Fixed
+ <div id="ConfluenceContent"><p>This bugfix release is a
drop-in replacement for the <a href="release-notes-531.html">5.3</a> release.
Any 5.3 user is encouraged to upgrade. Be sure to review the <a
href="how-to-upgrade.html">How to Upgrade</a> instructions first,
though.</p><p> </p><h2> Bugs Fixed
</h2>
<ul><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1762">TAP5-1762</a>] -
Some components do not include a description of their parameters in their
JavaDoc pages
</li><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1765">TAP5-1765</a>] -
PerThread scope is not honored when service is created using autobuild
Modified: websites/production/tapestry/content/release-notes-532.html
==============================================================================
--- websites/production/tapestry/content/release-notes-532.html (original)
+++ websites/production/tapestry/content/release-notes-532.html Mon Feb 19
19:21:08 2018
@@ -77,7 +77,7 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry versions 5.3.1 and 5.3.2. To upgrade, just update
the Maven dependency in you POM file (or <a
href="release-notes-532.html">download</a> the new JAR file) and the new
version will just work. However, please review the <a
href="release-notes-532.html">Release Notes 5.3.2</a> instructions before
upgrading. And be sure to check the <a href="release-notes-532.html">Release
Notes for 5.3</a> and <a href="release-notes-532.html">Release Notes for
5.3.1</a> too.</p><h2 id="ReleaseNotes5.3.2-NewFeatures">New Features</h2><h3
id="ReleaseNotes5.3.2-Componentfieldvisibility">Component field
visibility</h3><p>In prior versions of Tapestry, all instance fields of
components had to be visibility private; starting with version 5.3.2, this has
been relaxed. Component fields may be protected, or package private (that is,
no visibility modifier). Fields that are final, or annotated with @<a c
lass="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Retain.html">Retain</a>
may even be public. In any case, this makes it easier for pages to work with
other pages in the same package, and for subclasses to more easily access the
fields (including parameter fields, or injections) provided by base classes.
This feature should be used with care, as it can lead to designs that are more
difficult to maintain.</p><h3 id="ReleaseNotes5.3.2-Spring3.1upgrade">Spring
3.1 upgrade</h3><p>The Spring integration module has updated the Spring
dependencies to 3.1.0.RELEASE</p><h4
id="ReleaseNotes5.3.2-TextFieldcomponentsupportforHTML5values">TextField
component support for HTML5 values</h4><p>The <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/TextField.html">TextField</a>
components now support HTML5 any HTML5 type attribute.</p><p> </p><h2>
Bugs Fixed
+ <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry versions 5.3.1 and 5.3.2. To upgrade, just update
the Maven dependency in you POM file (or <a href="download.html">download</a>
the new JAR file) and the new version will just work. However, please review
the <a href="how-to-upgrade.html">How to Upgrade</a> instructions before
upgrading. And be sure to check the <a href="release-notes-53.html">Release
Notes for 5.3</a> and <a href="release-notes-531.html">Release Notes for
5.3.1</a> too.</p><h2 id="ReleaseNotes5.3.2-NewFeatures">New Features</h2><h3
id="ReleaseNotes5.3.2-Componentfieldvisibility">Component field
visibility</h3><p>In prior versions of Tapestry, all instance fields of
components had to be visibility private; starting with version 5.3.2, this has
been relaxed. Component fields may be protected, or package private (that is,
no visibility modifier). Fields that are final, or annotated with @<a
class="externa
l-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Retain.html">Retain</a>
may even be public. In any case, this makes it easier for pages to work with
other pages in the same package, and for subclasses to more easily access the
fields (including parameter fields, or injections) provided by base classes.
This feature should be used with care, as it can lead to designs that are more
difficult to maintain.</p><h3 id="ReleaseNotes5.3.2-Spring3.1upgrade">Spring
3.1 upgrade</h3><p>The Spring integration module has updated the Spring
dependencies to 3.1.0.RELEASE</p><h3
id="ReleaseNotes5.3.2-TextFieldcomponentsupportforHTML5values">TextField
component support for HTML5 values</h3><p>The <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/TextField.html">TextField</a>
components now support HTML5 any HTML5 type attribute.</p><p> </p><h2>
Bugs Fixed
</h2>
<ul><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1787">TAP5-1787</a>] -
TextField should be usable with HTML5 type values (such as "number", "email",
etc.)
</li><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1788">TAP5-1788</a>] -
Service id 'environment' has already been defined by
org.apache.tapestry5.services.TapestryModule with Spring 3.1
Modified: websites/production/tapestry/content/release-notes-533.html
==============================================================================
--- websites/production/tapestry/content/release-notes-533.html (original)
+++ websites/production/tapestry/content/release-notes-533.html Mon Feb 19
19:21:08 2018
@@ -77,7 +77,7 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry versions 5.3.2 and 5.3.3. Tapestry 5.3.3 is a
drop-in replacement for prior Tapestry 5.3 releases. To upgrade, just update
the Maven dependency in you POM file (or <a
href="release-notes-533.html">download</a> the new JAR file) and the new
version will just work. However, please review the <a
href="release-notes-533.html">Release Notes 5.3.3</a> instructions before
upgrading.</p><p>This is a very modest bug fix release, but it does straighten
out a significant problem with Java component classes containing non-private
fields.</p><p>For those developers not using Maven or Gradle, you'll be pleased
to know that this release now includes the option of a binary download
containing Tapestry's modules and main dependencies. More details are on the <a
href="release-notes-533.html">Release Notes 5.3.3</a> page.</p><p> 
+ <div id="ConfluenceContent"><p class="confluence-link">This is
the consolidated list of changes between Tapestry versions 5.3.2 and 5.3.3.
Tapestry 5.3.3 is a drop-in replacement for prior Tapestry 5.3 releases. To
upgrade, just update the Maven dependency in you POM file (or <a
href="download.html">download</a> the new JAR file) and the new version will
just work. However, please review the <a href="how-to-upgrade.html">How to
Upgrade</a> instructions before upgrading.</p><p>This is a very modest bug fix
release, but it does straighten out a significant problem with Java component
classes containing non-private fields.</p><p class="confluence-link">For those
developers not using Maven or Gradle, you'll be pleased to know that this
release now includes the option of a binary download containing Tapestry's
modules and main dependencies. More details are on the <a
href="download.html">Download</a>  page.</p><p> 
</p><h2> Bugs Fixed
</h2>
<ul><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1791">TAP5-1791</a>] -
On some JDKs, the complex regular expression used by
ComponentEventLinkEncoderImpl will cause a stack overflow
Modified: websites/production/tapestry/content/release-notes-534.html
==============================================================================
--- websites/production/tapestry/content/release-notes-534.html (original)
+++ websites/production/tapestry/content/release-notes-534.html Mon Feb 19
19:21:08 2018
@@ -77,7 +77,7 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry versions 5.3.3 and 5.3.4. Tapestry 5.3.4 is a
drop-in replacement for prior Tapestry 5.3 releases. To upgrade, just update
the Maven dependency in you POM file (or <a
href="release-notes-534.html">download</a> the new JAR file) and the new
version will just work. However, please review the <a
href="release-notes-534.html">Release Notes 5.3.4</a> instructions before
upgrading.</p><p>This is a very modest bug fix release, including a number of
minor performance improvements.</p><p>For those developers not using Maven or
Gradle, you'll be pleased that we now offer the option of a binary download
containing Tapestry's modules and main dependencies. More details are on the <a
href="release-notes-534.html">Release Notes 5.3.4</a>
page.</p><p> </p><h2> Bugs Fixed
+ <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry versions 5.3.3 and 5.3.4. Tapestry 5.3.4 is a
drop-in replacement for prior Tapestry 5.3 releases. To upgrade, just update
the Maven dependency in you POM file (or <a href="download.html">download</a>
the new JAR file) and the new version will just work. However, please review
the <a href="how-to-upgrade.html">How to Upgrade</a> instructions before
upgrading.</p><p>This is a very modest bug fix release, including a number of
minor performance improvements.</p><p class="confluence-link">For those
developers not using Maven or Gradle, you'll be pleased that we now offer the
option of a binary download containing Tapestry's modules and main
dependencies. More details are on the <a
href="download.html">Download</a> page.</p><p> </p><h2> Bugs Fixed
</h2>
<ul><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1729">TAP5-1729</a>] -
Sometimes YUICompressor can fail with java.util.EmptyStackException
</li><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1848">TAP5-1848</a>] -
tapestry-jpa ignores persistence provider from persistence.xml
Modified: websites/production/tapestry/content/release-notes-535.html
==============================================================================
--- websites/production/tapestry/content/release-notes-535.html (original)
+++ websites/production/tapestry/content/release-notes-535.html Mon Feb 19
19:21:08 2018
@@ -77,7 +77,7 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry included in version 5.3.5. Tapestry 5.3.5 is a
drop-in replacement for prior Tapestry 5.3 releases. To upgrade, just update
the Maven dependency in you POM file (or <a
href="release-notes-535.html">download</a> the new JAR file) and the new
version will just work. However, please review the <a
href="release-notes-535.html">Release Notes 5.3.5</a> instructions before
upgrading.</p><p>This is a very modest bug fix release, including a number of
minor performance improvements. Importantly, the bundled version of <a
class="external-link" href="http://prototypejs.org/2012/8/8/prototype-1-7-1"
rel="nofollow">Prototype</a> is now 1.7.1, which includes some significant
improvements and bug fixes that target Internet Explorer. However, the
prototype change <em>may</em> affect the functionality of the Tapestry
DateField component under some versions of Internet Explorer (this issue was
discovered late in the voting process).</p><p>For those developers not using
Maven or Gradle, you'll be pleased that we now offer the option of a binary
download containing Tapestry's modules and main dependencies. More details are
on the <a href="release-notes-535.html">Release Notes 5.3.5</a>
page.</p><p> 
+ <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry included in version 5.3.5. Tapestry 5.3.5 is a
drop-in replacement for prior Tapestry 5.3 releases. To upgrade, just update
the Maven dependency in you POM file (or <a href="download.html">download</a>
the new JAR file) and the new version will just work. However, please review
the <a href="how-to-upgrade.html">How to Upgrade</a> instructions before
upgrading.</p><p>This is a very modest bug fix release, including a number of
minor performance improvements. Importantly, the bundled version of <a
class="external-link" href="http://prototypejs.org/"
rel="nofollow">Prototype</a> is now 1.7.1, which includes some significant
improvements and bug fixes that target Internet Explorer. However, the
prototype change <em>may</em> affect the functionality of the Tapestry
DateField component under some versions of Internet Explorer (this issue was
discovered late in the voting proces
s).</p><p>For those developers not using Maven or Gradle, you'll be pleased
that we now offer the option of a binary download containing Tapestry's modules
and main dependencies. More details are on the <a
href="download.html">Download</a> page.</p><p> 
</p><h2> Bugs Fixed
</h2>
<ul><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1601">TAP5-1601</a>] -
Sometime a method that references a field with a conduit will not be
instrumented, resulting in an NPE accessing the field itself
Modified: websites/production/tapestry/content/release-notes-536.html
==============================================================================
--- websites/production/tapestry/content/release-notes-536.html (original)
+++ websites/production/tapestry/content/release-notes-536.html Mon Feb 19
19:21:08 2018
@@ -77,7 +77,7 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry versions 5.3.5 and 5.3.6. Tapestry 5.3.6 is a
drop-in replacement for prior Tapestry 5.3 releases. To upgrade, just update
the Maven dependency in your POM file (or <a
href="release-notes-536.html">download</a> the new JAR file) and the new
version will just work. However, please review the <a
href="release-notes-536.html">Release Notes 5.3.6</a> instructions before
upgrading.</p><p>This is a very modest bug fix release. Importantly, the
bundled version of <a class="external-link"
href="http://prototypejs.org/2012/8/8/prototype-1-7-1"
rel="nofollow">Prototype</a> has been downgraded back to version 1.7, as the
new version was causing a number of issues, especially under Internet
Explorer.</p><p>The main improvement is security related; Tapestry will now
integrate a <a class="external-link" href="http://en.wikipedia.org/wiki/HMAC"
rel="nofollow">hash-based message authenticati
on code</a> (HMAC) into serialized Java object data stored on the client
(generally, this means the <code>t:formdata</code> hidden field used by the
Form component).</p><p>When you first run your application under 5.3.6, you
will see an alert and a console error concerning the HMAC configuration. You
should update your application's configuration to set a unique, private value
for the <a href="release-notes-536.html">tapestry.hmac-passphrase</a>
configuration symbol.</p><p>And, as with any Tapestry upgrade, be sure to
change your <a href="release-notes-536.html">application's version
number</a>.</p><h2> Bugs Fixed
+ <div id="ConfluenceContent"><p class="confluence-link">This is
the consolidated list of changes between Tapestry versions 5.3.5 and 5.3.6.
Tapestry 5.3.6 is a drop-in replacement for prior Tapestry 5.3 releases. To
upgrade, just update the Maven dependency in your POM file (or <a
href="download.html">download</a> the new JAR file) and the new version will
just work. However, please review the <a href="how-to-upgrade.html">How
to Upgrade</a> instructions before upgrading.</p><p>This is a very modest bug
fix release. Importantly, the bundled version of <a class="external-link"
href="http://prototypejs.org/2012/8/8/prototype-1-7-1"
rel="nofollow">Prototype</a> has been downgraded back to version 1.7, as the
new version was causing a number of issues, especially under Internet
Explorer.</p><p>The main improvement is security related; Tapestry will now
integrate a <a class="external-link" href="http://en.wikipedia.org/wiki/HMAC"
rel="nofollow">hash-based message
authentication code</a> (HMAC) into serialized Java object data stored on the
client (generally, this means the <code>t:formdata</code> hidden field used by
the Form component).</p><p>When you first run your application under 5.3.6, you
will see an alert and a console error concerning the HMAC configuration. You
should update your application's configuration to set a unique, private value
for the <a href="configuration.html">tapestry.hmac-passphrase</a>
configuration symbol.</p><p>And, as with any Tapestry upgrade, be sure to
change your <a href="configuration.html">application's version
number</a>.</p><h2> Bugs Fixed
</h2>
<ul><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-986">TAP5-986</a>] - A
request can fail with an NPE in some cases, when a Tapestry page is acting as
the servlet container error page
</li><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-1735">TAP5-1735</a>] -
Most packages lack package-level javadocs
Modified: websites/production/tapestry/content/release-upgrade-faq.html
==============================================================================
--- websites/production/tapestry/content/release-upgrade-faq.html (original)
+++ websites/production/tapestry/content/release-upgrade-faq.html Mon Feb 19
19:21:08 2018
@@ -77,7 +77,14 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><h2
id="ReleaseUpgradeFAQ-ReleaseUpgradeFAQ">Release Upgrade FAQ</h2><p>Main
Article: <a href="release-upgrade-faq.html">Release Upgrade FAQ</a></p><h3
id="ReleaseUpgradeFAQ-WhydoIgetanexceptionaboutorg.apache.tapestry5.internal.services.RequestPathOptimizerafterupgradingto5.2?">Why
do I get an exception about
org.apache.tapestry5.internal.services.RequestPathOptimizer after upgrading to
5.2?</h3><p>Although Tapestry works very hard to keep backwards compatibility
between releases for <em>public</em> APIs, all <em>internal</em> APIs are
subject to change. This error is commonly due to the use of the ChenilleKit
library, which makes use of some internal APIs. You must also upgrade your
ChenilleKit dependency when moving from Tapestry 5.1 to 5.2 or later. See the
<a class="external-link"
href="http://tapestry.markmail.org/thread/3cj2wuvl4idnpmjr"
rel="nofollow">complete discussion of this from the Tapestry user mailing
list</a>.</p></div>
+ <div id="ConfluenceContent"><h1
id="ReleaseUpgradeFAQ-ReleaseUpgrade">Release Upgrade</h1><p>Main Article: <a
href="release-upgrade-faq.html">Release Upgrade FAQ</a></p><h2
id="ReleaseUpgradeFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
+div.rbtoc1519068042877 {padding: 0px;}
+div.rbtoc1519068042877 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068042877 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068042877">
+<ul class="toc-indentation"><li><a
href="#ReleaseUpgradeFAQ-WhydoIgetanexceptionaboutorg.apache.tapestry5.internal.services.RequestPathOptimizerafterupgradingto5.2?">Why
do I get an exception about
org.apache.tapestry5.internal.services.RequestPathOptimizer after upgrading to
5.2?</a></li></ul>
+</div><h2
id="ReleaseUpgradeFAQ-WhydoIgetanexceptionaboutorg.apache.tapestry5.internal.services.RequestPathOptimizerafterupgradingto5.2?">Why
do I get an exception about
org.apache.tapestry5.internal.services.RequestPathOptimizer after upgrading to
5.2?</h2><p>Although Tapestry works very hard to keep backwards compatibility
between releases for <em>public</em> APIs, all <em>internal</em> APIs are
subject to change. This error is commonly due to the use of the ChenilleKit
library, which makes use of some internal APIs. You must also upgrade your
ChenilleKit dependency when moving from Tapestry 5.1 to 5.2 or later. See the
<a class="external-link"
href="http://tapestry.markmail.org/thread/3cj2wuvl4idnpmjr"
rel="nofollow">complete discussion of this from the Tapestry user mailing
list</a>.</p></div>
</div>
<div class="clearer"></div>
Modified: websites/production/tapestry/content/request-processing-faq.html
==============================================================================
--- websites/production/tapestry/content/request-processing-faq.html (original)
+++ websites/production/tapestry/content/request-processing-faq.html Mon Feb 19
19:21:08 2018
@@ -77,13 +77,20 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><h2
id="RequestProcessingFAQ-RequestProcessing">Request Processing</h2><h3
id="RequestProcessingFAQ-HowdoIgetTapestrytonothandlearequest?">How do I get
Tapestry to <strong>not</strong> handle a request?</h3><p>Often, when <a
href="request-processing-faq.html">integrating with outside libraries, or
working with legacy code</a>, you will want Tapestry to ignore a request and
let the normal servlet or other processing handle the request.</p><p>The easy
way to do this is to contribute a regular expression to the <a
href="request-processing-faq.html">IgnoredPathsFilter service</a>, whose job is
to exclude some requests.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+ <div id="ConfluenceContent"><h1
id="RequestProcessingFAQ-RequestProcessing">Request Processing</h1><h2
id="RequestProcessingFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
+div.rbtoc1519068039004 {padding: 0px;}
+div.rbtoc1519068039004 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068039004 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068039004">
+<ul class="toc-indentation"><li><a
href="#RequestProcessingFAQ-HowdoIgetTapestrytonothandlearequest?">How do I get
Tapestry to not handle a request?</a></li></ul>
+</div><h2 id="RequestProcessingFAQ-HowdoIgetTapestrytonothandlearequest?">How
do I get Tapestry to <strong>not</strong> handle a request?</h2><p>Often, when
<a href="integration-with-existing-applications.html">integrating with outside
libraries, or working with legacy code</a>, you will want Tapestry to ignore a
request and let the normal servlet or other processing handle the
request.</p><p>The easy way to do this is to contribute a regular expression to
the <a href="configuration.html">IgnoredPathsFilter service</a>, whose job is
to exclude some requests.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">public static void
contributeIgnoredPathsFilter(Configuration<String> configuration)
{
configuration.add("/dwr/.*");
}
</pre>
-</div></div><p>Alternately, you may contribute a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestFilter.html">HttpServletRequestFilter</a>
to the <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestHandler.html">HttpServletRequestHandler</a>
pipeline. A filter that simply returns false from its <code>service()</code>
method will cause Tapestry to hand off the request to the servlet container for
normal handling. You would use this approach when a simple regular expression
is not sufficient to identify which requests should be
ignored.</p><p>Alternately, you can configure the Tapestry application to
execute inside a folder to avoid conflicts. See the notes on the <a
href="request-processing-faq.html">configuration page</a>.</p></div>
+</div></div><p>Alternately, you may contribute a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestFilter.html">HttpServletRequestFilter</a>
to the <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestHandler.html">HttpServletRequestHandler</a>
pipeline. A filter that simply returns false from its <code>service()</code>
method will cause Tapestry to hand off the request to the servlet container for
normal handling. You would use this approach when a simple regular expression
is not sufficient to identify which requests should be
ignored.</p><p>Alternately, you can configure the Tapestry application to
execute inside a folder to avoid conflicts. See the notes on the <a
href="configuration.html">configuration page</a>.</p></div>
</div>
<div class="clearer"></div>
Modified: websites/production/tapestry/content/security-faq.html
==============================================================================
--- websites/production/tapestry/content/security-faq.html (original)
+++ websites/production/tapestry/content/security-faq.html Mon Feb 19 19:21:08
2018
@@ -77,7 +77,14 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><h2
id="SecurityFAQ-SecurityFAQ">Security FAQ</h2><p> </p><div
class="aui-label" style="float:right" title="Related Articles">
+ <div id="ConfluenceContent"><h1
id="SecurityFAQ-Security">Security</h1><p>Main Article: <a
href="security.html">Security</a></p><h2
id="SecurityFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1519068040585 {padding: 0px;}
+div.rbtoc1519068040585 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068040585 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068040585">
+<ul class="toc-indentation"><li><a
href="#SecurityFAQ-Thebuilt-inDashboardpagearevisibleinmyproductionapplicationandIdon'twantthemtobe,whatcanIdo?">The
built-in Dashboard page are visible in my production application and I don't
want them to be, what can I do?</a></li></ul>
+</div><p> </p><div class="aui-label" style="float:right" title="Related
Articles">
@@ -119,7 +126,7 @@
</div>
-<h3
id="SecurityFAQ-Thebuilt-inDashboardpagearevisibleinmyproductionapplicationandIdon'twantthemtobe,whatcanIdo?">The
built-in Dashboard page are visible in my production application and I don't
want them to be, what can I do?</h3><p>First off all, don't panic: the <a
href="security-faq.html">Developer Dashboard</a> page is marked with the @<a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/WhitelistAccessOnly.html">WhitelistAccessOnly</a>
annotation, which makes it invisible to clients that are not on the whitelist.
Try accessing the page from a different workstation and you may find that the
pages are not visible after all.</p><p>Sometimes, in production, a firewall or
proxy may make it look like the client web browser originates from localhost;
in that situation, you may want to disable the logic that puts localhost onto
the whitelist. This determination is made by the contributions to the <a
class="external-link" href="h
ttp://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/security/ClientWhitelist.html">ClientWhitelist</a>
service. Tapestry makes a contribution with id "LocalhostOnly", which one of
your modules can override:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+<h2
id="SecurityFAQ-Thebuilt-inDashboardpagearevisibleinmyproductionapplicationandIdon'twantthemtobe,whatcanIdo?">The
built-in Dashboard page are visible in my production application and I don't
want them to be, what can I do?</h2><p>First off all, don't panic: the <a
href="development-dashboard.html">Development Dashboard</a> page is marked with
the @<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/WhitelistAccessOnly.html">WhitelistAccessOnly</a>
annotation, which makes it invisible to clients that are not on the whitelist.
Try accessing the page from a different workstation and you may find that the
pages are not visible after all.</p><p>Sometimes, in production, a firewall or
proxy may make it look like the client web browser originates from localhost;
in that situation, you may want to disable the logic that puts localhost onto
the whitelist. This determination is made by the contributions to the <a
class="extern
al-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/security/ClientWhitelist.html">ClientWhitelist</a>
service. Tapestry makes a contribution with id "LocalhostOnly", which one of
your modules can override:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> @Contribute(ClientWhitelist.class)
public static void
turnOffLocalhostInProduction(OrderedConfiguration<WhitelistAnalyzer>
configuration,
@Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode) {
Modified: websites/production/tapestry/content/specific-errors-faq.html
==============================================================================
--- websites/production/tapestry/content/specific-errors-faq.html (original)
+++ websites/production/tapestry/content/specific-errors-faq.html Mon Feb 19
19:21:08 2018
@@ -77,7 +77,14 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><div class="aui-label"
style="float:right" title="Related Articles">
+ <div id="ConfluenceContent"><h1
id="SpecificErrorsFAQ-SpecificErrors">Specific Errors</h1><h2
id="SpecificErrorsFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
+div.rbtoc1519068035112 {padding: 0px;}
+div.rbtoc1519068035112 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519068035112 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1519068035112">
+<ul class="toc-indentation"><li><a
href="#SpecificErrorsFAQ-WhydoIgettheexception"Noserviceimplementstheinterfaceorg.apache.tapestry5.internal.InternalComponentResources"whentryingtousetheBeanEditFormcomponent?">Why
do I get the exception "No service implements the interface
org.apache.tapestry5.internal.InternalComponentResources" when trying to use
the BeanEditForm component?</a></li><li><a
href="#SpecificErrorsFAQ-Igetanerrorabout"Pagedidnotgenerateanymarkupwhenrendered."butIhaveatemplate,whathappened?">I
get an error about "Page did not generate any markup when rendered." but I
have a template, what happened?</a></li><li><a
href="#SpecificErrorsFAQ-MyapplicationfailswiththeerrorPermGen,howdoIfixthis?">My
application fails with the error PermGen, how do I fix this?</a></li><li><a
href="#SpecificErrorsFAQ-WhydoIsometimesgetajava.lang.NoSuchMethodErrorexceptionafterreloadingmypage?">Why
do I sometimes get a java.lang.NoSuchMethodError exception after reloadi
ng my page?</a></li><li><a
href="#SpecificErrorsFAQ-Whydomylogscontain"java.lang.RuntimeException:FormsrequirethattherequestmethodbePOSTandthatthet:formdataqueryparameterhavevalues"?">Why
do my logs contain "java.lang.RuntimeException: Forms require that the request
method be POST and that the t:formdata query parameter have
values"?</a></li></ul>
+</div><div class="aui-label" style="float:right" title="Related Articles">
@@ -119,7 +126,7 @@
</div>
-<h3
id="SpecificErrorsFAQ-WhydoIgettheexception"Noserviceimplementstheinterfaceorg.apache.tapestry5.internal.InternalComponentResources"whentryingtousetheBeanEditFormcomponent?">Why
do I get the exception "No service implements the interface
org.apache.tapestry5.internal.InternalComponentResources" when trying to use
the BeanEditForm component?</h3><p>This can occur when you choose the wrong
package for your data object, the object edited by the BeanEditForm component.
If you place it in the same package as your pages, Tapestry will treat it like
a page, and perform a number of transformation on it, including adding a new
constructor.</p><p>Only component classes should go in the Tapestry-controlled
packages (<code>pages</code>, <code>components</code>, <code>mixins</code> and
<code>base</code> under your application's root package). By convention, simple
data objects should go in a <code>data</code> package, and Hibernate entities
should go in an <code>entities</code> pac
kage.</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"><p>This is likely a bit different in
5.3 than in 5.2 (because 5.3 builds a very different constructor into the
component) and needs to be tested in 5.3 to see what exact exception will
occur.</p></div></div><h3
id="SpecificErrorsFAQ-Igetanerrorabout"Pagedidnotgenerateanymarkupwhenrendered."butIhaveatemplate,whathappened?">I
get an error about "Page did not generate any markup when rendered." but I
have a template, what happened?</h3><p>The most common error here is that the
case of the page class did not match the case of the template. For example, you
might name your class ViewOrders, but name the template vieworders.tml. The
correct name for the template is ViewOrders.tml, matching the case of the Java
class name.</p><p>Worse, you may find tha
t your application works during development (under Windows, which is case
insensitive) but does not work when deployed on a Linux or Unix server, which
may be case sensitive.</p><p>The other cause of this may be that your template
files simply are not being packaged up correctly with the rest of your
application. When in doubt, use the Java <code>jar</code> command to see
exactly whats inside your WAR file. Your page templates should either be in the
root folder of the WAR, or package with the corresponding .class file.</p><h3
id="SpecificErrorsFAQ-MyapplicationfailswiththeerrorPermGen,howdoIfixthis?">My
application fails with the error <strong>PermGen</strong>, how do I fix
this?</h3><p>In Java versions <em>prior to</em> JDK 1.8, PermGen refers to the
part of the Java memory space devoted to permanent objects, which are mostly
loaded classes. When developing under Tapestry, many more classes and class
loaders are created than normal; this is part of live class reloading. Because
of
this, you will want to increase the amount of memory Java devotes to
this.</p><p>In JDK 1.7 and earlier, the solution is to add
<code>-XX:MaxPermSize=512m</code> to your command line. You may also want to
increase the regular amount of heap space with <code>-Xmx600M</code>. Of
course, you may need to adjust the amount of memory in each category to match
your actual application, but these are good starting values.</p><p>Java Virtual
Machine arguments can be specified inside an Eclipse launch
configuration:</p><p> </p><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image
confluence-thumbnail"
src="specific-errors-faq.data/eclipse-permgen.png"></span></p><h3
id="SpecificErrorsFAQ-WhydoIsometimesgetajava.lang.NoSuchMethodErrorexceptionafterreloadingmypage?">Why
do I sometimes get a <code>java.lang.NoSuchMethodError</code> exception after
reloading my page?</h3><p>Tapestry's live class reloading is not
perfect. <span>It tends to use a lot of J
ava ClassLoaders on top of the normal ClassLoaders used by the Java Virtual
Machine and the servlet container. When you change non-component classes and
interfaces that are referenced by components and pages, such as to add or
change a method, only the component classes are reloaded. The non-component
classes are frozen as they were when they were </span><em>first</em><span>
loaded.</span></p><p>Unfortunately, this is one of the areas where you must
restart your application entirely in order to force the new versions of the
non-component classes to be loaded into memory.</p><h3
id="SpecificErrorsFAQ-Whydomylogscontain"java.lang.RuntimeException:FormsrequirethattherequestmethodbePOSTandthatthet:formdataqueryparameterhavevalues"?">Why
do my logs contain "java.lang.RuntimeException: Forms require that the request
method be POST and that the t:formdata query parameter have
values"?</h3><p>This is caused by someone (or something) submitting the URL of
your form using an HTTP GE
T instead of POST. Tapestry forms must always use POST actions.</p><p>Some
known scenarios that cause this error:</p><ul><li>Bots crawling your
site</li><li>Web browser auto-complete functions trying to be
helpful</li><li>Users with browser developer tools manually modifying the form
from a POST to a GET to see what will happen.</li><li>Users getting a
validation error on a form, then re-submitting the form by clicking in the URL
address field and hitting Enter.</li><li>In Tapestry versions before 5.4,
(rarely) the use of property names for form fields where the property name
matches a JavaScript property (see <a class="external-link"
href="https://issues.apache.org/jira/browse/TAP5-2066">TAP5-2066</a>).</li></ul><p>In
every known scenario except the last, these errors are harmless and you
probably want to redirect the user to the page the form is on – and avoid
logging an error. That's not too hard to do. Just add code like the following
to your module class (usually AppModu
le.java):</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width:
1px;"><b>AppModule.java (partial)</b></div><div class="codeContent panelContent
pdl">
+<h2
id="SpecificErrorsFAQ-WhydoIgettheexception"Noserviceimplementstheinterfaceorg.apache.tapestry5.internal.InternalComponentResources"whentryingtousetheBeanEditFormcomponent?">Why
do I get the exception "No service implements the interface
org.apache.tapestry5.internal.InternalComponentResources" when trying to use
the BeanEditForm component?</h2><p>This can occur when you choose the wrong
package for your data object, the object edited by the BeanEditForm component.
If you place it in the same package as your pages, Tapestry will treat it like
a page, and perform a number of transformation on it, including adding a new
constructor.</p><p>Only component classes should go in the Tapestry-controlled
packages (<code>pages</code>, <code>components</code>, <code>mixins</code> and
<code>base</code> under your application's root package). By convention, simple
data objects should go in a <code>data</code> package, and Hibernate entities
should go in an <code>entities</code> pac
kage.</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"><p>This is likely a bit different in
5.3 than in 5.2 (because 5.3 builds a very different constructor into the
component) and needs to be tested in 5.3 to see what exact exception will
occur.</p></div></div><h2
id="SpecificErrorsFAQ-Igetanerrorabout"Pagedidnotgenerateanymarkupwhenrendered."butIhaveatemplate,whathappened?">I
get an error about "Page did not generate any markup when rendered." but I
have a template, what happened?</h2><p>The most common error here is that the
case of the page class did not match the case of the template. For example, you
might name your class ViewOrders, but name the template vieworders.tml. The
correct name for the template is ViewOrders.tml, matching the case of the Java
class name.</p><p>Worse, you may find tha
t your application works during development (under Windows, which is case
insensitive) but does not work when deployed on a Linux or Unix server, which
may be case sensitive.</p><p>The other cause of this may be that your template
files simply are not being packaged up correctly with the rest of your
application. When in doubt, use the Java <code>jar</code> command to see
exactly whats inside your WAR file. Your page templates should either be in the
root folder of the WAR, or package with the corresponding .class file.</p><h2
id="SpecificErrorsFAQ-MyapplicationfailswiththeerrorPermGen,howdoIfixthis?">My
application fails with the error <strong>PermGen</strong>, how do I fix
this?</h2><p>In Java versions <em>prior to</em> JDK 1.8, PermGen refers to the
part of the Java memory space devoted to permanent objects, which are mostly
loaded classes. When developing under Tapestry, many more classes and class
loaders are created than normal; this is part of live class reloading. Because
of
this, you will want to increase the amount of memory Java devotes to
this.</p><p>In JDK 1.7 and earlier, the solution is to add
<code>-XX:MaxPermSize=512m</code> to your command line. You may also want to
increase the regular amount of heap space with <code>-Xmx600M</code>. Of
course, you may need to adjust the amount of memory in each category to match
your actual application, but these are good starting values.</p><p>Java Virtual
Machine arguments can be specified inside an Eclipse launch
configuration:</p><p> </p><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image
confluence-thumbnail"
src="specific-errors-faq.data/eclipse-permgen.png"></span></p><h2
id="SpecificErrorsFAQ-WhydoIsometimesgetajava.lang.NoSuchMethodErrorexceptionafterreloadingmypage?">Why
do I sometimes get a <code>java.lang.NoSuchMethodError</code> exception after
reloading my page?</h2><p>Tapestry's live class reloading is not
perfect. <span>It tends to use a lot of J
ava ClassLoaders on top of the normal ClassLoaders used by the Java Virtual
Machine and the servlet container. When you change non-component classes and
interfaces that are referenced by components and pages, such as to add or
change a method, only the component classes are reloaded. The non-component
classes are frozen as they were when they were </span><em>first</em><span>
loaded.</span></p><p>Unfortunately, this is one of the areas where you must
restart your application entirely in order to force the new versions of the
non-component classes to be loaded into memory.</p><h2
id="SpecificErrorsFAQ-Whydomylogscontain"java.lang.RuntimeException:FormsrequirethattherequestmethodbePOSTandthatthet:formdataqueryparameterhavevalues"?">Why
do my logs contain "java.lang.RuntimeException: Forms require that the request
method be POST and that the t:formdata query parameter have
values"?</h2><p>This is caused by someone (or something) submitting the URL of
your form using an HTTP GE
T instead of POST. Tapestry forms must always use POST actions.</p><p>Some
known scenarios that cause this error:</p><ul><li>Bots crawling your
site</li><li>Web browser auto-complete functions trying to be
helpful</li><li>Users with browser developer tools manually modifying the form
from a POST to a GET to see what will happen.</li><li>Users getting a
validation error on a form, then re-submitting the form by clicking in the URL
address field and hitting Enter.</li><li>In Tapestry versions before 5.4,
(rarely) the use of property names for form fields where the property name
matches a JavaScript property (see <a class="external-link"
href="https://issues.apache.org/jira/browse/TAP5-2066">TAP5-2066</a>).</li></ul><p>In
every known scenario except the last, these errors are harmless and you
probably want to redirect the user to the page the form is on – and avoid
logging an error. That's not too hard to do. Just add code like the following
to your module class (usually AppModu
le.java):</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width:
1px;"><b>AppModule.java (partial)</b></div><div class="codeContent panelContent
pdl">
<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> /**
* Redirect the user to the intended page when browsing through
* tapestry forms through browser history or over-eager autocomplete