Did we spoil the end user? Building Customization and Personalization into JSF applications (NLJUG-JSpring)

The other day I did a presentation during the Dutch Java User Group conference (NLJUG) in Bussum. In a way this was a trial run for the presentation with the same title and largely same content colleague Peter Ebell and myself will be doing during JavaOne 2008 in a few weeks time (a BOF session). It went well – I finished just in time (which for me is an achievement) and I believe I was able to deliver my key messages.

The presentation....
had started out in my head as a discussion of various features for customization and personalization in JSF applications, generic features and infrastructure that one can embed in any JSF application. It gradually evolved into (also) a discussion of how a JSF application can be designed for Saas (Software as a Service). A single application instance that is centrally hosted and used by dozens or hundreds of customer organizations with each dozens or hundreds of staff. And each organization requires its own customization and each end user requires his or her personal fine tuning as well. My presentation demonstrates how you could build such mechanisms into JSF applications in general.

Did we spoil the end user? Building Customization and Personalization into JSF applications (NLJUG-JSpring) footballprototype028

Download the presentation: Did we spoil the end user? (PDF) . And if you happen to be around, come and visit the BoF session

the official abstract for the presentation:

Did we spoil the end user? On Building Customization into JSF Applications 

Our project developed a web application that is provided in an ASP model to over 120 organizations with on average several dozens of users. There is a single database and a single application instance with a generic code base. The challenge put to us: allow every organization to customize the application, tailoring to their specific needs – without changing a single line of code or interfering with the other organizations using that same application. On top of that, every individual user should be able to personalize their experience by overriding the customizations made for their organization. Some end users even needed the ability to define several themes, disjunct sets of personalizations that they could switch between on the fly (without logging out of the application).

Customization and Personalization in this case meant for example
– hiding fields in the webforms
– adding items to enter data associated with the selected record (and storing that data persistently); these new items can be of any display item and can have data associated to populate dropdown lists and radio groups; custom items can have custom validations as well.
– changing the set of columns displayed in a table
– changing style elements such as logo, font and certain color settings
– defining item default values for when creating new records
– tuning validations on items
– tailoring the ResourceBundles, to provide custom labels, prompt, tooltip etc. not just by locale but also based on organization and individual user

This presentation will demonstrate how we made the JSF application deal with these challenges. Some key elements in our approach: EL Expressions, Database backed ResourceBundles, CSS generation, persistent application meta data.