Matt RaibleMatt Raible is a Java Champion and Developer Advocate at Okta. developer.okta.com

The JHipster Mini-Book The JHipster Mini-Book is a guide to getting started with hip technologies today: Angular, Bootstrap, and Spring Boot. All of these frameworks are wrapped up in an easy-to-use project called JHipster.

This book shows you how to build an app with JHipster, and guides you through the plethora of tools, techniques and options you can use. Furthermore, it explains the UI and API building blocks so you understand the underpinnings of your great application.

For book updates, follow @jhipster-book on Twitter.

10+ YEARS


Over 10 years ago, I wrote my first blog post. Since then, I've authored books, had kids, traveled the world, found Trish and blogged about it all.

Taming JSF 1.1

A couple weeks ago, I received an e-mail from Ray Davis of University of California, Berkeley. In the e-mail, he provided me a link to his team's Confluence Wiki - where he describes their experience and frustrations with JSF 1.1. I really like how Ray explains the problems they experienced, as well as how they fixed them. The "request thread" scope they created sounds similar to what Spring Web Flow does.

Our experience left us very happy with Spring, moderately happy with Hibernate, and not at all happy with JSF. We did manage to deliver a Pilot Gradebook that told us what we needed to know, but sacrificed reliability, consistency, and scalability to do so.

In January 2005, when we moved to full-time work on the official Sakai 2.0 Gradebook, JSF was our biggest concern.

It's a good read for those looking to jump into JSF. I think JSF 1.2 will solve a lot of problems, but who knows how long it will take to get a RI and MyFaces version of that.

Posted in Java at Jul 27 2005, 02:51:40 PM MDT 9 Comments
Comments:

JSF 1.2 is available for download from http://javaserverfaces.dev.java.net. One catch, it uses JSP 2.1 which is currently only available in Sun's Glassfish project.

An alternative is to look at Facelets. There were a lot of issues with JSP and JSF integration-- which is where a lot of people's headaches came from as the article highlights. Especially things like variable management and scope.

Facelets works with JSF 1.1 (MyFaces) and JSF 1.2 (RI) and leverages EL and variable management in such a way that there's no need to wait for JSP 2.1. On top of that, Facelets has templating built right into the Framework, it's not an after thought and highly performant as a first class benefit of Facelets (http://hookom.blogspot.com/2005/05/facelets-templating.html).

Releases are available from http://facelets.dev.java.net and intitial documentation is available here. Matthias from Apache MyFaces demonstrated Facelets at ApacheCon and said it was a hit with the people he talked to.

Right now it's still in pre-production grade as we are trying to finish up some last features to make it 'the' choice for JSF development. It's extremely lightweight and is able to take a 7K JSF page and construct a component tree from it in a tenth of a millisecond. Best of all, it looks exactly like a JSPX page, but has the same features as Tapestry with 'jwcid' ('jsfc' in Facelets case).

Posted by Jacob Hookom on July 27, 2005 at 07:45 PM MDT #

Jacob - you don't have to sell me on Facelets - I think it's a great idea. I hope to start playing around with them next month - possibly integrating them into both Equinox and AppFuse. Any guesses on when Facelets will be "production-grade"?

Posted by Matt Raible on July 27, 2005 at 09:56 PM MDT #

Very soon :-) I would like to get more people trying out Facelets so I can stamp what would be considered 'production-grade' on the framework. I'm really hoping to button up documentation before I would announce Facelets on TSS or Java.net. There are working demos available with the Faclets releases and a guy in my department is already using Facelets on a project. Maybe it's just apprehension on my part to stamp Facelets as 'production-grade', but I've gotten great input so far and would like to recieve feedback from others in the community.

Posted by Jacob Hookom on July 27, 2005 at 10:23 PM MDT #

I've also been meaning to take a look at facelets. It would nice to see integration of Shale and facelets. Shale's Clay plugin now also has full html tapestry like views so that you can use a full html document templates to build the component tree. I bet that the Clay component would work under facelets too if you needed the tiles like inheritance.

Posted by Gary on July 28, 2005 at 08:11 AM MDT #

Thanks for your comments Gary (and Matt, I promise to leave the sandwich boards at home from now on ;o)

I've taken a look at Clay, and Facelets has a lot of the same features that may be considered more familiar to JSP developers with templating and re-use. I would be intersted in tying in Shale's UIComponents into Facelets, but it would probably something that would happen through the MyFaces group.

Posted by Jacob Hookom on July 28, 2005 at 11:07 AM MDT #

I've also been curious about Facelets for a while, but lately the Sakai team's been under the gun a bit too much for me to be able to experiment comfortably -- thanks for the updates, Jacob.

Posted by Ray Davis on July 28, 2005 at 11:58 AM MDT #

Curious -- what problems (of Sakai's or otherwise) do you feel will be resolved by the 1.2 release?

Posted by Greg on July 28, 2005 at 07:26 PM MDT #

Here's a short list of fixes that would have benefitted Sakai's project:

  • Handling multiple Views: Ed Burns worked quite a bit on the RI with state saving and multiple windows. While I'm not sure of the final outcome of his work, the issue was supposedly fixed.

  • Object Context/Session Scoping: Because of the new EL-Spec, you can provide any number of 'variable-spaces', including your own transaction variable space that's managed elsewhere. This means you could wire up something with Spring and specialized scopes for some work flow, invisible to any lifecycle or scope that's web related.

    For example, backing each view with a bean could be handled by creating an ELResolver that always resolves the variable 'dialog' to a Spring bean that matches the current ViewId on the FacesContext. Simple :-)

  • AliasBean and Variables within a Page: The new EL has what's called a VariableMapper. This allows you to 'alias' expressions and have them work between 'includes' and JSTL. So things like c:forEach will properly work now. I'm still not sure how I was able to come up with a solution for this issue (maybe wisconsin beer?), but it magically fixes LOTS of problems with JSF integration in pages. Facelets is built upon this new EL implementation btw.

  • Other various bugs were fixed.

Next on my list is to add support for annotations so component development will be a no brainer where statesaving, and rendering can be 'automated' for you.

Posted by Jacob Hookom on July 28, 2005 at 07:55 PM MDT #

Sorry, Greg -- I went on vacation around the same time you posted your question. Luckily, Jacob's authoritative response is way more helpful than my speculations would've been!

Posted by Ray Davis on August 08, 2005 at 05:21 PM MDT #

Post a Comment:
  • HTML Syntax: Allowed