Alexander Smirnov’s personal Weblog

March 24, 2011

RichFaces JavaScript service

Filed under: Java, Java server faces — alexsmirnov @ 3:22 pm


In the modern Web interface development, inline event handlers considered as the bad practice – see article for detail.
Also, for performance reason, Web experts ( Yahoo  YSlow, Google  Page Speed and others ) recomend to load  plain html code first, and only add user interaction code at the bottom of page.
For the same reason, all JavaScript files has better to be loaded at the bottom of page too.
jQuery library makes that stile pretty easy, using $(page).ready() or just $() callbacks. But, there is a problem with JSF AJAX: jQuery knows nothing about JSF library, and code inside page.ready handler will nether be called after page update.
Another drawback for JavaScript dependencies comes from the JSF 2 component resources which cannot be changed from per-component dependencies ( useful for development stage ) to solid compact library or external CDN refferences.
RichFaces JavaScript service designed to solve problems above.

How it works

RichFaces provides JavaScriptService object ( available via ServiceTracker )  to render JavaScript defeered JavaScript code at the bottom of the page or inside jQuery page.ready handler.
Getting service instance:
JavaScriptService javaScriptService = ServiceTracker.getService(JavaScriptService.class);

The service instance created by RichFaces initialization listener, and can be replaced by different implementation by custom Module, see documentation for ServiceTracker.
Adding script to be rendered at the bottom of page:
javaScriptService.addScript(facesContext, script);

What does this method do ? It looking for special UIScripts component in the UIViewRoot.componentResources collection, or creates new if there to such component yet, and append script object to the Set of objects submitted to be rendered. To avoid rendering of the same script more then once, it checks collection for the same script ( using equals() method ). If the same object already submitted to be rendered, it returns existing object. Otherwise, new script added to the collection and returned by method. That check allows to render the same script only once, even if component that requires such code rendered many times.
For example, component that wraps jQuery widget can use special ‘class’ attribute to mark its instance on the page, and the same script can activate all widgets using that class as discriminator.
Another method lets developer to append script that will be rendered inside page.ready handler:
javaScriptService.addPageReadyScript(facesContext, script);

The only difference with addScript() method that scripts appended into separate collection that processed in the special way. UIScript component writes them inside such JavaScript code:
<script type=”text/javascript>

$(document).ready(function() {

content of the scripts collection goes here



See jQuery documentation for ready() function for details how it works.
For AJAX requests ( important note – only RichFaces AjaxBehavior supported ) the same scripts rendered in the <execute> part of response that processed after DOM updates. Therefore, the same code works for both page rendering and AJAX modes.
In addition, script object can implement org.richfaces.resource.ResourceLibrary interface and provide additional dependencies. These dependencies will be rendered as links to external resources before in-content <script> element.




  1. Get Satisfaction From Your Cat By Following These Stable Ideas.

    Cats are incredible pets. If you would possibly’t be in your own individual household all evening, cats can are dwelling on their really own personal. The following posting will permit you to to figure out all about cats.

    As speedily due to the fact the holiday season rolls round, safeguard your Xmas tree from curious kitties. It may well see that tree and climb it. That could quite possibly be an enormous difficulty. Won’t enable your
    pet doggy to prowl all-close to your tree. You
    will should also be sure that you may determine no loose
    garlands, ornaments or tinsel that may well incredibly nicely be eaten utilizing the cat.

    Never have your cat bring a med if they’re not struggling inside the appropriately getting problem it experienced been intended to cope with. A amount of of all all those flea medicines you go well with as component of your cat also deal with for parasites, mites as well as other diseases which the cat wouldn’t have and are unable to contract.
    Despite the fact that these medicines are effective on highway cats, they is
    usually truly not crucial for indoor cats.

    The place of the respective litter subject is vital.
    Your 1st

    Comment by catering — July 14, 2013 @ 3:48 pm

  2. Very good post:) My only question is how the org.richfaces.resource.ResourceLibrary additional dependencies should work in AJAX mode.

    Comment by Luca — May 5, 2012 @ 6:36 am

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Blog at

%d bloggers like this: