Release Notes 5.2.0

Tapestry 5.2.0 represents nearly a year of work past the prior stable release, For the most part, the upgrade is quite straight forward, but please read the notes below carefully.

Live Service Reloading

Tapestry 5.2.0 extends Tapestry's concept of live reloading of Java code into the service layer. In most cases, service implementations of your application will now live reload, seamlessly. See the FAQ for some additional notes about live reloading.

Pages No Longer Pooled

This is a huge change from Tapestry 5.1 to 5.2; Tapestry no longer pools page instances. It creates one instance of each page (per supported locale). Tapestry rewrites your component classes so that all mutable state is stored in a per-thread HashMap. This will greatly reduce Tapestry's memory footprint, especially on heavily loaded sites.

This change makes it easier to share objects between threads, which is problematic when the objects are not thread-safe. For example:

Valid Component Code (5.1)

  private Locale locale;

  private final DateFormat format = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);

  public String getCurrentTimeFormatted()
    return format.format(new Date());

In the above code, under 5.1, the DateFormat object was not shared between threads, as each thread would operate with a different instance of the containing page. Under 5.2, the final field will be shared across threads, which is problematic as DateFormat is not thread safe. The code should be rewritten as:

Updated for 5.2

  private Locale locale;

  public String getCurrentTimeFormatted()
    DateFormat format = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
    return format.format(new Date());

If such issues are difficult to solve, remember that as a temporary work-around you have the option of re-enabling the page pooling behavior of 5.1 by setting to "true" in your configuration.

Service Id Injection

In prior releases of Tapestry, a constructor parameter of type String was assumed to be the service id. In the many cases where these was not the case (such as using the @Value or @Symbol annotation), the parameter needed to be annotated with the @Inject annotation.

Starting in 5.2.0, this feature is no longer present (this is a non-backwards compatible change, but one that affects virtually nobody). A parameter of type String will be subject to normal injection; you will likely want to use @Value or @Symbol with it, or you will see an error that "No service implements java.lang.String.".

Igor made a change such that a bare String is injected as the service id in some circumstance; it may be decorator methods. This needs to be documented properly.


The configuration type for TranslatorSource has changed in an incompatible way: from an unordered collection to a mapped collection; this is to support overrides of Tapestry's built-in translators. This will break existing module classes that contribute to the TranslatorSource service configuration.


There have been some changes to how assets operate in Tapestry 5.2.

Virtual folders, used to define root packages for component libraries, may no longer contain slashes. Virtual folders are the pathPrefix property of the LibraryMapping objects that are contributed to the ComponentClassResolver service.

Each LibraryMapping is now automatically converted into a matching contribution to the ClasspathAssetAliasManager service. Previously a library author was encouraged to make contributions to both services. The path prefix of a LibraryMapping is also now prohibited from containing the slash character.

It is now quite necessary to configure the application version number: all assets are exposed via a URL that incorporates the application version number; in previous releases, each library could configure its own version number. By implication, changing library versions and nothing else will now require a change to the application version number.

ClassTransformation API changes

The ClassTransformation API, used to implement component meta-programming, has been rewritten with an eye to making class transformations easier to implement while removing the dependency on the Javassist library. This is of note only to advanced users who have implemented ComponentClassTransformWorkers, which operate on the ClassTransformation API.

Much of the existing API has been deprecated and some deprecated methods are now non-functional. The deprecated methods will be removed in Tapestry 5.3.

This represents a shift in how the API operates; previously much of the logic in ComponentClassTransformWorkers was built in terms of Javassist: adding new bytecode to existing methods. The new API switches away from this, and now works in terms of adding new fields, initializing those fields using callbacks, providing callbacks for access to fields, and adding advice to methods.

Template Parser back to SAX

Tapestry no longer uses a StAX parser to parse component templates, it has reverted to using a normal SAX parser. This change reduces the number of dependencies for Tapestry, and is a stepping stone towards compatibility with Google App Engine.

