1

この質問は以前に尋ねられたと思いますが、私はまだそれを行う方法を理解していません。私の目的は、GoogleMaps のポイントをクリックし、クリックしたポイントの座標をバッキング Bean に保存することです。私のコードは次のとおりです。

JSF

<h:inputHidden id="lat"         value="#{ChartsBean.lat}" />
<p:commandLink id="updateChart" update="chart" actionListener="#{ChartsBean.lineChart}"/>
<p:lineChart   id="chart"       value="#{ChartsBean.lineChart}" />

JS

google.maps.event.addListener(map, "click", function(event) {
    var lat = event.latLng.lat();
    var lng = event.latLng.lng();
    document.getElementById('lat').value = '99': //just for testing
    $("#updateChart").click();
});

バッキングビーン

private String       lat,lon;
//getters and setters

要素「lat」の値は正しく設定されていますが、変更がバッキング Bean に届いていないようです。

しかし、updateChart は機能しています。私はそれをここに投稿しませんでしたが、私が持っている場合はBeanに投稿しました:

EDIT1: 別のことですが、バッキング Bean で X と Y を次のように設定した場合:

x = (int)(20*Math.random());
y = (int)(20*Math.random());

それ以外の:

x = findX(Double.parseDouble(lat));
y = findY(Double.parseDouble(lon));

マップ上の任意の場所をクリックすると、チャートが更新されますが、明らかにランダムなポイントです。

4

1 に答える 1

1

基本的にあなたの問題は$("#updateChart")、実際のボタンIDにIDが含まれているため機能しないことですh:form(プリペンド)。h:form属性を変更することで修正できますprependId="false"

警告 :

フォームの prepend を無効にすると、各フォーム内で同じ ID を使用できなくなります。

もう 1 つの方法は、リンクにクラスを追加することです。

<p:commandLink id="updateChart" class="some-unique-class" update="chart" actionListener="#{ChartsBean.lineChart}"/>

そしてセレクターを変更します:

$("a.some-unique-class").click();

私が忘れていた最後の解決策は、 jQuery を使用するときに私が考える最善の解決策です。

$(PrimeFaces.escapeClientId('#{p:component('updateChart')}')).click();

より詳しい情報 :

また読む:

于 2013-06-10T07:16:56.463 に答える