Over a million developers have joined DZone.

JSF passes Swing as the number one Java GUI component model for job demand

DZone 's Guide to

JSF passes Swing as the number one Java GUI component model for job demand

· Java Zone ·
Free Resource

[img_assist|nid=543|title=Kito suggested I change the search from JSF and java to (jsf or "JavaServer Faces" or "Java Server Faces") and java.|desc=|link=none|align=left|width=540|height=300]JSF passed Swing as the number one GUI component model for Java.

JSF did well in 2007. Let's put it this way: If job demand for the Struts framework and JSF were a stocks and you invested in it in April of 2005 by July of 2007 you would barely break even with Struts but with JSF your investment would have grown 700% as of July 2007. (According to indeed.com.)

Note: Struts continues to do really well; it is still number 1. Yet after Struts, JSF is doing well and Struts growth is as flat as EJBs.

JSF does really well against all other competitors as shown in this graph:[img_assist|nid=506|title=|desc=|link=none|align=right|width=540|height=300]











Struts growth is as flat as EJBs as follows:

[img_assist|nid=507|title=JSF vs. Struts growth|desc=|link=none|align=left|width=540|height=300]











As I have said before, Struts is a case study in how you run a successful Open Source project. For a lot of companies, Struts was their first open source project that they used so it has opened a lot of doors. Struts open the door for Hibernate and Spring. The number one download on TheServerSide in 2007 (and probably 2005, 2006) is a book I wrote on Struts so I get it (The book was written in 2004), people still use Struts.

The problem with indeed.com is since there still is not as many folks with JSF skills or Spring MVC skills, Struts is even listed as a skill if a company is looking for JSF developers or Spring MVC developers since having it as a skill is a sign of experience.

Also, there is no reliable way to differentiate between Struts 1.x and Struts 2.0 since many job requests don't list version numbers. Similarly, many people who are using Spring just assume Spring MVC as well so they don't list it. Thus, it is hard to really measure Struts 2 and Spring MVC.

(Note: I use both JSF and Spring MVC regularly.)

As indeed.com goes, JSF growth was fairly slow until January 06. Then is started to take off and grew very quickly. Demand doubled in less the a year and then double the next year as well. Why? I am not exactly sure. My guess would be the AJAX component frameworks for JSF (like Ajax4JSF, Avatar, IceFaces, etc.), composition components via Facelets (and perhaps Clay), Seam, improvements in JSF 1.1 and JSF 1.2, and folks coming up with workarounds for JSF problems, etc. There seems to be a lot of interests in JSF in the Java community and growing job demand to match.

JSF 2, which is forming, incorporates Facelets concepts, adds native Ajax support (similar to Ajax4JSF) and makes JSF component development easier. JSF 2 should further enhance ones investment in JSF. The new model has partial page rendering via Ajax, which is available today from tools like Ajax4JSF.

With the above said, JSF is still plagued with issues (some technical, some community) and is far from perfect (which I will blog/post about this year).

I am not tied to JSF. When I wrote Crank (a Java CRUD framework), I made sure it was not tied to JSF so I could switch to Struts 2, Spring MVC or Wicket if I needed to (or more likely was paid to do).

Also JSF faces a real battle against RIA frameworks. Flex + Java is gaining a lot of ground. GWT is showing strong growth as well. In the end, Flex + Java could damage JSF growth. If 2008 is the year of RIA, then where is JSF? Will JSF 2.0 be enough?

A lot of JSF future depends on how strong (and soon) JSF 2.0 is going to be.

Here is a recent tutorial I wrote showing how to use JSF as a GUI component model instead of a replacement for Struts:

JSF Tutorial Update for JSF 1.2

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}