Jakarta Tapestry - What's New

... or perhap's, "What's Old". These are release notes from earlier versions of Tapestry. More recent changes are in a different format, on the Change Log page.

Release 3.0-beta-1

  • Major refurbishment of the Virtual Library example to use all the latest and greatest Tapestry facilities.
  • Removed the "rows" and "columns" parameters from TextArea; use informal parameters "rows" and "cols" instead.
  • Removed unused/unneeded exceptions RollbackException and PageRecorderSerializationException.
  • The default for the Hidden component is now to encode its parameter.
  • Ugraded to OGNL 2.4.2.
  • Shell comp;onent now allows multiple stylesheets.
  • Added a DataSqueezer adaptor for Enum types.
  • Switched over to using JBoss 3.0.6 for demos.
  • Renamed method generateAttributes() to renderInformalParameters() in AbstractComponent.
  • Added support for the informal parameters of a component to be passed down to a contained component using the inherit-informal-parameters attribute.
  • Added IRequestCycle.activate() as a replacement for setPage(). Besides setting the page to be rendered, it also invokes page.validate() and handles the page redirections.
  • Added addValidateListener() and removeValidateListener() to IPage.
  • DataSqueezer: Squeezed strings are now always prefixed with 'S'
  • Added mechanism for checking that super-class implementations of key methods are invoked.
  • Added checks that IPage methods validate() and detach are properly overriden by subclasses.
  • Changed Form, Hidden and ListEdit so that all hidden fields are written out with the <form> tag.
  • Added new features to the script specification, bumping its DTD to 1.3. It is now possible to generate page-unique ids from within the script (using the new unique attribute on <let>, as well as to render a block only once per page render (using <unique>)
  • Integrated Per Norrman's vastly improved DatePicker component
[ 18340 ] ApplicationRuntimeException doesn't compile on jdk 1.3.
[ 18336 ] Tapestry 2.4a5 - LOGGING images missing for Inspector component
[ 18490 ] compile warning for Workbench 
[ 18013 ] typo in EvenOdd javadoc
[ 18607 ] Check for unimplemented abstract methods    
[ 17904 ] Ongoing LGPL Issues 
[ 19153 ] Easier way to override validation messages  
[ 19263 ] Change error message for null parameter 
[ 18880 ] DatePicker broken under Mozilla  

Release 2.4-alpha-5

  • Added some simple optimizations to keep the engine instance from being stored into the session unecessarily often.
  • Fix NPE when image parameter of Image component is bound but value is null.
  • Create a basic JSP tag library to allow JSPs to access Tapestry pages using the page and external services.
  • Added support for primitive arrays, java.lang.Object[] and java.lang.String[] for connected parameters.
  • Added connected parameter support for missing primitive types byte and char
  • Added support for primitive arrays, java.lang.Object[], and java.lang.String[] for declared properties.
  • Replaced JFreeChart with JCharts, due to licensing considerations.
  • Refactored to use Jakarta Digester to parse specifications.
  • Changed specification and template parsers to track locations of specification objects and attach them to runtime objects and exceptions for error reporting purposes.
  • Severely refactored exceptions, removing many exception classes and flattening all others under ApplicationRuntimeException.
  • Simplified the URL format, merging the "service" and "context" parameters together.
  • Removed the "displayWidth" and "maxLength" parameters from TextField and ValidField (HTML attributes "size" and "maxlength", as informal parameters, are sufficient).
  • \
  • Added two new application extensions to allow page and component specifications and templates to be provided in non-standard ways (when not found using the default rules).
  • Changed file upload to work using Jakarta Commons FileUpload (patch provided by Joe Panico).
  • Added new parameter direction: auto, which creates a synthetic property backed by the binding.
[ 18249 ] file upload using Commons FileUpload 
[ 17905 ] Link to mailing list and archives is wrong.  

Release 2.4-alpha-4

  • All packages have been renamed from net.sf.tapestry to org.apache.tapestry.
  • Several non-ASL libraries (including Jetty) have been removed from both CVS and the distribution. To build Tapestry and run the demos is now more involved; it requires obtaining several external dependencies. The Tapestry distribution is much smaller, however. This was done for licensing reasons. Sorry.
  • Expression bindings in HTML templates are now in the format attribute="ognl:expression".
  • String bindings (to localized strings) in HTML templates are now in the format attribute="string:key".
  • Allow <set-property> element of specification to specify the expression as an attribute or as wrapped character data.
  • The interfaces for IValidationDelegate, IValidator and ValidatorException changed incompatibly. This will only be an issue if you have created custom validation delegates or custom validators.
  • Added methods to IComponentStrings for formatting localized strings with arguments.
  • Remove ejb.jar and any direct dependencies on javax.ejb classes (application servers are responsible for properly replicating EJBObject and EJBHome instances).
  • Added a createRequestCycle() method to AbstractEngine.
  • Moved the invocation of the IMonitor method serviceEnd() to always occur after the invocation of serviceException().
  • The Upload component now works with the enclosing Form to automatically set the encoding type to multipart/form-data. It is no longer necessary to set the enctype attribute of the Form.
  • Removed the code related to making copies of persistent properties.
  • Removed non-ASL libraries from CVS. These files will need to be downloaded separately.
  • Removed some of the old tutorials, leaving just the Workbench and Virtual Library as examples.
  • Removed the "Demo" pages from the web site, until we find a stable home.

Release 2.4-alpha-3

  • Reorganized the packaging into a binary distribution (which includes documentation) and a second, smaller, source-only distribution.
  • Renamed the JARs, stripping off the "net.sf." prefix.
  • Updated all examples to use the 1.4 Specification DTD.
  • Refactored (severely) the relationship between services and link components, splitting the rendering portion of links into a separate interface.
  • Upgrade to McKoi database 0.94h.
  • Tapestry will now create properties for connected parameters, if the properties do not already exist (or are abstract).
  • Renamed the java-type attribute of the <parameter> element (in component specifications) to type (for the 1.4 DTD).
  • Allowed more elements to specify values as character data inside the element as an alternative to using a particular attribute (useful for complex OGNL expressions).
  • Continued extending the JUnit test suite.
  • Deprecated the PageCleanupListener interface and removed support for it.
[ 665622 ] net.sf.tapestry.html.Frame uses old DOCTYPE
[ 675882 ] option component generates invalid HTML
[ 622691 ] Full release
[ 679655 ] Upload component very slow on file uploads

Release 2.4-alpha-2

  • Made improvements to how Tapestry handles arrays of objects and scalars
  • Upgrade demos to deploy into JBoss 3.0.4
  • Merge in changes from Tapestry 2.3
  • <binding> elements may now specify the expression as the parsed data instead of the expression attribute
  • The template extension may now be overriden using the configuration property net.sf.tapestry.template-extension
  • Added support for declarative transient and persistent properties via <property-specification> element in page and component specifications. Tapestry will create (on the fly) a subclass with the necessary accessor methods and fields, as well as any necessary notification and cleanup methods.
[ 594878 ] Deploy Tapestry into JBoss 3.0.4
[ 672743 ] Pages Implementing Listeners cause NPE

Release 2.4-alpha-1

  • Added support for specifying expressions in the component template. Expressions are specified as attributes with the format "[[ expression ]]". The brackets and leading and trailing whitespace are removed. Expressions specified this way are the equivalent of the <binding> element in a specification.
  • Tapestry now supports implicit components. Implicit components are declared exclusively in the containing component's template (instead of in the containing component's specification) using a special jwcid syntax: @type (for anonymous components) or id@type (for named components). Implicit components are especially useful for components that take no parameters, but may also make use of template expressions.
  • Added support for the <listener-binding> element in page and component specifications. This allows a listener method to be provided, directly within the specification, as a script written in a BSF-supported language.
  • A number of non-backwards compatible changes were made to several framework interfaces to support more flexibility on where specifications and templates may be located, but these should not affect the overwhelming majority of Tapestry users. In addition, private assets and context assets may also be relative.
    Private assets are relative to the component specification which declares them, context assets are relative to the application servlet (within the servlet context).
  • Moved the Inspector out of the framework and into the contrib library.
  • Created smarter checks for stale sessions for ActionLink, DirectLink and Form. The action and direct services used by the components now encode whether the application was stateful into the URL. The stateful check only occurs if the application was stateful when the URL was rendered.
  • Changed Form to record the exact ids generated during the render (it used to just store the count). This allows a more useful exception message to be generated for the StaleLinkException.
  • Changed the default StaleLink page to have a message property, and to display the message from the StaleLinkException.
  • Components (and even pages) can now implement page listener interfaces (PageDetachListener, PageRenderListener or PageCleanupListener) and finishLoad() will automatically add them as a listener to the corresponding page events.
  • The entire mechanism used to store persistant page properties has been revised.
  • Implemented a number of improvements to Pool to support greater flexibility in managing objects stored into and discarded from the pool.
[ 653358 ] IPage.getName() == qualified name
[ 608768 ] Changes saved AFTER IPage.detach()

More ...

Earlier entries