RichFaces 3.1 released!

Posted by    |      

The RichFaces team has released RichFaces 3.1.0. This release merges the functionality of Ajax4JSF and RichFaces into a single package and adds a number of new components. You can get the new release here or try out the online demo.

Previously, Ajax4JSF and RichFaces were distributed seperately since Ajax4JSF was open source and RichFaces was a commercial product sold by Exadel (and layered on top of the Ajax4JSF engine). Since the RichFaces project was open sourced at JBoss, this split distribution was no longer meaningful. We've now completely merged the projects and packaging.

Major new features of this release include:

Tool tips may be easily attached to any JSF control, for example:

<rich:toolBar>
    <rich:dropDownMenu value="File">
        <rich:menuItem value="Open...">
            <rich:toolTip>Open a file from the disk...</rich:toolTip>
        </rich:menuItem>
        <rich:menuItem value="Save">
            <rich:toolTip>Save the file to the disk</rich:toolTip>
        </rich:menuItem>
        <rich:menuItem value="Save As...">
            <rich:toolTip>Save the file to the disk with a new filename</rich:toolTip>
        </rich:menuItem>
    </rich:dropDownMenu>
    <rich:dropDownMenu value="View">
        ...
    </rich:dropDownMenu>
</rich:toolBar>

My favorite new feature is building trees without the need for Java-based databinding code (ie. no TreeModel or equivalent). Instead, databinding may be done completely in the user interface. For example, if I have a hierachical directory structure, and each directory contains files, I could build my tree of directories and files as follows:

<rich:tree switchType="ajax">
    <rich:recursiveTreeNodesAdaptor roots="#{root}" nodes="#{dir.children}" var="dir">
        <rich:treeNode>#{dir.name}/</rich:treeNode>
        <rich:treeNodesAdaptor nodes="#{dir.files}" var="file">
            <rich:treeNode>#{file.name}</rich:treeNode>
        </rich:treeNodesAdaptor>
    </rich:recursiveTreeNodesAdaptor>
</rich:tree>

We use <rich:recursiveTreeNodesAdaptor> for the directory tree because each directory contains other directories recursively. For files, we use <rich:treeNodesAdaptor>, since the list of files is just one level deep in each directory. (Please compare this code to the code you would have to write in Swing or other frameworks with a Java-based approach to databinding!)

Congratulations to the whole RichFaces team!


Back to top