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 download the new JAR file) and the new version will just work. However, please read carefully below before upgrading.
Breaking Changes
Tapestry now depends on Servlet API version 2.5 (prior releases worked with 2.4).
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 ComponentResources object, and invoke getCompleteId()
.
Tapestry templates without a <!DOCTYPE> are treated a bit differently in Tapestry 5.3; they are treated as if they have the HTML doctype (<!DOCTYPE html>
). See further notes about component templates.
Many classes and interfaces that were deprecated in prior releases of Tapestry have been removed in Tapestry 5.3. See the full list. As always, you should use your IDE to find and replace all deprecated items before you upgrade. The following are the most significant of these:
- @IncludeJavaScriptLibrary and @IncludeStylesheet annotations (replaced by @Import)
- @ApplicationState annotation (replaced with @SessionState)
- "validateForm" event triggered by Form component (replaced with "validate" event)
- Code and constants related to page pooling
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.
Because of the upgrade to Prototype 1.7, existing JavaScript that uses value.toJSON()
may break; replace with Object.toJSON(value)
.
Some number of interfaces and APIs in Tapestry 5.3 will be removed in Tapestry 5.4 or later. These include:
- The RenderSupport environmental (replaced with the JavaScriptSupport environmental)
- ClassFactory service and ClassFab interface (replaced with the PlasticProxyFactory service and PlasticClass interface)
- The "suppress redirects" functionality, which allows component event requests to respond directly with HTML, as in Tapestry 4.
New Features
User Alerts
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.
Rendering comments
It is now possible to have Tapestry emit rendering comments; these are comments (such as <!--BEGIN Index:loop (context:Index.tml, line 15)-->
) that can assist you in debugging markup output on the client-side. This is enabled for all requests using the configuration symbol tapestry.component-render-tracing-enabled
, and can be added to any request by adding the query parameter t:component-trace=true
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.
Adaptable service contributions
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.
Component debugging improvements
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 the debugger, regardless of what has been written to the field or read out of it. In Tapestry 5.3, when in development mode, 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.
Reloading disabled in production
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.
String-to-Enum coercions
The TypeCoercer service now automatically 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.
JavaScript and CSS minimization
A new optional library, tapestry-yuicompressor, has been added. This library adds support for compressing JavaScript libraries and CSS files using the YUICompressor library
ComponentClassTransformWorker Service
The type of this service has changed from ComponentClassTransformWorker to ComponentClassTransformWorker2. 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 contributeComponentClassTransformWorker()
, you don't need to change anything.
Tapestry JavaDoc
Tapestry now includes a new library, tapestry-javadoc, that replaces the old Maven-based component report. Simply by placing a @tapestrydoc annotation into your component's JavaDoc, Tapestry will generate complete documentation as part of JavaDoc ... no more switching back and forth, and no more reliance on Maven for component documentation.
Skinning / Theming Support
Tapestry now adds the ability to skin and/or theme your pages and components. Its an extension of how Tapestry manages pages per locale, but adds new application-defined axes along with rules to find the resources.
There's also a new Dynamic component, which uses an external template, not a Tapestry template, which can be chosen at runtime.
Tree Component
Tapestry finally has a proper Tree component for navigating hierarchical data. It's efficient and Ajax-enabled, and fully customizable.
Form Cancelled Event
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.
Implicit OrderedConfiguration Constraints
When using OrderedConfiguration.add()
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.
New Component Class Validations
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 From
component id 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 dead event handler methods that will never be invoked).
Application Folder
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.
Improved Quickstart Archetype
The Maven quickstart archetype has been brought up to date, and now demonstrates several new bits of common useful functionality.
Whitelisted Pages
The new @WhitelistAccessOnly annotation marks a page as accessible only from white-listed clients; the rules for the whitelist are extensible. 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.
Page Catalog
Tapestry applications now include a built-in "PageCatalog" 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).
Quickstart Archetype Improvements
The Maven Quickstart Archetype has been improved; it now demonstrates many more features of Tapestry. In addition, it constructs a Gradle build.gradle file for the created project.
Removed Functionality
The integrated Blackbird client-side console has been removed. In its place are the floating console messages (used when Blackbird is disabled) combined with logging to the Firebug or WebKit console. This should make debugging client-side JavaScript much easier. 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.
JIRA Issues
Sub-task
- [TAP5-1433] - Remove deprecated methods of PerthreadManager service
- [TAP5-1434] - Remove old IOCSymbols class, and outdated constants from IOCConstants
- [TAP5-1435] - Remove proxy-related building method from ClassFabUtils, since moved to ClassFactory#createProxy()
- [TAP5-1436] - Remove @ApplicationState annotation, replaced with @SessionState
- [TAP5-1437] - Remove @IncludeJavaScriptLibrary and @IncludeStylesheet annotations, replaced by @Import
- [TAP5-1438] - Remove OptimizedApplicationStateObject, replaced with OptimizedSessionStateObject
- [TAP5-1439] - Remove PrimaryKeyEncoder (replaced by ValueEncoder)
- [TAP5-1440] - Remove "validateForm" event triggered by Form component (replaced with "validate" event)
- [TAP5-1441] - Remove ValidationMessagesSource, replaced with ComponentMessagesSource
- [TAP5-1455] - Remove code and constants related to page pooling
- [TAP5-1456] - Remove symbol for absolute URIs (now always absolute since 5.2)
- [TAP5-1457] - Remove SCRIPTS_AT_TOP from SymbolConstants
- [TAP5-1459] - Remove AbstractField.createDefaultParameterBinding() and AbstractTextField.defaultValue()
- [TAP5-1460] - Remove deprecated constants from FormInjector
- [TAP5-1461] - Remove Loop.volatile parameter (replaced with formState parameter in 5.1)
- [TAP5-1462] - Remove Element.getParent()
- [TAP5-1463] - Remove EndTagStyle.OMIT
- [TAP5-1464] - Remove ClasspathAssetAliasManager.toResourcePath()
- [TAP5-1465] - Remove Environment.getAccess()
- [TAP5-1466] - Remove deprecated methods from TapestryTestCase
- [TAP5-1467] - Remove deprecated methods from ClassTransformation
Bug
- [TAP5-5] - Context lost in a form fragment in a property editor component
- [TAP5-7] - Palette component error marker appears on the line below the component when validation fails.
- [TAP5-8] - Application message catalog is only used when a not localized version is present
- [TAP5-9] - Component event requests that fail should still send a redirect (to the exception report page)
- [TAP5-16] - Error popups are not positioned well near the edges of the page
- [TAP5-17] - Null value in RadioGroup returns the string "on"
- [TAP5-19] - Clicking on autocomplete scrollbar in Internet Explorer clears results
- [TAP5-21] - Misleading error message when a component sub-class invokes non-default constructor of parent component class
- [TAP5-26] - When @Validate("required") is applied to a field whose type is primitive, the client-side JavaScript includes two invocations of Tapestry.Validator.required
- [TAP5-31] - DateField Calendar component has scroll bar burn through
- [TAP5-35] - During an Ajax update, using a "var:" binding prefix causes an exception indicating that the page is not rendering
- [TAP5-36] - Only the last of multiple t:parameter components with the same name in the same grid are rendered, without an error message.
- [TAP5-38] - Validation error bubble positioning should be different for checkbox and radio than for other types of fields
- [TAP5-40] - Pop up error bubbles (for client side validation) do not interact properly with IE 6 select elements
- [TAP5-115] - Component report doesn't list parameters inherited from classes outside the project
- [TAP5-137] - org.hibernate.TransactionException thrown when a transaction is directly rolledback (outside of tapestry-hibernate)
- [TAP5-218] - the tapestry banner image on the component reference index page and the component reference pages links to wrong pages
- [TAP5-763] - Documentation for RenderSupport.addScriptLink() is invalid about where the included links go
- [TAP5-832] - Hidden input field fails with coercion problem on empty value (patch incl)
- [TAP5-845] - Informal Parameters are not allowed to have the value "" (the empty string)
- [TAP5-875] - BigTypesFormatter should allow for plain space as a grouping separator since FF2 replaces non-breaking space character \u00A0 (grouping separator for Sweden, Finland , etc) with normal space \u0020
- [TAP5-877] - Fade effect for error popups should be disabled in IE since it can't properly fade the images
- [TAP5-891] - RequestImpl.getSession(true) is broken
- [TAP5-922] - Allow a null or blank value to be supplied in Link.addParameter(), and render out the parameter name with the missing value
- [TAP5-998] - Exception when a form element component is not enclosed by a Form is odd: uses the form's label to identify the component in question
- [TAP5-1146] - In a Multi-Zone update, if the identified Zone does not exist, the content is silently dropped (should log an error to the client-side console)
- [TAP5-1227] - Binding a parameter whose type is primitive to null results in a difficult to understand NullPointerException
- [TAP5-1257] - Javascript error with IE Prototype still in 1.7
- [TAP5-1331] - EnumValueEncoder should identify legal values when a non-matching string is passed to it for conversion
- [TAP5-1336] - Changed classes do not reload under Tomcat
- [TAP5-1339] - Provide a single extension point to provide a ValidationDecorator instance for both traditional and Ajax renders
- [TAP5-1355] - Threading issue with SessionStateObjects
- [TAP5-1366] - Tapestry must honor the position of added tags in the <head> relative to the <meta> tags, for IE compatibility
- [TAP5-1367] - ajaxExceptionHandler Method name typo
- [TAP5-1368] - The onFailure function provided to Tapestry.ajaxRequest does not always get invoked
- [TAP5-1369] - ExceptionUtils.findCause() does not use the same approach as ExceptionAnalyzer
- [TAP5-1372] - BaseURLSource uses getLocalPort() rather than getServerPort()
- [TAP5-1374] - Quickstart layout component uses deprecated IncludeStyleSheet annotation
- [TAP5-1383] - TypeCoercer should "promote" coercions to primitive types into coercions to the corresponding wrapper type
- [TAP5-1393] - Form component shoould push the BeanValidationContext into the Environment only after onPrepare()
- [TAP5-1408] - datefield popup does not have option to cancel
- [TAP5-1409] - datefield - cannot select same day in different month
- [TAP5-1418] - Image submits do not set the javascript submitting element value.
- [TAP5-1422] - java.util.ConcurrentModificationException when shutting down jmx server
- [TAP5-1423] - Selenium test failures attempt to take a screenshot, which fails on most browsers besides firefox
- [TAP5-1428] - When a parameter is bound but does not match a formal parameter, the exception should also include a list of formal parameter names
- [TAP5-1429] - PageTester does not call registry.performRegistryStartup or TapestryAppInitializer.announceStartup
- [TAP5-1444] - Index pages in subfolders should have precedence over start pages
- [TAP5-1448] - Example for org.apache.tapestry5.corelib.components.Errors uses invalid xml
- [TAP5-1486] - When Tapestry adds CSS and JS files to the page, it should ensure that CSS files are above any JavaScript files
- [TAP5-1491] - In Chrome the buttons in the Palette component do not appear greyed-out when disabled
- [TAP5-1497] - No error message upon exception calling initializer function with German locale
- [TAP5-1500] - Update ComponentClassResolve's JavaDocs
- [TAP5-1510] - The @Advise annotation limits advice to just a specific interface type
- [TAP5-1527] - BeanEditForm loses object found by onPrepare() during render
- [TAP5-1535] - When there's a type mismatch between a container component at the field with @InjectComponent, the type of the containing component should be part of the exception message
- [TAP5-1546] - TranslatorSource incorrectly annotated with @UsesConfiguration when it should now be @UsesMappedConfiguration (as of 5.2)
- [TAP5-1549] - ParameterWorker forces evaluation of default method, even if the parameter is bound by other means
- [TAP5-1551] - FormFragment change visibility/hide and remove event listeners should call event.stop() to prevent container fragments from also being hidden
- [TAP5-1554] - Tapestry fails on OpenJDK with a java.lang.reflect.GenericSignatureFormatError
- [TAP5-1555] - Property Expression Array Disallows null and this
- [TAP5-1562] - Tree leafs are not selectable
- [TAP5-1563] - Need configuration for queue size w/ ParallelExecutor; as is, limited to pool core size threads, rather than pool max size
- [TAP5-1571] - t5-console.js throws exception in Chrome for debug, info, and warn
- [TAP5-1576] - JPA Integration 5.3.0 with Primary Key Entity Classes Fails
- [TAP5-1577] - Duplication in operation trace when invoking certain methods
- [TAP5-1578] - When toggling the visibility of a form fragment, the effective visibility doesn't change until after the animation completes
- [TAP5-1580] - A Form with an event listener for "canceled" event can cause an NPE popping off a BeanEditContext from the Environment that wasn't pushed
- [TAP5-1585] - @InjectPage annotation can leak page instances from one locale to another
- [TAP5-1593] - Type org.apache.tapestry5.services.HttpError should be an allowed return value from Ajax action requests
- [TAP5-1596] - Tapestry should validate that component ids reference in event handler method names (or @OnEvent annotation) exist
- [TAP5-1598] - AlertManager service does the wrong thing if the Ajax request will terminate with a redirect
- [TAP5-1599] - Upgrade Selenium to 2.3.1
- [TAP5-1605] - Template parsing of expansions can't handle map expressions
- [TAP5-1608] - tapestry-ioc establishes dependency on TestNG that brings much unwanted stuff into runtime classpath
- [TAP5-1613] - Mixin inherited from parent model does not inherit order
- [TAP5-1614] - Component Javadocs need clarification on encoder parameter being "required"
- [TAP5-1620] - Tml parsing expression error
- [TAP5-1629] - A Tree component that does not have a selection model bound should not track selections on the client or server
- [TAP5-1631] - Tapestry creates client ids for error popups containing the ':' character, which is problematic for some browsers (and some testing tools)
- [TAP5-1632] - When a submit component does not have a specific id, the default id "submit" collides ont the client side with the HTMLFormElement.submit() method, causing JavaScript errors when the form is submitted
- [TAP5-1636] - Tapestry does not compile using OpenJDK
- [TAP5-1643] - Restore ability to contribute a library mapping that includes the "/" character (as was possible in 5.1)
- [TAP5-1644] - Symbol tapestry.compatibility.unknown-component-id-check-enabled when set to false still acts as if true
- [TAP5-1647] - PerThreadOperationTracker uses a synchronized block with high thread contention
- [TAP5-1652] - template expansion no longer trims whitespace off the right side of the expansion
- [TAP5-1656] - Problem when inheriting annotated methods from a abstract superclass
- [TAP5-1657] - Environment should use the UnknownValueException class, for better reporting on the exception page
- [TAP5-1670] - Debug output includes [[invoking-method]] (i.e., missing message key) when invoking contribution methods
- [TAP5-1673] - Tapestry 5.2 property expressions supported references to public static fields of classes; this is not supported by 5.3
- [TAP5-1675] - Tapestry 5.3 allows a subcomponent to define a parameter with the same name as a base component
- [TAP5-1676] - When an @InjectComponent annotation fails due to missing component, it should identify the class name and field for the injection
Dependency upgrade
- [TAP5-1653] - Update dependencies to latest versions
Improvement
- [TAP5-2] - DateField customization
- [TAP5-27] - Improve exception message for default field validation when value parameter is not bound.
- [TAP5-44] - enable creation of custom "onException" event handler
- [TAP5-46] - Palette component should support drag and drop of the options
- [TAP5-55] - Persistence strategy should alternately be specified via an annotation on the persisted field
- [TAP5-58] - Tapestry should be smarter about event handler methods refiring events with the same name
- [TAP5-65] - Validate fields based on EJB annotations
- [TAP5-76] - Provide decorators service matching based on annotations
- [TAP5-83] - add a contructor with page class as parameter to BeanBlockContribution
- [TAP5-96] - Component parameter report should document alternate types
- [TAP5-98] - The TypeCoercer should be able to coerce String to Enum types, even without a specific contribution
- [TAP5-99] - Frequently instantiated service implementations should have a specialized instantiation class created to prevent extra reflection calls
- [TAP5-113] - Ordering with pre/post requisites could be simplified, improved
- [TAP5-117] - Allow contributing whole page to BeanBlockSource
- [TAP5-167] - Applications should support both secured or unsecured access based on initial access method
- [TAP5-170] - Basic generics support should apply to parameters of event handler methods as well as getters and setters
- [TAP5-171] - Filter out attributes with default value (from DTD) when parsing templates
- [TAP5-172] - It should be possible to merge validation constraints from the @Validate annotation with those explicitly set via the validate parameter
- [TAP5-174] - Allow Zone requests to be cancelled
- [TAP5-175] - maintain querystring parameters during @Secure redirect from http to https
- [TAP5-176] - Enable @Mixins annotation in component classes
- [TAP5-178] - Support for optional validator constraints
- [TAP5-180] - make an ClientPersistentFieldStorageImpl abstract class
- [TAP5-183] - Include mention of webdefault.xml in tapestry-test page
- [TAP5-189] - When re-rendering a page with form validation errors, error pop-ups should be presented to the user as with normal client-side validation
- [TAP5-198] - Handling Exceptions in Components by replacing/returning another component
- [TAP5-199] - Tapestry writes localization initialization information for DateField even when in locale "en"
- [TAP5-203] - Palette should be able to determine the generic type of the List passed to it, and use that to create default bindings for the model and encoder parameters
- [TAP5-204] - The email validator should include client-side validation
- [TAP5-450] - Add rel="nofollow" to t:grid sort links
- [TAP5-455] - Allow discarding of persistent field changes for specific strategy only
- [TAP5-606] - Add Finnish translation to javascript messages (Translated messages attached.)
- [TAP5-650] - Enhance form autofocus to accept fieldname as a value
- [TAP5-683] - The Tapestry object should include an info() for logging to the console (as it already includes error(), debug(), etc.)
- [TAP5-741] - CSS files should be automatically minimalized, like JavaScript files
- [TAP5-743] - It is too much work to hide all T5 pages inside a virtual folder, for use in mixed-implementation deployments
- [TAP5-840] - Support character references in tml files with HTML 5 Doctype
- [TAP5-853] - Move away from Javassist
- [TAP5-888] - The Tapestry.ErrorPopup client-side class should create the div/span as needed (not at page initialization)
- [TAP5-933] - EnumValueEncoder will create a ValueEncoder even when there's a specific String->Enum type coercion
- [TAP5-939] - Chinese localization for ValidationMessages_zh_CN
- [TAP5-941] - Chinese localization for corelib components
- [TAP5-980] - ValidationDecorator should be a service, rather than just a contributed object, to make it easier to override
- [TAP5-1040] - Allow HTML5 doctype to be printed
- [TAP5-1184] - m2eclipse update site changed
- [TAP5-1199] - ClassTransformation should include an API specifically for adding a component event handler to a component class
- [TAP5-1208] - In development mode, Tapestry should "shadow" field & parameter values to instance variables, to assist with debugging
- [TAP5-1308] - When an Ajax requests replies with the error page, Tapestry should present the contents in a popup window
- [TAP5-1310] - The Enum ValueEncoder should be case insensitive
- [TAP5-1320] - ServiceActivity improvements
- [TAP5-1323] - Change Quickstart Template to Match New Site Design
- [TAP5-1348] - Component report should accept multiple root packages
- [TAP5-1350] - TapestryFilter should allow sub-classes to specify additional module classes, not just ModuleDefs
- [TAP5-1356] - When contributing to a service configuration, values should be coerced to the correct type rather than rejected if not the correct type
- [TAP5-1361] - Tapestry should include a coercion from Flow to List
- [TAP5-1362] - Tapestry should provide coercions from String to JSONObject and JSONArray
- [TAP5-1378] - Allow Delegate component to be used for creating in-template components
- [TAP5-1382] - Tapestry should provide a coercion from Flow to boolean, that evaluates to true if the Flow is not empty
- [TAP5-1389] - Access properties of generic page and component fields
- [TAP5-1390] - Functional programming improvements
- [TAP5-1396] - Invocation class should provide access to the annotations placed on the method beeing invoked
- [TAP5-1414] - Add HOSTNAME symbol to SymbolConstants, use in BaseUrlSource
- [TAP5-1419] - Tapestry tests should be able to be run from more than just Jetty
- [TAP5-1431] - Quickstart should enable the Blackbird client-side console
- [TAP5-1450] - Component report should print information about deprecated components or deprecated parameters
- [TAP5-1451] - Form component should indicate that a form submission was canceled on the client side
- [TAP5-1458] - Mark tapestry.suppress-redirect-from-action-requests as deprecated, for removal in Tapestry 5.4
- [TAP5-1469] - Allow for multiple application root packages by contributing additional LibraryMappings with empty virtual folder
- [TAP5-1473] - Running integration tests with Tomcat6Runner it should be possible to configure the application under test by providing a local context.xml file
- [TAP5-1476] - Deprecate MultiZoneUpdate, replace with an injectable service to collect zone updates
- [TAP5-1482] - Upgrade Prototype to 1.7 / Scriptaculous 1.9.0
- [TAP5-1485] - Quickstart archetype should define a ProductionModeModule and DevelopmentModeModule with support inside web.xml
- [TAP5-1489] - Re-storage of session attributes at end of request should be configurable (can be set to off for non-clustered applications)
- [TAP5-1492] - New features for SeleniumTestCase
- [TAP5-1495] - Tapestry's property expression language should support map creation
- [TAP5-1496] - Link components should support easily adding request parameters to the generated link
- [TAP5-1508] - Reduce memory utilization of Tapestry page instances
- [TAP5-1519] - Ensure that all calls to invoke methods and constructors with dependencies are tracked with the OperationTracker
- [TAP5-1521] - JavaScriptSupport.addInitializerCall() should support JSONArray of function parameters, as RenderSupport does
- [TAP5-1523] - Dutch validation messages
- [TAP5-1538] - Optimize client-side URL rebuilding in IE 7
- [TAP5-1539] - Optimize document scans used by Tapestry.FieldEventManager to not locate the label or icon until actually needed
- [TAP5-1547] - Tapestry should include built-in coercions from String to JSONObject and JSONArray
- [TAP5-1558] - FormFragment should allow more fine grained control over when to be considered "invisible"
- [TAP5-1564] - RenderSupport is used in Upload.java even though it has been deprecated
- [TAP5-1565] - It should be easier to make a series of contributions to an OrderedConfiguration so that the contributions are in sequential orderer
- [TAP5-1567] - Contributions to the ValueEncoderSource service should allow bare ValueEncoders, which can be coerced to ValueEncoderFactory
- [TAP5-1574] - Provide constants for available data types
- [TAP5-1581] - MarkupWriterImpl makes many, many defensive copies of its listener list
- [TAP5-1588] - French properties file for the kaptcha component
- [TAP5-1591] - tapestry-ioc should not depend on tapestry-json
- [TAP5-1594] - Provide edit block for Kaptcha component
- [TAP5-1597] - Update Italian local support
- [TAP5-1603] - Tapestry should omit stack frames related to the OperationTracker from exception report
- [TAP5-1621] - TypeCoercer currently uses Object -> String and String -> Boolean, there should be a direct coercion from Object -> Boolean for <t:if/> performance.
- [TAP5-1627] - Enable OperationTracker to produce debug trace of all operations
- [TAP5-1628] - Have Submit documentation explicitly state when the disabled attribute is evaluated
- [TAP5-1633] - Hardcoded value for "Dismiss All" in AlertManager
- [TAP5-1637] - Tapestry should use SoftReferences for page instances, rather than run a janitor thread to clean them up
- [TAP5-1638] - Reduce thread contention inside ComponentClassResolverImpl
- [TAP5-1639] - Missing danish translations
- [TAP5-1641] - The ValueEncoder for Hibernate entity types should encode transient instances as null rather than throw an exception
- [TAP5-1649] - ComponentClassResolver should allow "common package root name" of a single term, and not require two terms
- [TAP5-1651] - It should be possible for a LinkCreationListener to override Tapestry and make a Link secure or insecure after the fact
- [TAP5-1665] - Tapestry could create non-singleton services more efficiently
- [TAP5-1669] - Palette Documentation
- [TAP5-1674] - Add ServiceBinder.withSimpleId() that generates a service id from the implementation class name
New Feature
- [TAP5-54] - Add configurable limits on how long (in ms) or how many operations are allowed when rendering
- [TAP5-67] - Split persistence strategy into two parts: where the data is stored (session, client, hidden fields, etc.) and duration (normal, flash, maybe others)
- [TAP5-68] - Add ability to use Seam and Tapestry 5 together
- [TAP5-71] - Add a Tree component in corelib
- [TAP5-72] - Improve Groovy support in Tapestry
- [TAP5-73] - JavaScript libraries should be automatically packed/minimalized
- [TAP5-82] - Allow Blocks to render themselves initially
- [TAP5-85] - Make Java Class optional for Rendering Pages
- [TAP5-94] - Add a "hidden fields" parameter to BeanEditor and BeanEditForm
- [TAP5-102] - Add a "default sort column" parameter to Grid component
- [TAP5-110] - let make JSONObject secured
- [TAP5-111] - Protect serialized object blobs from being tampered by external user
- [TAP5-120] - Make Tapestry 5 ready for IDE content assistance
- [TAP5-122] - Integrate scriptaculous Ajax.InPlaceEditor with Tapestry
- [TAP5-141] - The ServiceActivityScoreboard should provide greater detail, including method invocation counts and elapsed times
- [TAP5-142] - HTML Button component with Form support
- [TAP5-143] - Add client-side column resizing to grid.
- [TAP5-144] - TestBase should support creating new class mocks (using easymockclassextension), not just traditional interface mocks
- [TAP5-145] - TextField should include a parameter that will render a "suffix" (that appears between the field itself and any error decoration icons)
- [TAP5-149] - Add JPA-annotation-driven validator
- [TAP5-153] - Way to simulate annotations on classes, fields and methods
- [TAP5-155] - Tapestry is missing a BinaryStreamResponse for streaming binary data to the client
- [TAP5-158] - @Persist("redirection")
- [TAP5-159] - TapestryFilter should support HTTP 1.1 byte ranges
- [TAP5-742] - Add optional component tracing comments to rendered output
- [TAP5-753] - Provide some way to get the current page instance being rendered inside a service
- [TAP5-1385] - Provide support for JSR-330
- [TAP5-1421] - Create a standard way to track messages to be presented to the user
- [TAP5-1472] - Provide basic integration with JPA 2
- [TAP5-1502] - Make it easier to create JavaScript Stacks using a standard implementation with an OrderedConfiguration
- [TAP5-1528] - Tapestry-specific JavaDoc plugin that generates parameter documentation, etc.
- [TAP5-1542] - Support for skinning/theming Tapestry pages
- [TAP5-1543] - Introduce Tapestry schema in version 5_3
- [TAP5-1550] - Provide a multiple selection component that renders check boxes for available selection options
- [TAP5-1572] - Discard unused page instances if not used within a certain period
- [TAP5-1586] - Introduce the Kaptcha component
- [TAP5-1587] - Provide support for Serbian locale
- [TAP5-1595] - Provide support for Macedonian locale
- [TAP5-1609] - Generate Maven archetype from within gradle builds
Task
- [TAP5-75] - Create Doxia APT Macro to make it easier to link to JavaDoc
- [TAP5-116] - Replace Maven build with Gradle build
- [TAP5-161] - Devise test stategy for DateField and other DHTML/JS intensive components
- [TAP5-162] - The need for specific content in webdefault.xml file should be documented
- [TAP5-973] - Identify and fix the issue that causes intermittent build failures
- [TAP5-1286] - Remove Maven APT files for documentation that has moved into the Confluence wiki
- [TAP5-1397] - Remove Tutorial source from SVN
- [TAP5-1402] - Remove deprecated Alias service (which was replaced in 5.1 with the simpler ServiceOverride service)
- [TAP5-1432] - Remove classes and methods deprecated in Tapestry 5.2
- [TAP5-1514] - Upgrade YUICompressor dependency to latest, 2.4.6
- [TAP5-1610] - Provide JavaDoc styling similar to Tapestry website's style
Test
- [TAP5-1413] - Test to make sure the ability to give a multizoneupdate a String rather than a zone works