Introduction to JSF
NOTE: See the updated documentation in our Confluence Wiki
JavaServer™ Faces is the well-established standard for web-development frameworks in Java. The standard is based on the MVC paradigm, but is additionally to most web-frameworks also component-based and event-oriented.
In the following, we'll take you through a short guided tour of a JSF example and we will discuss what code you need to build a first JSF application.
In JSF, the first step to build web-applications is to create a page-structure by arranging JSF components in a tree. For defining this page-structure, different templating languages can be used. In the standard, JSP is used, other options include XML based templating languages like Shale Clay or Facelets.
A very short example for a typical JSF-view would be the following:
<html> <head> </head> <body> <f:view> <h:form id="mainForm"> <h:outputLabel for="enterName" value="Enter Name"/> <h:inputText id="enterName" value="#{sayHelloPage.name}"/> <h:commandButton value="Say Hello" action="#{sayHelloPage.sayHello}"/> </h:form> </f:view> </body> </html>
This example shows the basic setup of a typical JSF-page: an <f:view/>-tag is the root-component of the JSF page. Next, you will want to put a form-component into the tree right after this root-component (in JSF, all input and command-components need a form wrapped around them, also the commandLink-component, so the form should be opened very early).
The important part of the page starts then: the page structure consists of a label-component, a data-entry component and a button to submit the changes caused by the user.
The next step in building a JSF-application is to wire up these components with the backing-beans. This wiring is done using the expression-language of JSF, the Unified EL (this EL is also used in the JSP templating technology). EL-expressions usually refer to Java-bean instances defined in a JSF configuration file, the faces-config.xml.
The EL-expression #sayHelloPage.name would refer to the property "name" of the managed-bean "sayHelloPage". To be able to refer to this managed bean, you would need to add the following section to your configuration-file (found under /WEB-INF/) faces-config.xml:
<managed-bean> <managed-bean-name>sayHelloPage</managed-bean-name> <managed-bean-class>demo.SayHelloPage</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
Finally, for completing the first page of your JSF-application, you would need to write a Java-class like the following:
public class SayHelloPage { private String name; public void setName(String name) { this.name = name; } public String getName() { return name } public String sayHello() { return "success"; } }
JSF managed-beans are POJOs - you do not have to inherit from any special base-classes, just provide a public no-argument constructor, add your properties and you are ready to go. The method sayHello in the above class is (in the page template) bound to the command-button "Say Hello" via the action attribute of this button. On every click on the command-button, this method will be executed (it is the event-listener for the click on the button), it is an action method. From this method, you can return a string - the string returned from an action-method will then be used by the JSF navigation system to determine to what page the JSF-engine needs to move on.
<navigation-rule> <from-view-id>/page1.jsp</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/page2.jsp</to-view-id> </navigation-case> </navigation-rule>
In the configuration snippet above, the navigation-system of JSF is configured to jump from page1 to page2, if the outcome success is returned from the action-method.
Look at Sun's JSF Page to learn more about the Java Specification Request 314 (JSF 2.0) and to download the specification. You can also find a useful Tutorial there.