Use a4j:jsFunction to proxy the javascript

In my development task, I want to use #{rich.component('some_comp_Id')} in my javascript code, but it's impossible to let js recognize it.

So, I found a way to use a4j:jsFunction to do the proxy.


Suppose we have a js method named showModalById, but now we want to create a method named showModalByComponent.

function showModalById(id){




function showModalByComponent(component){

     //we cannot use #{rich...} here, if the parameter is Id




The New World is:

<a4j:jsFunction name="showModalById" oncomplete="showModalByComponent(#{rich:component(flash.window)});">

     <a4j:param name="some_comp_Id" assignTo="#{flash.window}"/>



The flash is the page cache which is JSF2 new feature. And the window is a random name, you can define it whatever.


Then the old showModalById is no used, and you can invoke the method like this way:


<... onclick(showModalById('treeId'))/>

The showModalByComponent will be a background method.




Good Luck!