Search code examples
javascriptjsfrichfacesajax4jsf

How to use <a4j:jsFunction><a4j:actionparam>


I'm trying to use:

<script type="text/javascript">
      function myfunc() {
         var param = 4;
         alert("OK");
      }
</script>

I call the function like this:

<a4j:jsFunction name="myfunc">
    <a4j:actionparam name="param" assignTo="#{MyBean.myfield}"/>
</a4j:jsFunction>

But it does not work. In what may be the reason?


Solution

  • You misunderstood the purpose of <a4j:jsFunction>. It autogenerates a JavaScript function which you can then call from any JavaScript code in your view.

    Your example,

    <a4j:jsFunction name="myfunc">
        <a4j:actionparam name="param" assignTo="#{MyBean.myfield}"/>
    </a4j:jsFunction>
    

    will autogenerate the following function

    <script>
        function myfunc(param) {
            // Here some specific JSF Ajax script which assigns "param"
            // to a managed bean property #{MyBean.myfield}
        }
    </script>
    

    You do not need to define it yourself. You only need to invoke it yourself from some JavaScript code elsewhere. For example,

    <span onclick="myfunc(4)">click here to set 4 in MyBean.myfield</span>
    

    or

    <script>
        function someOtherFunction() {
            var param = 4;
            myfunc(param);
        }
    </script>
    

    which is in turn to be used like

    <span onclick="someOtherFunction()">click here to call someOtherFunction() which will in turn set 4 in MyBean.myfield</span>
    

    See also: