Customized Onsite JSF 2 & PrimeFaces Training Courses

“Wonderful.  In 20 years,
this is the best organized,
most pragmatic and
enjoyable course I've taken.”

“The best instructor-led
course I have attended, by far.”

“Best short course ever!”

“I've taken other JSF 2.0 courses
before, and this one was by far the best.

I came with very little knowledge
of JSF, and now I look forward to
using it on my next project.”

Great overview of JSF 2.0 and PrimeFaces.
I knew next to nothing about the two
coming into the course, but now feel like
I can deliver a robust Java Web app.

Couldn't imagine a better
JSF training course!

“GREAT class [JSF]
Do you make house calls?”

more student reviews

JSF Logo Looking for practical, hands-on training on JSF and/or PrimeFaces taught onsite at your organization? Look no further! These courses are personally developed and taught by leading JSF and PrimeFaces developer, speaker, and author Marty Hall. No contract instructor regurgitating someone else's materials! Marty has taught JSF, PrimeFaces, Java 8, Ajax, GWT, and other Java EE courses onsite for dozens of organizations in the US, Canada, Mexico, Australia, Japan, Puerto Rico, India, Cambodia, Norway, and the Philippines, all to rave reviews. Marty is also the author of several popular Java EE books, including lead author of Core Servlets and JSP and co-author of the upcoming JSF 2.2 edition of Core JavaServer Faces.

If you have a group of at least eight interested developers (10 for courses outside North America), contact Marty to arrange a course at your location. Onsite courses are easier administratively, are better for clients since the topics and pace can be customized, are more cost effective for students since no travel is required, and are more convenient (for companies in the Baltimore/Washington area) because the schedule is flexible (e.g. afternoons or evenings instead of n consecutive days). However, if you have too few developers for an onsite course, check out the upcoming public JSF 2 and PrimeFaces training course in Maryland (co-sponsored by the Johns Hopkins Engineering for Professionals program).

Expand some of the following sections for more details and various course options. Then email to discuss which options would work best for your developers.

Overview and Course Options

JSF version 2 is the official Java EE library for building Web apps. Given the requirements of most modern systems, servlets and JSP are simply too low-level: a higher-level framework is needed. Of the major Java-based Web application frameworks (JSF, Struts, SpringMVC, Wicket, etc.), only JSF is part of the official Java EE standard, only JSF has a wide variety of third-party rich component libraries, and JSF is simply the most widely used. However, version 1 of JSF was a mixed blessing. On the one hand, it was backed by Sun, Oracle, IBM, and Apache, and had a component API that resulted in a large and rich set of third party component libraries (RichFaces, IceFaces, PrimeFaces, Tomahawk, ADF Faces, OpenFaces, etc.). But, for ordinary developers, JSF version 1 was hard to use, tedious to configure, difficult to extend, and limited in power. JSF 2 is a dramatic improvement in both power and ease of use, and as a result, JSF 2 has firmly established itself as the Java framework of choice for building real-world Web apps. However, JSF is very large, and it takes significant expertise to understand the parts to concentrate on first and which pieces apply to which types of applications. We provide several practical, hands-on courses to help with this learning process.

The exact topics covered depend on what you are trying to learn (see options below), but every course section gives details on the most important topics, surveys more advanced or lesser-used JSF features, stresses best practices, and gives plenty of working examples. All our courses are in lecture/lab format, where each course section is followed by a series of hands-on exercises that use JSF to reinforce the concepts. There is a choice of exercises of varying complexity so as to accommodate developers with various levels of expertise and previous experience, and at the end of the course, the students can keep all of the source code from the lectures and all the exercise solutions, available free for unrestricted use.

Here are some popular course options. We can use either JSF 2.1 or 2.2, depending on what you expect to deploy on. We can also use any of Java 6, Java 7 (most common choice), or Java 8, again depending on how you plan to deploy. Email me if you are not sure which to use.

