The project has been created. Please visit the project page.

JavaServer Faces Tooling Project


Introduction

The JavaServer Faces Tooling Project is a proposed open source project to be incubated under the Eclipse Web Tools Project.

This project proposal is in the Proposal Phase (as defined in the Eclipse Development Process document) and is posted here to solicit community feedback, additional project participation, and ways the project can be leveraged from the Eclipse membership-at-large. You are invited to comment on and/or join the project. Please send all feedback to the eclipse.webtools.jsf newsgroup.

Background

JavaServer Faces (JSF) is a server-side user interface component framework for Java-based web applications. JSF has become a popular technology that is increasingly used in building Web applications. JSF artifacts include JavaServer Pages (JSP) that make use of the JSF tag libraries and the JSF configuration file, “faces-config.xml”. The configuration file configures both page-flow (control) aspects and managed bean (model) aspects of the JSF application, amongst other things. A JSF application will also include Java classes.

The objective of the JSF Tooling project is to build extensible frameworks and exemplary tools that support the full life cycle of building a JSF-based web application.

Description

Project Goal

The goal of this project is to add comprehensive support to the Eclipse Web Tools Project to simplify development and deployment of JavaServer Faces (JSF) applications. The project will provide an extensible tooling infrastructure and exemplary tools for building JSF-based, web-enabled applications. The tooling infrastructure will be designed for extensibility so software vendors can provide additional functionality. 

This project will be layered over the services provided by the JST and WST subprojects. JSF artifacts will be first class citizens with respect to the capabilities that Eclipse users expect. This includes support to create, edit, and refactor JSF pages and JSF configuration files. A model will be created (or an existing model may be enhanced) for such resources and these resources will participate in the build process.

Project Scope

The project will provide extensible frameworks and exemplary tools that support the full life cycle of building a JSF-based web application. This includes tooling that will aid in developing, deploying, testing and debugging a JSF-based web application. Some of the functional requirements of this project will be met by extending/inheriting the services provided by the JST and WST subprojects. These include support for deploying, testing and debugging.

The project will build editors and validators for all the artifacts of a JSF project. Initially, these will be source/textual editors that are JSF aware. However, within scope is to build an editor for the JSF configuration file, “faces-config.xml” that would allow a user to create a Page flow at a higher level of abstraction than the plain XML syntax. Similarly, the project scope includes building a visual editor for the JSP constructs. The visual editors will be implemented in later phases of the project.

The project will be architected as a set of plug-ins, each of which provides the ability for other groups or vendors to further extend and customize the functionality in a well-defined manner.

Tools for J2EE Web Module

  1. Add JSF Project Feature to any Web module. This will do the following:
    1. Configure the project
      1. Add required JSF tag libraries and jars
      2. Create a default faces-config.xml
      3. Update web.xml with Faces Servlet class
    2. Participate in the Build process
      1. Add validation semantics for the content in faces-config.xml, e.g., Navigation rules
  2. Wizard for creating a new JSF Project
    1. This will provide support for multiple versions of JSF including MyFaces
    2. This will also provide some support for migration to a higher-version
  3. Wizard for creating new JSF Page
    1. Create a JSF page from a template
    2. Create and manage templates
  4. Wizard for creating managed beans, other constructs.

The wizards will all be extensible such that vendors can augment the UI and provide value-added services.

Editors for JSF

There would be two forms of editor: one to edit JSP pages containing JSF tags, and one to edit faces-config.xml. These editors will be multi-page editors that support both textual/source editing and a graphical/visual editing.

The visual editor for the constructs in the faces-config.xml will have the capability to create the Page flow and also manage other constructs such as managed beans. The faces-config.xml will have an associated model and corresponding API's to manipulate it programmatically. The editors will have an associated Outline view that will display the content in a structured format.

  1. Source Editor for JSF
    1. Inherit JSP Editor from JST. Some of the inherited features include:
      1. Standard editor capabilities (coloring, code assist, refactoring, formatting)
      2. JSP Expression Language Support (Content Assist, Syntax Coloring)
      3. Content based selection
      4. Hybrid editing
    2. Add context sensitivity for JSF artifacts such as managed beans
    3. Participation in the build process
  2. Source Editor for faces-config.xml
    1. Inherit XML Editor from WST
    2. Add context sensitivity for JSF tags
    3. Navigate, pull-down support for associated Java class
  3. Graphical/Visual Editor for JSF Pages
    1. Visual editing of JSF components
    2. Support drag and drop, wizards for standard and core JSF tags
    3. Support for backing beans
  4. Graphical/Visual Editor for faces-config.xml (Page-flow Editor)
    1. Create and remove pages (Navigation Cases) from the diagram
    2. Rename navigation rule outcomes and actions and navigation cases on the diagram
    3. Automatically diagram navigation data from any JSF configuration file
  5. JSF Preview
    1. The JSF Editors will have a preview capability
  6. JSF Debugger
    1. JSR-45 Debugging

Automation/Generation Functionality

Wizards will be provided to assist in development

  1. Wizard for creating a new JSF Project
    1. This will provide support for multiple versions of JSF including MyFaces
    2. This will also provide some support for migration to a higher-version
  2. Wizard for creating new JSF Page
    1. Create a JSF page from a template
    2. Create and manage templates
  3. Wizard for creating managed beans, other constructs

Support for 3rd party JSF Components

The JSF tools in Eclipse will be designed as a vendor-neutral solution with a set of JSF components provided as a sample. No vendor-specific runtime implementations will be built into Eclipse as part of this project. Any 3rd party JSF-compliant component, such as Sun's JSF Reference Implementation components, Apache's MyFaces components, and Oracle's ADF Faces components, will enjoy easy drop-in support right out of the box.

Extension Points

The project will define appropriate extension points that would enable other software vendors to provide value-added functionality. These include ability for a 3rd party vendor to add/enhance the visual Page flow editor, add/enhance the validators, add custom property editors for JSF components, etc.

Integration Points with Other Eclipse Projects

Given the scope of the project, the JSF tools will interact with and leverage the following existing Eclipse projects. This is not an exhaustive list and will be enhanced during the course of this project.

This project will also integrate with a potential visual HTML editor if and when such a contribution is made.

This project will also integrate with a potential data-binding project if and when such a project comes into existence.

Organization

We propose this project should be undertaken as an incubator under the Eclipse Web Tools Project.

Proposed project lead and initial committers

Oracle has committed to providing project leadership and developer resources for this project. During the proposal phase the project leadership will be pro-actively contacting interested parties to invite their contribution of code and development resources.

  • Project Lead: Raghunathan Srinivasan, Oracle

Interested parties

Initially, JSF Expert Group members and other individuals and organizations that have serious interest will be solicited to participate. This list would cover a broad base of organizations interested in JSF, including J2EE vendors.

The submitters of this proposal welcome interested parties to post to the eclipse.webtools.jsf newsgroup and ask to be added to the list as interested parties or to suggest changes to this document.