This document contains release notes for current release of Tapestry, release 5.2.
There are also release notes for Tapestry 5.0
and for Tapestry 5.1.
Release Notes - Tapestry 5 - Version 5.2.0
Bug
- [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 tapestry.formos.com 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] - javax.management 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)
Improvement
- [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 Feature
- [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
Task
- [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