JSF Logo
  • JSF 2 and PrimeFaces. The most popular course, by far, covers both JSF 2 and PrimeFaces in a single course, with the exact topic mix dependent on the experience level of the students in the class. It covers all the core JSF topics: managed beans, flow of control, handling form data, navigation, the expression language, property files and I18N, GUI event handling, Ajax, form-field validation, looping in facelets pages, data tables, page templating, basic composite components, etc. It then gives a fast introduction to PrimeFaces, covering comparisons to other JSF component libraries, setup (minimal!), number input elements, string input elements, dialogs and other overlays, tabbed panels and other panels, and theming.
  • JSF 2. This course is for those who want to learn JSF, but whose organizations do not plan to use the PrimeFaces rich component library. It covers the same JSF topics as above, but drops the PrimeFaces topics and adds in more lectures on composite components as well as coverage of view parameters for handling GET requests.
  • Advanced JSF 2. Aimed at developers that have either extensive JSF 1 experience or moderate JSF 2 experience, this focuses on the advanced JSF topics: the second half of the JSF topics listed above, three more lectures on advanced composite components, and view parameters for handling GET requests. This course can be done with or without PrimeFaces.
  • PrimeFaces. PrimeFaces Logo Aimed at developers that have extensive JSF 2 experience, this course totally skips the core JSF topics and focuses exclusively on rich components with PrimeFaces. It covers all of the topics listed in the first course above, as well as extended data tables, menus, image and media viewers, and HTML5-based charts.
  • JSF 2.2 Updates. A shorter course aimed at developers that know JSF 2.0 or 2.1 and want to learn the new features of JSF 2.2 (faces flows, HTML 5 pass-through attributes, stateless views, resource contracts, cross-site request forgery protection, window IDs in browser, etc.)
  • JSF 2 plus General Java. For organizations planning to build JSF apps, but whose developers do not yet know Java, we can do a single course that includes an abbreviated version of the Java programming crash course, followed by an abbreviated version of the first course above. I have also had a moderate number of clients that just did both courses: Java programming first, a few weeks off, then JSF/PrimeFaces development.
  • JSF 2 plus Java 8. For organizations planning to build JSF apps, and whose developers have strong Java 7 experience but no Java 8 knowledge, we can tack a two day Java 8 mini-course on the front of any of the JSF/PrimeFaces courses. Java 8 fits particularly well with server-side apps because it helps to make your code faster, more memory-efficient, and more flexible, especially when dealing with large data sets.
Email to discuss which options would work best for your developers.

Intended Audience

All of the JSF and PrimeFaces courses presume that the students have moderate or extensive previous Java experience. The courses move much too fast for newcomers to Java. If your developers do not already know Java, then you should start with one of the crash courses in Java programming, then move on to JSF after that.

The core courses (JSF 2, with or without PrimeFaces) do not assume any previous knowledge of JSF 2. The advanced JSF 2 course, the JSF 2.2 update mini course, and the standalone PrimeFaces course both assume significant previous knowledge of JSF 2.

Syllabus Choices

Here is a potpourri of possible topics. As discussed above, the topics covered in any course are customizable, but the most common options are: JSF 2 with or without PrimeFaces, advanced JSF 2, and PrimeFaces only. When you book a course, we will first decide on the exact topics based on your needs and level of experience. Email to inquire about a custom course at your location.

JSF 2: Introduction and Overview

  • Why Web Apps?
  • Different views of JSF
  • Pros and cons of JSF
    • Vs. standard servlet and JSP technology
    • Vs. Apache Struts
    • Vs. other Ajax approaches
  • New features in JSF 2.2
    • Vs. JSF 1.x
    • Vs. JSF 2.0 and 2.1

Installation, Setup, and Getting Started

  • Installing required software
    • Installing Java SE
    • Installing Eclipse
    • Installing a server for JSF 2.2
  • Accessing documentation
  • Testing projects
    • Importing and testing an existing JSF 2.2 project
      • Deploying on servlet engine (e.g., Tomcat, Jetty) and on Java EE 7 server (e.g., Glassfish 4, JBoss 7)
  • Making your own JSF 2.2 project
    • Using Eclipse wizard
    • By copying and renaming template project

JSF 2 Programming Basics

  • Simplified flow of control
  • @ManagedBean and default bean names
  • Default mappings for action controller return values
  • Using bean properties to handle request parameters
  • Common beginner problems

XHTML for JSF Developers: A Very Brief Overview

Most JSF developers already know at least the basics of HTML; if your developers are in this category, we will skip this section entirely. This covers barebones syntax basics only, is not advanced HTML, and covers only syntax – it does not discuss HTML design strategies. But, some JSF developers are also new to Web development, and I have been asked by several JSF students to include some introductory material on HTML (this section) and CSS (upcoming section after Managed Beans II).

  • Differences between JSF and pure XHTML
  • Differences between XHTML and HTML 4
  • Differences between HTML 5 and HTML 4
  • Basic structure of an XHTML document
  • Block-level elements
  • Inline elements
  • Hypertext links and URLs
  • Tables
  • Forms
  • Element grouping
  • References