Bugs Fixed

  • TAP5-266 – In a conflict between a render phase annotation and the naming convention, the explicit annotation should win
  • TAP5-707 – Yellow highlight remains on updated zone if zone is re-updated too quickly
  • TAP5-711 – Submit component: using image parameter prevents selected event from being fired
  • TAP5-714 – Incorrect encoding of single quotes for Ajax requests
  • TAP5-715 – TypeCoercer.explain incorrectly reports the plan to coerce from primitive types to wrapper types
  • TAP5-719 – Component LinkSubmit doesn't work
  • TAP5-728 – When using the @Validate annotation, spaces around the commas that separate contraints cause runtime exceptions
  • TAP5-734 – Tapestry tutorial documentation refers to old archtype command
  • TAP5-747 – Property expressions that include method invocations that in turn reference properties result in spurious error about "root"
  • TAP5-748 – NPE when defining a component using just t:id and no type or @Component annotation
  • TAP5-749 – The FormFragment and LinkSubmit components create a hidden field whose id ends with ":hidden"
  • TAP5-750 – Tapestry should not attempt to GZip flash movies (.swf files)
  • TAP5-755 – URL rewriting documentation contains an example that won't compile due to lack of a return value
  • TAP5-759 – The documentation of DefaultNullFieldStrategy#replaceFromClient() is wrong about what gets returned
  • TAP5-765 – Included JavaScript libraries are not properly uniqued within an Ajax partial update response
  • TAP5-767 – PropertyConduitSourceImpl should use english locale (instead of default locale) when evaluating decimals
  • TAP5-769 – JavaScript aggregation can be inefficient across multiple pages with different JS requirements
  • TAP5-774 – Initialization JavaScript needs help when order counts
  • TAP5-779 – CLONE -Linksubmit doesn't work inside a form with Zone parameter set
  • TAP5-786 – Exception messages in the pageload packages should be localized
  • TAP5-787 – AbstractIntegrationTest's "assertTextPresent" only checks the first value
  • TAP5-788 – ParallelExecutor service throws RejectedExecutionException if more then THREAD_POOL_MAX_SIZE jobs are submitted
  • TAP5-796 – Form component generates invalid xHtml: there should not be the "name" attribute
  • TAP5-812 – The input validation documentation incorrectly shows validation occuring in the success event handler method
  • TAP5-813 – the component rendering page of the user guide is not generated by maven
  • TAP5-815 – Asset dispatcher allows any file inside the webapp visible and downloadable
  • TAP5-823 – Message about incompatible return type of a render phase method is misleading
  • TAP5-824 – Javasisst 3.9.0.GA not available from central repository
  • TAP5-830 – SpringModuleDef unnecessarily hard-codes that the type of object stored in the context as a ConfigurableWebApplicationContext when any object implementing ApplicationContext is sufficient
  • TAP5-834 – BaseOptimizedSessionPersistedObject does not work correctly with Tomcat & Jetty
  • TAP5-837 – prototype1.6.0 not support for ie8
  • TAP5-839 – Tapestry should ignore (public) synthetic methods in module classes
  • TAP5-856 – MetaDataLocatorImpl.findMeta(String, String, Class) doesn't check contributed defaults - breaks SECURE_PAGE contributions
  • TAP5-868 – It is not possible to attach a validation event listener to a Palette (or other <select> field)
  • TAP5-871 – Generation of Component Reference failed on Windows
  • TAP5-881 – Tapestry's customized Blackbird implementation sends a dubious cookie value over every request
  • TAP5-894 – Fix PartialMarkupDocumentLinkerTest.stylesheet_link()
  • TAP5-896 – Contribute 'properties' file extension to the configuration of ResourceDigestGenerator
  • TAP5-898 – BeanModel methods reorder, include and exclude should return BeanModel<T> (not BeanModel<?>)
  • TAP5-908 – Blackbird console should not add cookies to requests
  • TAP5-913 – Stack size too large exception, related to PropertyExpressionLexer
  • TAP5-919 – Calling MarkupWriter.element() with an even number of arguments throws ArrayIndexOutOfBounds exception, not a useful exception about omitting a attribute name or value
  • TAP5-923 – Injeting Tapestry Services to Spring Beans is completely undocumented
  • TAP5-936 – Tapestry wiki link links to nothing for locales other then en
  • TAP5-937 – LinkImpl does not handle parameters properly when passed into the constructor
  • TAP5-940 – Zone should fire a heart beat event
  • TAP5-943 – Documentation for event handler methods should go into detail about returns true or false
  • TAP5-944 – When a ValueEncoder is unable to convert an id to a entity, it should wrap the underlying type coercion exception to describe the input and expected output type
  • TAP5-945 – Unnecessary and severe lock contention in PerthreadManagerImpl
  • TAP5-947 – Default name "submit" for submit component breaks javascript function submit()
  • TAP5-959 – Ajax event handler methods that return a page instance, page class or page name should cause the client to redirect to that page, but doesn't work in IE7 or 8 if the URL has a query param
  • TAP5-961 – When a URL rewriting rule changes the path for a rendered link (component event or page render), any query parameters associated with the original link are lost
  • TAP5-962 – Errors component includes an @Environmental for FormSupport, but doesn't use it
  • TAP5-964 – Exception report failed to render due to NPE inside session-persisted objects' toString()
  • TAP5-974 – PageCallback should be marked with the @ImmutableSessionPersistedObject annotation
  • TAP5-987 – In some cases you can invoke Form.recordError() and the Form will still fire a success (not a failure) event
  • TAP5-1001 – Garbled exception message when a component is defined in a namespace that is not properly defined as a Tapestry library namespace
  • TAP5-1018 – Request to Application Root path ignores ComponentRequestFilter's
  • TAP5-1019 – French translations for number format error message
  • TAP5-1020 – Fix typo in tapestry-hibernate/src/site/apt/userguide.apt: HibernateTransactionAdviser should be HibernateTransactionAdvisor
  • TAP5-1030 – Injecting a Logger into a non-service object, created as part of constructing a service configuration, should work but doesn't
  • TAP5-1031 – NPE from Any component when invoking getClientId() before the component renders
  • TAP5-1034 – Using URLRewriteRules will fail for component event links if the page has an activation context
  • TAP5-1042 – URLRewriting causes confusion about the incoming Request path, leading to incorrect optimized relative URLs
  • TAP5-1043 – PropertyDisplayBlocks causes NullPointerException when property of type Calendar is null
  • TAP5-1047 – @IncludeJavaScriptLibrary and @IncludeStylesheet may incorrectly calculate resources in component sub-classes
  • TAP5-1052 – Component classes page of the guide should be much more specific that only component classes go in pages, components, etc.
  • TAP5-1054 – Not able to pass an empty string as appName to PageTester
  • TAP5-1057 – XSS vulnerability in calendar component
  • TAP5-1060 – In IE8, forms that should submit using Ajax are triggering full page requests due to a client-side JavaScript error
  • TAP5-1067 – Created component constructor may use too many parameters
  • TAP5-1068 – RenderSupport.addScriptLink(String) deprecated and removed without replacement
  • TAP5-1069 – Tapestry POM should reference only the Apache Nexus repository, not the repository
  • TAP5-1074 – The @QueryParameter annotation uses TypeCoercer to convert from request parameter strings to method parameter values, it should use the ValueEncoder
  • TAP5-1075 – When a template contains a reference to an unknown component, the new UnknownValueException is reported but the Location is no longer reported, making it much harder to determine where the error occurred
  • TAP5-1076 – When a service implementation is reloadable, it will not eager load
  • TAP5-1080 – Page activation context lost when redirecting from HTTP to HTTPS due to the @Secure annotation
  • TAP5-1086 – Localized root path request results in a 404 error if Index page is not available
  • TAP5-1088 – Bean editor model for <class name> already contains a property model for property <property name> when combining model parameter with add parameter of BeanEditor or BeanEditForm
  • TAP5-1090 – Deleting a live-reloaded class can result in a non-descriptive "Parameter url was null." exception
  • TAP5-1096 – If a Zone's id parameter is bound, then the clientId property should return that value, even before the Zone renders
  • TAP5-1100 – On ajax request, template body doesn't render if page is new in pagepool or if server restarted
  • TAP5-1105 – BeanModelSource should recognize public field as properties, but doesn't
  • TAP5-1106 – Tapestry.ajaxFailureHandler has an incorrect signature for an Ajax.Request onException callback
  • TAP5-1109 – Updating multiple zones within a Form creates anomalous empty text fields
  • TAP5-1110 – Tapestry holds onto the verbose descriptions of component class transformations, causing a memory leak
  • TAP5-1116 – Live lock when using compressed and virtual assets due to ByteArrayOutputStream being synchronized
  • TAP5-1120 – It is not possible to override the default Translator contributions to the TranslatorSource service
  • TAP5-1124 – FormEventManager.setSubmittingElement(element) creates input element with type="input"
  • TAP5-1128 – A space is added to a HTML start comment sequence making it impossible to add IE conditional comments
  • TAP5-1130 – LinkSubmit component doesn't work when form contains Select component with default id
  • TAP5-1136 – java.lang.UnsupportedOperationException from UpdateListenerHub when a weak reference is reclaimed
  • TAP5-1137 – Dynamically adding JavaScript libraries to a page via a partial page update does not seem to work consistently in Safari and Chrome
  • TAP5-1138 – ClassTransformation deprecated a bunch of methods, then refers to replacements that don't exist
  • TAP5-1141 – Type coercion from arbitrary object to Boolean will NPE when the object's toString() returns null (should coerce to false)
  • TAP5-1145 – Writing only text (or raw text) into a Document via MarkupWriter results in [empty Document], not the actual text
  • TAP5-1147 – Ajax updates under IE leak lots of memory
  • TAP5-1154 – ValidationDecorator.insideField not called for Select component
  • TAP5-1156 – Provide a ValueEncoder for a Hibernate entity automatically only if a mapped class exists
  • TAP5-1158 – Captured HTML from failed Selenium assertions do not get stored in the correct place on Windows
  • TAP5-1161 – Tapestry 5.1 seems incompatible with Spring 3
  • TAP5-1166 – ClassPropertyAdapterImpl should skip static fields
  • TAP5-1182 – preventsTapestry apps from being deployed on GAE
  • TAP5-1185 – Upgrade to latest Javassist version to avoid LocalVariableTable exceptions (especially on Google App Engine)
  • TAP5-1198 – A user defined activate event handler appears to execute *before* the event handler supplied by @PageActivationContext, making defensive coding impossible
  • TAP5-1203 – Use of @Contribute annotation does not work properly with marker annotations
  • TAP5-1207 – A form control component (such as TextField) whose id is "id" can confuse client-side logic for the Form DOM object
  • TAP5-1209 – Marker annotations used with services that have contributions should be applicable to methods (as well as fields and parameters) for compatibility with @Contribute
  • TAP5-1210 – MultiZone update from EventLink with Form fails in Internet Explorer
  • TAP5-1211 – LinkSubmit broken in IE 7 mode
  • TAP5-1216 – ValueEncoderSource does not define a @UsesMappedConfiguration annotation
  • TAP5-1223 – The name "JavaScript" should have a capital "S" but is inconsistent in some class and interface names
  • TAP5-1224 – When contributing to a service using a "contribute" method, the service id from the method name now matches case-sensitively to the service id (it should be case insensitive)
  • TAP5-1262 – XSS vulnerability in calendar component (apply to 5.1.0.x)
  • TAP5-1282 – Form component generates invalid xHtml: there should not be the "name" attribute - Applied to 5.1

