web-dev-qa-db-ja.com

JavaScript変数をパラメーターとしてJSFアクションメソッドに渡す方法は?

JavaScriptでいくつかの変数を準備しています(私の特定のケースでは、GPS位置情報を取得したい):

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

以下のコマンドボタンを使用して、マネージドBeanにそれらを送信します。

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

JavaScriptからJSFマネージドBeanアクションメソッドにxおよびy変数を送信するにはどうすればよいですか?

16
Bubble

JSに同じフォームの非表示の入力値として設定させます。

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

コマンドボタンアクションメソッドは、通常の方法でBeanプロパティとしてそれらにアクセスできます。

private int x;
private int y;

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

// Getters+setters.

別の方法として、 OmniFaces<o:commandScript> または PrimeFaces<p:remoteCommand>の代わりに<h:commandButton> 。 a.oも参照してください。 ネイティブJavaScriptを使用してHTML DOMイベントでJSFマネージドBeanを呼び出す方法は?

27
BalusC

PrimeFacesを使用する場合、マネージドBeanにリンクされた非表示の入力フィールドを使用でき、JavaScriptを使用してその値を初期化できます。PrimeFacesの場合、[〜#〜] pf [〜 #〜]関数は、次の方法で、非表示の入力にリンクされたウィジェット変数にアクセスするために使用できます。

<script>
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}" />