Managed Beans I: Using Java Classes to Represent Form Info

  • Basic beans and "managed" beans
  • Three parts of beans in JSF
    • Getter/setter methods to represent input elements
    • Action controller method
    • Placeholder for results (properties derived from input)
  • Business logic
    • How to prevent changes in the way data is found from rippling through the rest of the code
  • Prepopulating input fields
    • And building comboboxes (drop down menus)

Managed Beans II: Advanced Features

  • Custom bean names
  • Bean scopes
    • Especially session-scoped beans
  • Getting the "raw" request and response objects
  • Dependency injection

CSS for JSF Developers: A Very Brief Overview

Most JSF developers already know at least the basics of CSS; if your developers are in this category, we will skip this section entirely. This covers barebones syntax basics only, is not advanced CSS, and covers only syntax – it does not discuss CSS design strategies. But, some JSF developers are also new to Web development, and I have been asked by several JSF students to include some introductory material on CSS (this section) and HTML (earlier section after Programming Basics).

  • Loading and using style sheets (general approaches and JSF-specific approaches)
  • CSS selectors
  • CSS properties
  • Examples

Explicit Page Navigation and faces-config.xml

  • Basic navigation rules
  • Explicit bean declarations
  • Advanced navigation options
    • Wildcards in navigation rules
    • Conditional navigation rules
    • Dynamically computed to-ids
  • Static navigation
  • Common navigation problems

The JSF 2 Expression Language

  • Motivating use of the expression language
    • Comparing to the JSF 1.x and JSP 2.0 ELs
  • Accessing bean properties
    • Direct
    • Nested
  • Submitting bean properties
    • Expressions in output values
    • Expressions in submission values
    • Expressions for action controllers
  • Accessing collection elements
  • Using implicit objects and operators
  • Passing arguments to methods

Properties Files and Internationalization (I18N)

  • Creating properties files
  • Declaring properties files in faces-config.xml
  • Simple messages
  • Parameterized messages
  • Internationalized messages

Handling GUI (Application) Events

  • Motivation
  • Comparing action controllers to action listeners
  • Action listeners
  • Value change listeners
  • Using JavaScript to submit form
    • Dealing with browser incompatibilities

Integrated Ajax Support in JSF 2

  • Motivation
    • Web apps in general
    • Ajax in general
    • Ajax integrated with JSF 2.0
  • Using f:ajax
    • Overview
    • render: specifying elements to update on client
    • execute: specifying elements to process on server
    • event: specifying user events to respond to
    • onevent: specifying JavaScript side effects
    • Limitations on the use of h:outputText with Ajax

Validating User Input

  • Manual validation
    • Validation in the action controller method
  • Implicit automatic validation
    • Type conversion and the "required" attribute
  • Explicit automatic validation
    • Using f:validateLength, f:validateRegex, etc.
  • Defining your own validation methods
    • Then using the "validator" attribute

ui:repeat and Handling Variable-Length Data

  • Options for handling variable-length data
    • Building strings or simple HTML from a bean property
    • Using a builtin component like h:dataTable
    • Making your own composite component
    • Looping with ui:repeat
  • Using ui:repeat
    • Simple loops
    • Nested loops
    • varStatus
    • Conditional output
      • #{someCondition ? simpleVal1 : simpleVal2}
      • <h:outputText rendered="…" …/>
      • <ui:fragment rendered="…">…</ui:fragment>

h:dataTable -- Building Tables from Collections

  • Options for handling variable-length data
    • Building HTML from a bean property
    • Using a builtin component like h:dataTable
    • Making your own composite component
    • Looping with ui:repeat
  • Using h:dataTable
    • Basics: h:dataTable and h:Column
    • Headings
    • Style sheets
    • Ajax-enabled tables
    • Tables with conditional values

Page Templating

  • Motivation
  • Basic mechanism
    • Template file
    • Client file
  • Templating with includes
    • Reusable chunks of content that are not part of template, but are used in multiple pages
  • Handling relative URLs
    • And relocatable resources

Composite Components Part I -- Basics

  • Idea
  • Basic components
  • Passing values to components
  • Using ui:repeat inside components
  • Handling relative URLs in components

Composite Components Part II -- Input Components

  • Idea
  • Making basic input components
  • Using the "type" attribute
  • Giving components their own CSS file

Composite Components Part III -- Backing Components

  • Backing components with custom parsing
  • Backing components with setter methods called inside component code
  • Ajaxified components

