Nuxeo EP provides a web framework to build business applications for thin clients.
This framework is based on the standard JEE view technology: Java Server Faces.
Nuxeo JSF: technical stack
Nuxeo JSF framework integrates several technologies in order to make the development of Web Application fast and efficient.
Nuxeo JSF stack includes (as of Nuxeo 5.4) :
- JSF 1.2 (SUN RI) as MVC and UI component model
- Facelets as rendering engine and templating system
- Ajax4JSF to add support for Ajax behaviors
- RichFaces (3.3) for high level UI components
- Seam (2.1) as Web Framework
Inside Nuxeo EP, Seam Framework is used only for the JSF (client) layer.
Usage of Seam has several benefits :
- usage of JSF is simpler
- powerful context management
- dependency injection and Nuxeo Service lookup via injection
- Nuxeo Web Component are easily overridable
- decoupling of Web Components (that can communicate via Seam event bus)
Nuxeo JSF framework also comes with additional concepts and tools :
- Action service is used to make buttons, tabs and views configurable
- Layout and Content View allow to define how you want to see documents and listings
- URL Service : Nuxeo provides REST URLs for all pages so that you can bookmark pages or send via email a link to a specific view on a specific document
- Nuxeo Tag Libraries : extend existing tags and provides new Document Oriented tags
- Theme engine
Nuxeo JSF: approach
We built Nuxeo JSF framework with two main ideas in mind:
- make the UI simple
- make the UI pluggable
For the first point, we choose to have an "File Explorer" like navigation.
So you have tools (tree, breadcrumb, search, tags) to navigate in a Document Repository and when on a Document you can see several views on this document (Summary, Relations, Workflows, Rights, History ...).
We also choose to make the UI very pluggable, because each project needs to have a slightly different UI.
In order to achieve that, each page/view is in fact made of several fragments that are assembled based on the context.
This means you can easily add, remove or change a button, a link, a tab or a HTML/JSF block.
You don't need to change or override Nuxeo code for that, neither do you need to change the default Nuxeo templates.
The assembly of the fragments is governed by "Actions", so you can change the filters and conditions for each fragment.
Of course each project also needs to define it's own views on Document, for that we use the Layout and Content View system.
All this means that you can start from a standard Nuxeo DM, and with simple configuration have a custom UI.