将值从JavaScript传递给Backing Bean

时间:2013-06-09 23:09:21

标签: javascript jsf primefaces

我认为之前已经提出过这个问题,但我仍然不明白该怎么做。我的目标是点击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));

当我点击地图上的任意位置时,图表会被刷新,显示为随机点。

1 个答案:

答案 0 :(得分:1)

基本上你的问题是$("#updateChart")不会工作,因为真正的按钮ID包括h:form ID(前置)。您可以通过更改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();

更多信息:

另请阅读: