【问题标题】:Pass value from JavaScript to BackingBean将值从 JavaScript 传递到 BackingBean
【发布时间】:2013-06-09 23:09:20
【问题描述】:

我想这个问题以前有人问过,但我仍然不明白该怎么做。我的目标是单击 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));

当我点击地图上的任意位置时,图表会重新刷新,显然是随机点。

【问题讨论】:

  • the changes don't seem to reach the backing beanThe element 'lat' is getting its value correctly setted 是什么意思?
  • 我的 backing bean 上的变量 lat 的值始终为 null,虽然 JS 上的变量 lat 的值确实是正确的(本例中为 99)

标签: javascript jsf primefaces


【解决方案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();

更多信息:

另请阅读:

【讨论】:

  • 但是 updateChart 工作正常。我在主帖中添加了更多信息。
  • @te-x 但是当你点击地图时,bean没有更新对吧?
  • 没错。 JS 上的变量工作正常,我可以从 backing bean 请求一个新图表。我只是无法告诉它要绘制哪个图表。
  • $("#updateChart").click(); 将永远无法工作,这就是为什么您的支持 bean 没有得到任何东西。另外我怀疑您的隐藏输入是否获得值 99,您可以在 firebug 中进行测试吗?
  • 如果我做类似 var test = document.getElementById('lat').value;值是正确的。如果图表正在刷新,为什么 $(#updateChart").click() 不能工作?
猜你喜欢
  • 1970-01-01
  • 2019-11-24
  • 2016-06-04
  • 2015-09-19
  • 2023-03-09
  • 2013-10-26
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
相关资源
最近更新 更多