What makes Forge particularly interesting, from my perspective, is the way it was built with plugins in mind as a defining way in which the platform is meant to be extended. To take this new tool for a spin, I created a Forge plugin for RichFaces - the killer component kit for JSF 2.
For instructions on installing Forge, refer to the Forge Documentation. The following guide assumes you have Forge installed and functional.
** The instructions in this blog are for the 0.1.0 version of the RichFaces plugin for Seam Forge. See the project's README.txt for update usage instructions. **
First, lets install the RichFaces plugin for forge (installing from git!):
$ forge git-plugin git://github.com/bleathem/richfaces-forge-plugin.git
Forge makes it easy to create a new project:
$ new-project --named richfacesApp --topLevelPackage ca.bleathem.richfaces.test --projectFolder richfacesApp
Next, make the project a Java EE wep app, by installing the "servlet facet":
$ project install-facet forge.spec.servlet
Now, we can run the "richfaces" command, with no arguments to see the options available:
$ richfaces Use the install commands to install: install-base: maven dependencies, and web.xml configuration install-example-facelet: a sample RichFaces enabled facelet file with backing bean install: both base and example-facelet
Running "richfaces install" duplicates the behaviour of the existing RichFaces maven archetype. If you have an existing project, and you just want to use forge to add the RichFaces dependencies and setup the web.xml, run "richfaces isntall-base". For our vanilla application, we'll run the full install, and see a simple facelet page with an input component "ajaxified" with RichFaces.
$ richfaces install ***SUCCESS*** RichFaces BOM dependency has been installed. ***SUCCESS*** org.richfaces.ui:richfaces-components-ui:4.0.0.Final dependency has been installed. ***SUCCESS*** org.richfaces.core:richfaces-core-impl:4.0.0.Final dependency has been installed. ***SUCCESS*** javax.servlet:servlet-api dependency has been installed. ***SUCCESS*** javax.servlet.jsp:jsp-api dependency has been installed. ***SUCCESS*** javax.servlet:jstl dependency has been installed. ***SUCCESS*** net.sf.ehcache:ehcache dependency has been installed. ***SUCCESS*** javax.faces.PROJECT_STAGE context-param has been installed. ***SUCCESS*** javax.faces.SKIP_COMMENTS context-param has been installed. ***SUCCESS*** Faces Servlet mapping has been installed. Wrote /home/bleathem/NetBeansProjects/richfaces/richfacesApp/src/main/webapp/WEB-INF/web.xml Wrote /home/bleathem/NetBeansProjects/richfaces/richfacesApp/src/main/webapp/templates/template.xhtml ***SUCCESS*** template.xhtml file has been installed. Wrote /home/bleathem/NetBeansProjects/richfaces/richfacesApp/src/main/webapp/index.xhtml ***SUCCESS*** index.xhtml file has been installed. Wrote /home/bleathem/NetBeansProjects/richfaces/richfacesApp/src/main/java/ca/bleathem/richfaces/test/RichBean.java ***SUCCESS*** RichBean class has been installed.
This new RichFaces enabled maven project is ready to be opened up in your favorite IDE (I used Netbeans) and run in your preferred run-time container (I used Glassfish 3.1).
This is early days for this plugin. I achieved my initial goal of being functionally equivalent to the maven archetype, but there is plenty of room for improvement. Some of my ideas are:
- Make the sample facelet page more attractive, and showcase more of RichFaces capabilities
- Test and support the generated application in more containers - including Servlet 2.5
- Scan and convert vanilla facelet tags (or tags from other frameworks) converting them to RichFaces components. I'm thinking specifically dataTables, but I'm sure this would work well for other components.
Fork away, lets show the power of Seam Forge with the RichFaces plugin!