This is the consolidated list of changes between Tapestry versions 5.3 and 5.4. To upgrade to 5.4, most users who are not using deprecated features will be able to just update the dependency version in their Maven POM file or Gradle build script (or download the new JAR files) and the new version will just work, although the introduction of Bootstrap CSS will require some styling adjustments for most applications not already using Bootstrap. Please read carefully below before upgrading, and also review the How to Upgrade instructions.
Tapestry's use of the Javassist bytecode library has been completely removed, along with many related services, such as ClassFactory, that were deprecated in 5.3. Use PlasticProxyFactory instead. Most users will not be affected by this unless they relied on Tapestry's dependency on Javassist.
ClientBehaviorSupport Functionality Removed
This service collected details about zone usage, including the client-side behavior associated with
FormFragments. This interface is only kept for binary compatibility in Tapestry 5.4; the implementation no longer does anything but throw exceptions and will be removed in 5.5 or later.
The FormInjector component was removed; it was intended for use only inside the AjaxFormLoop component (which was rewritten in 5.4 and no longer uses FormInjector). FormInjector was not widely used elsewhere, if it was used at all.
MarkupWriterFactory API Changed
Injected Scripts at Bottom
No Redirect On Form Validation Errors
In prior releases of Tapestry, when a client-side form was submitted and there were server-side validation errors, Tapestry would perform a redirect-after-post to re-render the page; this meant that the ValidationTracker object that stores validation errors would, itself, need to persist to the new render request, causing a server-side session to be created. Starting in 5.4, the default behavior for server-side validation exceptions is to re-render the page content immediately, within the same request; this obviates the need to use a persistent field to store the tracker.
Component field visibility
In prior versions of Tapestry, all instance fields of components had to be visibility private; starting with versions 5.3.2 and 5.4, this has been relaxed. Component fields may be protected, or package private (that is, no visibility modifier). Fields that are final, or annotated with @Retain 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.
Client-side API for invoking server-side events
@PublishEvent annotation. Then, in JS, all you need to do is to call the
t5/core/ajax function with the server-side event name/type in the
url parameter and with an
options parameter containing an
element property, be it null or specifying an DOM element to be used as the starting point for finding the event information. More details in the Ajax and Zones page.