2015-02-18 17 views
12

Przygotowuję kilka zmiennych w JavaScript (w moim konkretnym przypadku, chciałbym dostać lokalizację GPS):Jak przekazać zmienne JavaScript jako parametry do metody akcji JSF?

function getVars() { 
    // ... 
    var x = locationInfo.lng; 
    var y = locationInfo.lat; 
} 

Chciałbym wysłać je do zarządzanej fasoli za pomocą przycisku polecenia poniżej:

<h:commandButton value="submit" onclick="getVars()" action="#{bean.submit(x,y)}" /> 
public void submit(int x, int y) { 
    // ... 
} 

Jak mogę wysłać x i y zmienne z JavaScript do JSF udało metody działania fasoli?

+1

Czy chcesz przekazać współrzędne globalnego systemu pozycjonowania (GPS), wartości długości i szerokości geograficznej z JavaScriptu do odpowiedniego komponentu bean? [Zobacz] (http://balusc.blogspot.in/2009/05/javajspjsf-and-javascript.html#PassVariablesFromClientSideToServerSide). – Tiny

+0

@ Thiny Thx na przykład ur. to fajny artykuł. Ale mam pytanie to URL, czy URL jest równy ścieżce XHTML? – Bubble

+0

Całkowicie przegapiłem komentarz. – Tiny

Odpowiedz

19

Pozwól JS ustawić je jako ukryte wartości wejściowe w tej samej formie.

<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; 
} 

Komenda sposób działania przycisku może po prostu do nich dostęp jako właściwości fasoli w zwykły sposób.

private int x; 
private int y; 

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

// Getters+setters. 

Alternatywą jest użycie OmniFaces<o:commandScript> lub PrimeFaces<p:remoteCommand> zamiast <h:commandButton>. Zobacz także a.o. How to invoke a JSF managed bean on a HTML DOM event using native JavaScript?

+0

Co jeśli chcesz wywołać metodę bean backing z samego JS jako # {bean.foo()}? Czy możesz umieścić var ​​JS w nawiasie? –

+1

Patrz ostatni akapit. – BalusC