How to pass JavaScript variables as parameters to JSF action method? How to pass JavaScript variables as parameters to JSF action method? javascript javascript

How to pass JavaScript variables as parameters to JSF action method?


Let JS set them as hidden input values in the same form.

<h:form id="formId">    <h:inputHidden id="x" value="#{bean.x}" />    <h:inputHidden id="y" value="#{bean.y}" />    <h:commandButton value="submit" onclick="getVars()" action="#{bean.submit}" /></h:form>
function getVars() {    // ...    var x = locationInfo.lng;     var y = locationInfo.lat;    document.getElementById("formId:x").value = x;    document.getElementById("formId:y").value = y;}

The command button action method could just access them as bean properties the usual way.

private int x;private int y;public void submit() {    System.out.println("x: " + x);    System.out.println("y: " + y);    // ...}// Getters+setters.

An alternative is to use OmniFaces <o:commandScript> or PrimeFaces <p:remoteCommand> instead of <h:commandButton>. See also a.o. How to invoke a JSF managed bean on a HTML DOM event using native JavaScript?


If you use PrimeFaces, you can use a hidden input field linked to a managed bean, and you can initialize its value using javascript, for PrimeFaces, the PF function can be used to access a widget variable linked to the hidden input, in this way:

<script type="text/javascript">function getVars() {    // ...    var x = locationInfo.lng;     var y = locationInfo.lat;    PF('wvx').jq.val( lat1 );    PF('wvy').jq.val( lng1 );}</script><p:inputText type="hidden" widgetVar="wvx" value="#{bean.x}" /><p:inputText type="hidden" widgetVar="wvy" value="#{bean.y}" />


<h:form id="formId"><h:inputHidden id="x" value="#{bean.x}" /><h:inputHidden id="y" value="#{bean.y}" /><h:commandButton value="submit" onclick="getVars()" action="#{bean.submit}" />

 <script>        function getVars() {            var x;             var yt;            x=#{bean.x};            y=#{bean.y};        }    </script>