Composite Components Part IV -- Wrapping jQuery UI GUI Elements

  • Loading JavaScript libraries
  • Wrapping up a jQuery-UI element as a JSF2 component
  • Finding the real HTML id
  • Escaping colons in JavaScript
  • Passing arguments to the JavaScript

View Params, GET Requests, and Bookmarking

  • Motivation
    • Why support GET?
  • Using f:viewParam
    • To capture incoming request parameters
  • Using h:link and h:button
    • To send outgoing request parameters
  • Using non-JSF forms
    • To send data to JSF pages that use f:viewParam
  • Using POST-redirect-GET
    • To make JSF results pages bookmarkable

Faces Flow in JSF 2.2 -- Part 1: Basics

  • Motivation
  • Setup
    • Integrating Glassfish 4 within Eclipse
    • Using Faces Flow and CDI with Tomcat
  • Implicit navigation with faces flow conventions
  • Flow-scoped beans and the flowScope EL variable
  • Configuring flows with flow-specific XML files
  • Configuring flows with the global XML file

Faces Flow in JSF 2.2 -- Part 2: Advanced Features

  • Defining nested flows with XML
    • Calling the nested flow
    • Sending outbound parameters from calling flow
    • Receiving inbound parameters in nested flow
  • Defining standalone flows with Java
    • Class layout, annotations, method definition
    • Start page, views, switches, return pages
  • Defining nested flows with Java
    • Calling nested flows, sending outbound parameters, receiving inbound parameters

PrimeFaces Overview, Setup, and Installation

  • Comparing PrimeFaces to other JSF2 component libraries
  • Installation
  • Testing

PrimeFaces Input Elements: Date Input

  • Basic Date input with p:calendar
  • Inline calendars
  • PrimeFaces versions of standard elements: :commandButton, p:messages, p:fieldset, p:ajax
  • Ajax updates
  • Controlling look of the calendar
  • Animation effects on open/close
  • Collecting times as well as dates

PrimeFaces Input Elements: Number Input

  • p:spinner: For collecting int or double with a textfield that has up/down arrows.
  • p:sliderL For collecting int with a slider.
  • p:rating: For collecting int in a narrow range, for use as a rating.

PrimeFaces Input Elements: String Input Part 1

  • p:inputMask
  • p:autoComplete
  • p:inputText
  • p:inputTextArea

PrimeFaces Input Elements: String Input Part 2

  • Interactive HTML color chooser -- p:colorPicker
  • Text that becomes editable when clicked -- p:inplace
  • Element that validates text matches images -- p:captcha
  • Password field with feedback on strength -- p:password
  • Editor that lets user create rich HTML text -- p:editor

PrimeFaces Overlays and Popup Windows

  • p:message and p:messages
  • p:growl
  • p:dialog
  • p:dialog with on-page validation
  • p:confirmDialog

PrimeFaces Panels

  • Accordion panels
  • Tabbed panels
  • Scroll panels
  • Other panels

PrimeFaces Themes (Skins)

  • Installing and specifying a default theme
  • Changing themes at runtime with p:themeSwitcher
  • Looking up current theme
  • Changing themes at runtime without using p:themeSwitcher
  • Best practices for using themes

PrimeFaces Expanded Data Table

  • Pagination
  • Sorting
  • Filtering
  • Dynamic Columns

PrimeFaces Menus

  • Menu
  • MenuBar
  • MenuButton
  • SlideMenu
  • TieredMenu

Image and Media Viewers

  • Galleria
  • ImageSwitch
  • Media

HTML5-Based Charts

  • Area
  • Bar
  • Bubble
  • Donut
  • Line
  • Pie

About the Instructor