Improvements Made

  • TAP5-69 – Add annotation, @Contribute, to allow service contributor methods to be arbitrary named
  • TAP5-88 – Add support for Bulgarian locale
  • TAP5-179 – The TriggerFragment mixin would be more useful if it could invert its logic, i.e., make a a fragment visible when a checkbox was turned off
  • TAP5-247 – Move all Tapestry 5 configuration keys to a constant class
  • TAP5-335 – Provide access to annotations of service implementation class
  • TAP5-424 – Allow component libraries to contribute extra resources to the global application catalog
  • TAP5-632 – Property names (in property expressions) should be able to read or update public variables
  • TAP5-674 – Make it easy to implement a page callback mechanism
  • TAP5-678 – Allow blackbird to be disabled in production mode
  • TAP5-685 – Allow services defined by module tapestry-ioc to be advised and decorated
  • TAP5-713 – Change template parser to not use StAX, as it is not (yet) compatible with Google App Engine
  • TAP5-760 – The Form event "validateForm" is awkwardly named and should be replaced with the simpler name "validate"
  • TAP5-762 – Upgrade Selenium dependencies to version 1.0.1
  • TAP5-764 – Hidden should support ClientElement and support informal parameters.
  • TAP5-777 – Tapestry should ensure that mixins are applied in a deterministic order.
  • TAP5-783 – tapestry should mark via annotation which annotations are component-specific vs. more general
  • TAP5-789 – Provide bean and display blocks for java.util.Calendar
  • TAP5-790 – Provide ApplicationStatePersistenceStrategy for Hibernate entities
  • TAP5-803 – ProgressiveDisplay should include a read-only body property of type Block, just like Zone
  • TAP5-807 – PageRenderLinkSource should add additional methods for creating a Link when you have the page's activation context as an EventContext
  • TAP5-810 – Improve documentation of @Persist annotation
  • TAP5-811 – Layout component documentation is not very clear about directory structure
  • TAP5-814 – include a diagram showing how incoming requests pass through the different pipelines, filters and dispatchers
  • TAP5-826 – The ActionLink documentation is missing the option to use object arrays as context inside templates
  • TAP5-859 – In a stack trace, any lines associated with line #1 of a class are likely to be synthetic methods and should be classified as "uninteresting"
  • TAP5-863 – Tapestry.ajaxRequest is insufficient when doing extra, such as adding query parameters
  • TAP5-884 – Introduce a symbol for tapestry.js
  • TAP5-887 – Easier way to initialize a JSONObject with keys and values
  • TAP5-889 – Provide fluent API for order constraints of contributions
  • TAP5-904 – Make use of Selenium.showContextualBanner() when running integration tests
  • TAP5-905 – Tapestry should support the full range of Unicode characters acceptible by Java as property names
  • TAP5-912 – Validation of properties of type java.util.Collection should fail when the collection is empty
  • TAP5-914 – When autobuilding a Java bean (such as a Session State Object), the code should use the OperationTracker
  • TAP5-915 – It should be possible to override a components message catalog
  • TAP5-917 – Don't set Expires header when tapestry.production-mode is false
  • TAP5-927 – Cannot use Scala for Tapestry IOC Modules
  • TAP5-948 – Built-in mechanism to identify self-referential links and/or event/render requests
  • TAP5-958 – Upgrade Tapestry's built-in copy of prototype.js to version 1.6.1
  • TAP5-963 – Allow access to static resources (css, js, jpg, jpeg, png, gif) inside the app package
  • TAP5-965 – Upgrade EasyMock dependency to release 2.5.2
  • TAP5-967 – ObjectLocator.autobuild would be more useful with an override that allowed a message about the object to be described
  • TAP5-971 – FormFragment component should include a parameter to control whether non-visible content is included in the form submission
  • TAP5-978 – Provide remote management of the page pool settings
  • TAP5-979 – Form component should be more careful with the validation tracker to ensure that a session is not created unless needed
  • TAP5-993 – Reorganize ComponentClassTransformWorkers to start moving away from Javassist
  • TAP5-994 – Field autofocus should be done via Tapestry.init instead of using $ function
  • TAP5-1000 – When Autobuilding a class, the constructor to be used should be identified in the trace output
  • TAP5-1014 – Message about missing or wrong retention policy of a marker annotation is misleading
  • TAP5-1015 – Provide a new return type for event handler methods that would trigger the rendering of a particular page without a redirect
  • TAP5-1023 – (5.2.0-SPNAPSHOT Maven dependencies) tapestry-hibernate-5.2.0 jar generated with tapestry-hibernate-5.2.0-yyyyMMdd.hhmmss-?.jar > tapestry-hibernate-5.2.0-SNAPSHOT.jar whereas all other jar are using -5.2.0-SNAPSHOT
  • TAP5-1024 – Submit component should allow return values from event handler methods triggered by its event
  • TAP5-1033 – Upgrade selenium dependencies to 1.0.3
  • TAP5-1036 – It would be nice if there was a way for committers to run individual integration tests again
  • TAP5-1037 – Rewrite URLRewriter integration tests to use new SeleniumTestCase instead of deprecated AbstractIntegrationTestSuite
  • TAP5-1038 – Rewrite live reload integration tests to use new SeleniumTestCase instead of deprecated AbstractIntegrationTestSuite
  • TAP5-1046 – Change Tapestry client-side JavaScript to make the tapx/Confirm component easier to implement
  • TAP5-1050 – Add API to prevent a particular service implementation from being live reloaded
  • TAP5-1055 – Provide hook to post-process properties files before rolling them into component Messages
  • TAP5-1061 – When a Zone component sends an Ajax request for a client-side update, it should pass an extra query parameter identifying the zone's client-side id
  • TAP5-1077 – Merge symbol values into property values from a bean definition
  • TAP5-1085 – The ExceptionReporter should be configured to mark more of the Tapestry generated classes (used for method & field access and method advice) as hidden by default
  • TAP5-1091 – CLONE -Handler method of LinkSubmit component should accept a context
  • TAP5-1094 – Create a binding prefix, "symbol:", that is used to access IoC symbols
  • TAP5-1112 – Handle array types in property expressions
  • TAP5-1126 – Add a new validator, "none", used when overriding the @Validate annotation
  • TAP5-1127 – Documentation for the Submit and LinkSubmit components should identify that you should cancel defer when inside a Loop
  • TAP5-1129 – LinkSubmit should render minimally (and as <span> tag) and then fill in the details on the client
  • TAP5-1132 – HibernateGridDataSource should assign the result of Projections.rowCount() to java.lang.Number when determining the number of rows for the configured entity type
  • TAP5-1135 – Provide a convinient method to build and start the registry
  • TAP5-1150 – Refactor out a new base class between org.testng.Assert and org.apache.tapestry5.ioc.test.TestBase for non-mock related tests
  • TAP5-1152 – TypeCoercer should include a method exposing the coercion it would use for a given source and target type
  • TAP5-1153 – When in development mode, Tapestry should pretty-print JSON content
  • TAP5-1155 – JavaScript initialization inside the partial page render Ajax response should be unquoted
  • TAP5-1157 – Client-side exceptions during Tapestry.init() should be caught and reported with the console
  • TAP5-1165 – Make better use of the OperationTracker to identify what's going on during a request (and especially, during page construction)
  • TAP5-1170 – Remove automatic injection of service id into parameters of type String
  • TAP5-1174 – Provide a ComponentEventResultProcessor that sends an error response to the client
  • TAP5-1197 – Eliminate page pooling using shared page instances that separate their structure from the mutable state
  • TAP5-1225 – Use recent Groovy/GMaven version and fix GMaven configuration in tapestry-core POM

New Features

  • TAP5-52 – Add Error component that presents validation errors of a single field
  • TAP5-56 – Tapestry should have support for IE conditional stylesheets
  • TAP5-86 – Add support for "cancel" submit buttons (which bypass client-side validation)
  • TAP5-103 – provide access to component parameters from within mixins
  • TAP5-138 – Add Zone parameter to Select component
  • TAP5-152 – Add @Translate annotation to define name of translator to be used with a bean property (rather than lookup by property type)
  • TAP5-156 – Add a @QueryParameter annotation for parameters to event handler method
  • TAP5-226 – Add annotation @SessionAttribute to map a field to a specific session attribute
  • TAP5-680 – Tapestry should provide a mixin for ensuring that the client id of a ClientElement is rendered
  • TAP5-692 – T5 should pick up validators to be applied to a field from the containing component's .properties file.
  • TAP5-801 – Add Trigger component to trigger a component event during rendering
  • TAP5-895 – Tracking issue for Tapestry/JSR-303 integration
  • TAP5-951 – Create more flexible API for testing with Selenium that allows for multiple test cases to share a single instance of Selenium/SeleniumServer/Jetty
  • TAP5-966 – TapestryFilter should be able add additional modules to the Registry to accomidate different testing (or other) execution configurations
  • TAP5-1013 – Live class reloading for service implementations
  • TAP5-1028 – Validator Macros: Combine multiple common validators into a single term
  • TAP5-1035 – In places where an invalid key is used to accessed a named value, Tapestry should report the possible names better (using HTML lists, rather than a long comma-separated string)
  • TAP5-1056 – The application global message catalog should be injectable into services
  • TAP5-1064 – Extend PropertyAccess to understand Scala style properties (which use a different naming convention than JavaBeans)
  • TAP5-1065 – Non-visual mixin to generate events as it begins/ends rendering (useful for generating matching JavaScript)
  • TAP5-1079 – Live class reloading should extend to proxied objects (such as from ObjectLocator.proxy()
  • TAP5-1084 – Zones that initially render inside a Form should support updates within the Form
  • TAP5-1095 – LocalizationSetter service should expose the supported locales as a list of Locale and as a SelectModel
  • TAP5-1097 – New annotation: @HeartbeatDeferred to mark component methods that should execute at the end of the current Heartbeat
  • TAP5-1098 – Provide new SelectModelFactory service that can automatically build a standard SelectModel from objects and property names
  • TAP5-1099 – Introduce public service responsible for handling page activation
  • TAP5-1121 – Provide an annotation to support automatic discarding of the persistent fields after a component or page method invocation
  • TAP5-1159 – Easy way to customize search locations for page and component templates
  • TAP5-1190 – New page-level events to "decorate" component event and page render links

Tasks Completed

  • TAP5-11 – CookiesImplTest does specify a domain cookie with a domain not prefixed with a . (dot)
  • TAP5-556 – Fix TranslatorSourceImplTest
  • TAP5-756 – Add ioko-tapestry-commons to the related projects list
  • TAP5-819 – remove ide-specific files from all sub-modules and add them to svn:ignore
  • TAP5-969 – Method AbstractField.createDefaultParameterBinding() should be deprecated
  • TAP5-976 – Upgrade Spring dependencies to version 3.0.0.RELEASE
  • TAP5-1081 – Remove formos references from 5.2.0 archetype
  • TAP5-1087 – Upgrade TestNG dependencies to version 5.12.1
  • TAP5-1134 – Upgrade Hibernate dependencies to 3.5.2
  • TAP5-1195 – Rename annotations @QueryParameter and @QueryParameterMapped (both introduced in 5.2.0) to more mnemonic names