JSF UI Framework

JSF UI Framework Overview

Technical Overview

The Nuxeo Platform provides a web framework to build business applications for thin clients. This framework is based on the standard JEE view technology: Java Server Faces (JSF).

Nuxeo JSF Technical Stack

Nuxeo JSF framework integrates several technologies in order to make the development of web applications fast and efficient.

The Nuxeo JSF stack includes:

  • Mojarra JSF (2.2.6) as MVC and UI component model, including, as of JSF 2 specifications, facelets as rendering engine and templating system,
  • RichFaces (4.5.0) for high level UI components, including the a4j library for Ajax behaviors support
  • JBoss Seam (2.3.1) as Web Framework

Inside the Nuxeo Platform, Seam Framework is used only for the JSF (client) layer.

The 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).

The 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: the Nuxeo Platform 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 the Nuxeo Platform code for that, neither do you need to change the default Nuxeo Platform 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 Platform, and with simple configuration have a custom UI.

Pages Index

Functional Overview

You can refer to the user documentation.

4 months ago manonlumeau Relocated assets to fit new URL structure for 710 - fix
3 years ago Manon Lumeau 23 | emove children display macro
4 years ago Solen Guitter 22
4 years ago Solen Guitter 21 | Update table of contents look
5 years ago Anahide Tchertchian 20 | NXDOC-427: add sub pages index
5 years ago Anahide Tchertchian 19
5 years ago Anahide Tchertchian 17 | NXDOC-196: review content
5 years ago Anahide Tchertchian 18 | NXDOC-196: remove warning
5 years ago Alain Escaffre 16
5 years ago Gildas Lefevre 15 | Update versions of technical stack
6 years ago Alain Escaffre 13
6 years ago Alain Escaffre 14
6 years ago Solen Guitter 12
6 years ago Anahide Tchertchian 11
6 years ago Anahide Tchertchian 10 | add WIP warning
6 years ago Anahide Tchertchian 9 | Reverted from v. 7
6 years ago Anahide Tchertchian 8 | remove JSF stack part (moved to sub page)
6 years ago Anahide Tchertchian 7
6 years ago Solen Guitter 6 | Added TOC
8 years ago Solen Guitter 3 | formatting and typos
8 years ago Solen Guitter 4
8 years ago Solen Guitter 5 | Migrated to Confluence 4.0
9 years ago Thierry Delprat 2
9 years ago Admin name placeholder 1
History: Created by Admin name placeholder

We'd love to hear your thoughts!

All fields required