Marty Hall Marty Hall is president of, a training and consulting company focusing on server-side Java technology, Android development, and front-end development with JavaScript and jQuery. In addition to long Java development and consulting experience, Marty has an extensive background in teaching and training, having given training courses on Java (now using Java 8), JSF 2, PrimeFaces, Android, Ajax/jQuery, GWT, and other Java EE topics in Japan, Canada, Australia, the Philippines, Mexico, Puerto Rico, India, Cambodia, Norway, and dozens of US venues. He has taught onsite at Google (both the Mountain View and NY offices), the NSA, the CIA, General Dynamics, Northrup Grumman, General Motors, VeriSign, Symantec, the Federal Reserve Bank, Comcast, Hewlett Packard, Fannie Mae, Motorola, Learjet, the US Navy, the Australian Treasury Department, Telenor Norway, and dozens of other organizations around the world. (A more extensive list can be found on Marty's bio page.)

JavaU @ JavaOne

A popular and entertaining speaker, Marty has also spoken at conferences and user groups around the world, including Comdex, the Web 2.0 Expo, and six times at JavaOne, most recently in 2015. Marty is also adjunct faculty in the Johns Hopkins University part-time graduate program in Computer Science, where he directs the Java and Web-related concentration areas.

Marty Hall is also the lead author of six popular Java EE books from Pearson, including Core Servlets and JSP, and is the co-author of the upcoming JSF 2.3 edition of Core JSF. He has also produced training videos for Pearson on JSF, PrimeFaces, Java 8 lambdas and streams (for those that know Java 7), general Java programming using Java 8 (for those new to Java), JavaScript, and jQuery.

  • Core Servlets and JSP is the all-time worldwide bestselling servlet/JSP book, published in Bulgarian, Chinese Simplified Script (Mainland China), Chinese Traditional Script (Taiwan), Czech, Greek, English, French, German, Hebrew, Japanese, Korean, Polish, Portuguese, Russian, and Spanish.
  • Core JSF is widely recognized as the leading text on Web App development with JavaServer Faces.
  • In addition be being best sellers in industry, Marty's books have been widely used in academia (including Stanford, MIT, Princeton, U.C. Berkeley, UCLA, Johns Hopkins, and dozens of others).

For more details, please see the Marty Hall bio.

Course Reviews

Here are a few of the reactions of previous students; we are confident that you will have the same reaction. So confident, in fact, that we offer an unconditional guarantee: if you are not satisfied with the course, we will refund the full cost.

“In my 35+ years of taking technical courses, Marty's classes consistently come out ranking #1 on my list. Highly relevant material is delivered with enthusiasm, humor, and a high degree of class interaction that is unmatched anywhere. ”

“Masterful, quick-paced presentation. Witty, but never trite. Discussed but never belabored. A Java ed-venture. A gaggle of Goslings could not have done better!”

“Wonderful. In 20 years, this is the best organized, most pragmatic, and enjoyable course I've taken.”

“Excellent course. The best instructor-led course I have attended, by far. The course was exactly what I was hoping for.”

“Best short course ever!”

“Compared to the other short courses I have taken, this one completely redefined my scale from 1-10.”

“This course was AWESOME. I came with very little knowledge of JSF and now I look forward to using it on my next project.”

“GREAT class [JSF]. Do you make house calls?”

Promos for Marty Hall at GIDS conference in Bangalore

Ads for Marty at GIDS conference in India

“I'm not easily pleased by industry courses. Luckily, not all presenters are as good as Marty, otherwise University lecturers like myself would be out of work.”

“This was, by far, the best Java training course I have attended... After 4 days, I feel prepared to dive into JSF development with a solid understanding of the basics. I know this is going to make my life easier over the next year. Thank you!”

“Marty is a fantastic teacher and communicator. I thoroughly enjoyed the course and it was timely for my current work.”

For more reviews, please see the course review page.

Other Onsite Java EE Training Courses offers customized onsite courses on general Java programming using Java 8 (for those new to Java), Java 8 lambdas and streams (for those experienced with earlier Java versions), JSF 2, PrimeFaces, Hadoop (including certification prep), the Java EE 8 MVC framework, Android programming, JavaScript and jQuery, the Spring Framework, GWT, servlets/JSP, and custom combinations of topics. Available at any location worldwide.

  • Guinea pigs? No! Our courses are well-tested, having been taught in 9 countries and dozens of US venues. We don't use your developers as guinea pigs for new materials.
  • Regurgitation? No! Our instructors developed all their own materials. No contract instructor regurgitating memorized PowerPoint slides.
  • Green? No! Our instructors are experienced developers, and most have authored popular Java EE texts, spoken at JavaOne, and done extensive onsite training. The course gives best practices and real-world strategies. No newbie instructor dodging tough questions.

For more details, please see the training course home page, or email

Public Training Courses

Coreservlets normally runs on-site training courses at customer locations. This is easier administratively, is better for clients since the topics and schedule can be customized, and is more cost effective for students since no travel is required. However, due to demand from those who do not have enough students for an on-site course, we periodically run public training course at the Johns Hopkins Dorsey Center in Elkridge MD. These courses feature the same experienced instructors as our onsite courses, and are co-sponsored by Johns Hopkins Engineering for Professionals.


For more details, please see the public course schedule.