Databinder: a toolkit for data-driven Wicket applications

Please see the Databinder Web site for documentation and usage examples:


Version History

1.2.1 Updates Databinder to the latest Wicket and Hibernate versions.

1.2 This release represents a significant refactor of the Databinder toolkit to allow it to work with any underlying persistence technology. Core functionality now resides in modules like databinder-models, while specific functionality is in databinder-models-hib for Hibernate, or databinder-models-ao for ActiveObjects. The “databinder” dependency that was used through 1.1 is now databinder-app and databinder-app-hib for Hibernate applications.

Migration to the new codebase is fairly straightforward. The first step is to refer to the appropriate new Maven artifact name, databinder-app-hib for most applications. Then update dependencies for your IDE, as there are number of class and page renames to work through. Some changes were made to accomodate the new persistence-agnostic structure, others are there just to bundle desired, breaking changes in one release. There aren’t any major significant conceptual changes. The renames are as follows:

* DataStaticService -> Databinder

* ICriteriaBuilder -> CriteriaBuilder

* IQueryBuilder -> QueryBuilder

* IQueryBinder -> QueryBinder

* DatabinderProvider -> HibernateProvider (follows HibernateObjectModel, et al.)

A global search and replace for those terms, followed by an “organize imports” command (or whatever is appropriate for your IDE) to find classes in their new *.hib packages should fix most compilation errors. One change to look out for is that HibernateObjectModel will now return null when initialized with an identifier that doesn’t match any entities, to conform to its existing behavior when initialized with queries or criteria.

Note that this upgrade shouldn’t be considered obligatory for Hibernate applications. The 1.1 line will continue to receive fixes and minor features as users require. Speak up on the forum you need anything.

Although Hibernate models are functionally the same in this release, there is one bonus: the new databinder-valid-hib module uses Hibernate Validator to automatically validate against annotated data classes. The recipe book example demonstrates the new module, which should an easy way to eliminate some code in forms with basic validation needs.

Other changes and additions:

* Bookmarks example switched to demonstrate ActiveObjects support

* “sign in for two weeks” checked by default for databinder-auth-components

* databinder-dispatch rewritten in Scala and using plain HTTP rather than XML-RPC

* PropertyQueryBinder binds all query parameters to properties or fields of a given object

* SearchPanel uses PropertyQueryPanel and internal model, may require code changes for client apps

* QueryBinderBuilder turns binders into builders, so that toolkit classes need only deal with builders

1.1.2 Depends on Wicket 1.3.3 and the latest Hibernate modules, to be obtained

         directly from the JBoss repository. This is the first Databinder

         release to depend on non-central repositories. As a result, this release

         may not itself be housed on the central repository. Existing Databinder

         applications will need to include add following to pom.xml:




                           <name>Databinder repository</name>




*        New SortableDatabinderProvder contributed by Mark Southern, for

         to handle DataTable and other sorting with less client code; Baseball

         example updated to demonstrate.

*        Access to base panel’s components in subclasses of sign in and register


*        Fix for multiple session factory bug; could leave a session open

         if other sessions did not need to be closed.

1.1.1 Adds modelChanged() calls to DataForm to prevent stale UI state when

         clearing or changing model object, and checks model binding on detach

         (if unbound) so that a manual call after saving an entity is unnecessary.

         All-new DataTree class and companion components facilitate persistance

         of Wicket/Swing rendered trees.

         Databinder-draw is now distributed through the central Maven repository,

         as are the Batik libraries it depends upon.

1.1 Compatible with Wicket 1.3.0, this version improves upon Databinder’s

         interface with Hibernate such that an external session and transaction

         manager (such as Spring) can be use with Databinder’s model and component

         classes. The runnable DataServer class provides a simple embedded Jetty

         configuration that can be used in development and production. Several new

         data-oriented components are available, such as the DataBrowser (contributed

         by Xavier Hanin—merci !) and SourceList components.

*        Centralization of session-fetching in DataStaticService rather than


*        Use of Hibernate’s “current session” facility to support external session

         and transaction management

*        Upgrade Hibernate dependency to 3.2.5.ga

*        Experimental support of conversational Hibernate sessions

*        Retain serialized unsaved objects by default

*        Databinder dispatch, an interface to Ruby-based text processing libraries

