【发布时间】:2011-08-15 23:54:58
【问题描述】:
我使用来自primefaces 的谷歌地图工具。 我希望我的用户能够在地图上只放置一个标记。 坐标值应存储在托管 bean 变量中。
我该怎么做? 看看我到目前为止做了什么:
我创建了地图:
<f:view contentType="text/html">
<p:gmap id="gmap" center="36.890257,30.707417" zoom="13" type="HYBRID"
style="width:600px;height:400px"
model="#{mapBean.emptyModel}"
onPointClick="handlePointClick(event);"
widgetVar="map" /> </f:view>
<p:dialog widgetVar="dlg" effect="FADE" effectDuration="0.5" close="false" fixedCenter="true">
<h:form prependId="false">
<h:panelGrid columns="2">
<h:outputLabel for="title" value="Title:" />
<p:inputText id="title" value="#{mapBean.title}" />
<f:facet name="footer">
<p:commandButton value="Add"
actionListener="#{mapBean.addMarker}"
update="messages"
oncomplete="markerAddComplete()"/>
<p:commandButton value="Cancel" onclick="return cancel()"/>
</f:facet>
</h:panelGrid>
<h:inputHidden id="lat" value="#{newOfferSupportController.mapLocationX}" />
<h:inputHidden id="lng" value="#{newOfferSupportController.mapLocationY}" />
</h:form>
</p:dialog>
<script type="text/javascript">
var currentMarker = null;
function handlePointClick(event) {
if(currentMarker == null) {
document.getElementById('lat').value = event.latLng.lat();
document.getElementById('lng').value = event.latLng.lng();
currentMarker = new google.maps.Marker({
position:new google.maps.LatLng(event.latLng.lat(), event.latLng.lng())
});
map.addOverlay(currentMarker);
dlg.show();
}
}
function markerAddComplete() {
var title = document.getElementById('title');
currentMarker.setTitle(title.value);
title.value = "";
currentMarker = null;
dlg.hide();
}
function cancel() {
dlg.hide();
currentMarker.setMap(null);
currentMarker = null;
return false;
}
</script>
我还增加了保存坐标的变量:
@ManagedBean
@RequestScoped
public class NewOfferSupportController {
private float mapLocationX;
private float mapLocationY;
//Get & set methods
这一切都在 primefaces page 中工作,但我有 2 个问题:
问题一:marker一旦放置,就不能再放置了。
问题 2:在地图所在的同一表单中,还有一些其他元素,例如文本字段。我注意到当我单击位于地图所在表单中的提交按钮时不会发生验证,实际上表单根本没有被提交(这在我添加地图之前没有发生),为什么地图会中断验证?
【问题讨论】:
-
你见过this 吗?
-
我确实看到了。我部分实现了它,但是当我点击地图上的某个地方时我没有看到添加菜单。我做错了什么?
-
能否请您在 FireFox 中加载页面并检查其错误控制台,我认为 javascript 可能存在问题
-
上面写着:
Uncaught TypeError: Cannot set property 'value' of null错误在第151行,即(右键查看源码):document.getElementById('lat').value = event.latLng.lat(); -
好像
document.getElementById('lat')返回null,你能在HTML源码中看到,有没有这个id的元素?
标签: java google-maps jsf-2 primefaces