References

My running notes on JSF

Goal

Quickly set up a base environment for JSF that can run under tomcat. The steps presented here are

Download jsf 1.1
Download jstl 1.0
Drop in the jar files in your web app
setup the web.xml
setup the faces-config.xml
create a hello-world.jsp
Access the page via a url
My first error before getting it to work

Downloads

Download jsf 1.1

Download jstl and standard.jar 1.0 version

You need the following jar files from that distribution

lib/jstl.jar
lib/standard.jar

Place the following jar files in your web-inf/lib directory

jsf-api.jar
jsf-impl.jar

jstl.jar - jstl api
standard.jar - jstl implementation

commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-logging.jar

Place the following in web.xml


<servlet>
	<servlet-name>Faces Servlet</servlet-name>
	<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
	<load-on-startup> 1 </load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>Faces Servlet</servlet-name>
	<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<listener>
	<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

Please pay special attention tot he listener class. This seem to be required in tomcat.

where are the taglibs for JSF

These are available in the jsf implementation jar and will be loaded by the container automatically. No need to define them in web.xml using the taglib directive and taglib location.

Create a faces-config.xml

Copy the following as faces-config.xml into the web-inf sub directory in line with web.xml.


<?xml version="1.0"?>

<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<faces-config>
</faces-config>

A simple jsf page


<HTML>
<HEAD>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<TITLE>page title</TITLE>
</HEAD>
<f:view>
	<BODY>
	<P>Hello world.</P>
	</BODY>
</f:view>
</HTML>

Access your web page

You can access this html page as

http://localhost/jsfapp/faces/some-sub-dir/hello-world.jsp

Where the "jsfapp" is your web app name and hello-world.jsp is the above jsp page. Notice the /faces/ as part of the url.

My first error before getting it to work

Things rarely work the first time. I have got a null pointer exception in FacesServlet.init(): 144 trying to factory up an application object. As it turns out I have forgotten the listener definition in the web.xml and then I also forgot the two jstl jar files in web-inf/lib