*        IterableEntityView, an analogue for to ListView for an Collection (not


*        Refactoring of DatabinderProvider now that DataView is Wicket core

*        URIConverter, URIValidator, ColorConverter

*        Authorization refactor: localizable strings, extensible layout by “sockets

         and plugs”, UserBase as unmapped base user class

*        Authorization cookies bound to IP address, and specific to servlet context

*        Authorization password encrypted by javascript

*        HibernateObjectModel#isBound method reports if entity has identifiers to

         be loaded from storage

*        Page versioning restored to Wicket default

*        Implementations of equals and hashcode for HibernateObjectModel that refer

         to target object

*        DataBrowser mounting to /dbrowse in development mode

*        DataApplication init() refactor, calling super() no longer necessary

1.0      Uses Wicket’s Application.getConfigurationType() rather than

         tracking configuration independently, to gain compatibility with

         other methods of specifying wicket.configuration.

         Removed deprecated addRegisterPanel method of DataSignInPage and

         deprecated RedirectServlet. Added odd/even style definitions to

         DataPage.css to simplify DataTable use.

         Improved HTML validity of example application pages, and changed

         delete link of bookmark application to a form button.

0.9      Improved transaction handling now rolls back any uncommitted

         transactions before closing a Hibernate session. Unhandled

         runtime exceptions will trigger an immediate rollback and

         session closure.

         The new IQueryBuilder interface allows applications to construct

         their own Hibernate (named/SQL) queries for Hibernate object

         and list models. HibernateObjectModel is now writable,

         facilitating use with DropDownChoice components needing

         independent models.

         RenderedLabel has a shared resource setting that caches common

         renderings within the application at a permanent URL. Empty

         labels (with no text or blank text) are no longer rendered as

         IMG tags at all. There are several improvements in the

         authentication defaults, including a sign in link that remembers

         the current page and centered sign in and registration screens.

         In examples, the message floater has a Cajo version of its

         applet, and phone directory adds dropdown category filtering

         (using a writable HibernateObjectModel).

0.8      Many base classes in the toolkit have been refactored to be more

         flexible, including DataApplication, AuthDataApplication,

         DataRequestCycle, and AuthDataRequestCycle. Existing applications

         that override default functionality in base classes may need to

         make minor changes to compile against this version.

         The Hibernate session factory is now easily accessible from

         outside a Wicket request cycle, in DatabinderStaticService. An

         exception is thrown if the session factory is not initialized,

         provoked by the common error of overriding DataApplication.init()

         without calling its super-implementation.

         The focusable form input from the recipe book example is now a

         toolkit component, FocusableTextField. SearchPanel now has a

         submit button for better compatibility with older browsers (and

         users). AjaxOnKeyPause handles backspace correctly with IE,

         and it no longer needs to be the first Ajax behavior on a page.

         DataRegistrationPanel uses a PasswordInputValidator to avoid

         exposing passwords.

         The JavaScript and stylesheet link components now extend

         appropriate resource reference classes in the Wicket hierarchy.

         DataPage’s default stylesheet has been improved to follow form

         label guidelines, and feedback messages have a new appearance.

         Wicket and Hibernate Annotations dependencies have been updated to

         1.2.2 and 3.2.0 RC2 respectively. MySQL connector (in data-app and

         examples) is at version 5.0.3.

0.7      Wicket DataView support arrives in this version. Though it has

         always been possible to write your own IDataProvider, Databinder

         now includes one for you. See the baseball players example.

         The provided User class has been renamed DataUser to avoid that

         reserved table name in some databases. You will need to update

         any code referring to this class. Subclassing of DataSignInPage

         has been streamlined.

         The data-app archetype now includes a sample entity. In web.xml

         it uses the new RedirectFilter class to send context-root

         requests to the Wicket servlet. All Databinder projects using

         the now-deprecated RedirectServlet are encouraged to switch to

         RedirectFilter as it permits static content under the


         RenderedLabel now loads its image when its markup is rendered,

         so that drawing the image when it is later requested will

         not require a model to be reattached.

         PageStyleLink and PropertyListModel, which have been deprecated

         for some time, are now out of the library. The StyleLink and

         ScriptLink classes have been rewritten to fall under the

         PackagedResourceReference component, requiring the removal of

         their constructors that took the Class object as an IModel.

         Please use these classes with a simple Class object.

0.6      This version adds integration with the wicket-auth-roles package

         via the AuthDataApplication superclass. Default implementation

         classes for users and roles are built in, along with basic sign

         in, registration, and remember-me functionality. The recipe book

         example demonstrates selective authentication for data editing.

         A new SublistProjectionModel class breaks lists into chunked or

         transposed sublists for common rendering styles (see bookmarks).

         A RenderedLabel component renders its model into an image using

         any font available to the JVM, as demonstrated in the new

         graffiti example. AjaxOnKeyPausedUpdater triggers Ajax updates

         when input pauses in a TextField or TextArea and replaces the

         old “every key” behavior of SearchPanel. Added support for

         Hibernate criteria queries to object and list models.

         Changed structure of data-app archetype to be compatible with

         Maven 2.0.4. HTML and property resources are now stored

         alongside Java sources by default. Incremented versions of

         several dependencies, including Wicket to 1.2.1 which now

         enforces that session-stored objects be Serializable by default.

0.5      Trimming and meshing for Wicket 1.2, including deprecation of

         PropertyListView and removal of application.properties from

         the data-app archetype. Recognition of the wicket.configuration

         JVM parameter, in addition to net.databinder.configuration. Ajax

         convenience Wrapper class added.

         Hibernate dependency updated to 3.2.0 cr2 and Annotations

         3.2.0 cr1. Fixed bug leading to unknown entity exceptions caused

         by Hibernate proxy classes. Added trigger for Hibernate

         initialization on startup rather than the first page request.

         HibernateObjectModel now loads objects upon   instantiation so

         that object not found (and other) exceptions can be easily


         New overridable isCookielessSupported() method of DataApplication

         allows URL rewriting to be disabled in Wicket so that search

         engines can crawl bookmarkable links without jsessionid URL


         RedirectServlet provided for easily sending requests from the

         Web root to WicketServlet. Added configuration for this, as

         well as the databinder.net repository, to the data-app archetype.

0.4      Integration with Wicket 1.2 beta 2 and exploitation of its

         built-in Ajax capabilities. Databinder’s new SearchPanel component

         provides ready-made live search functionality, and all three

         example applications have been updated to use Ajax as

         appropriate (or in some cases, just to show how it works).

         HibernateObjectModel can now be initialized with a query for the

         not-so-special case of eager fetch joins and scalar results.

         In existing Databinder applications, subclasses of DataApplication

         must change the visibility of getHomePage() from protected to

         public, as Wicket has added exactly that method to its base

         Application class. Other changes to your applications may be

         necessary; see Wicket’s 1.2 migration guide for more information:


0.3      New helper components: TextileLabel and DateLabel. The former

         renders its content using JTextile (modified for Java’s built-in

         regular expression processor) and the latter using

         SimpleDateFormat with a supplied format string. A new recipe book

         example demonstrates the Textile support, as well as some basic 

         Panel use, embedded Hibernate objects, and JavaScript.

         Transparent version awareness added to DataForm, following a

         method suggested in Martijn Dashorst’s weblog. Attempting to

         overwrite another user’s unseen changes to an object now results

         in a validation error.

         Dependencies have been updated to Hibernate 3.1.2 for the

         library, and jetty6beta9 in the archetype. Fixed a bug in the

         DataForm(id, model) constructor; it now wraps the model in a

         compound model as indicated in the comments. PageStyleLink has

         been renamed StyleLink to reflect its applicability to any

         component, and a new ScriptLink component helps attach JavaScript.

0.2      Dependencies are updated to Hibernate 3.1.1, Annotations

         3.1beta8,and Wicket 1.1.1. DataApplication.getSessionFactory()

         is no longer final (nor overridden), and c3p0 pooling defaults to

         testing for closed connections. Wicket’s log4j dependency is now

         excluded; add it to your <<<pom.xml>>> if you use it.

         New component WebLink along with a URLConverter provide better

         support for linking outside of Wicket. PageStyleLink makes it easy

         to add a stylesheet specific to a page or component

         DataRequestCycle now begins a Hibernate transaction when creating

         a Hibernate session, and DataForm commits that transaction in


         Improved Phone directory example applies optimistic locking,

         and its ListAndEdit page uses a compact SearchFilter

         implementation. New Bookmark example application is very short,

         simple, and intended for Wicket novices.

0.1      Support for Hibernate 3.1, Hibernate Annotations 3.1beta7, and

         Wicket 1.1. This is the first public release of Databinder. All

         that is known for sure is that it can support the small Phone

         directory example application (available on Web site).