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

BackingBean

private String       lat,lon;
//getters and setters

元素 'lat' 正在正确设置其值,但更改似乎没有到达支持 bean。

但是 updateChart 正在工作。我没有把它贴在这里,但如果我有的话,我会把它贴在豆子上:

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 包括h:formID(前置)。您可以通过更改h:form属性来解决此问题prependId="false"

警告 :

禁用表单上的前置将阻止在每个表单内使用相同 ID 的能力。

另一种方法是在链接中添加一些类:

<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 回答