Javascript 位置更新时,谷歌地图标记消失

Javascript 位置更新时,谷歌地图标记消失,javascript,primefaces,Javascript,Primefaces,我想用javascript更新google地图标记 这是我的密码: Index.xhtml <h:form id="mapForm"> <p:gmap id="map" center="1.30, 103.80" fitBounds="true" zoom="11" type="ROADMAP" style="width:100%;height:100%" model="#{indexBean.mapModel}" mapTypeCont

我想用javascript更新google地图标记

这是我的密码:

Index.xhtml

<h:form id="mapForm">
                    <p:gmap id="map" center="1.30, 103.80" fitBounds="true" zoom="11" type="ROADMAP" style="width:100%;height:100%" model="#{indexBean.mapModel}" mapTypeControl="false" widgetVar="mapWidget">
                    </p:gmap>
                    <script type="text/javascript">
                        //<![CDATA[
                        function handleComplete(xhr, status, args) {
                            var gmap = mapWidget.getMap();
                            for (var i in gmap.markers)
                            {
                                var newMarker = eval("args.marker" + i);
                                var oldMarker = gmap.markers[i];
                                oldMarker.icon = newMarker.icon;
                                oldMarker.title = newMarker.title;
                                oldMarker.position = newMarker.position;
                                oldMarker.setMap(gmap);
                            }
                        }
                        // ]]>
                    </script> 
</h:form>
<p:poll interval="3" listener="#{indexBean.updateMarkers}" oncomplete="handleComplete(xhr, status, args)"></p:poll>

//
IndexBean.java

public void updateMarkers()
{
    populateMapModelEntities();
    for (int i = 0; i < mapModel.getMarkers().size(); i++)
    {
        LatLng latLng = mapModel.getMarkers().get(i).getLatlng();
        double lat = latLng.getLat();
        lat+=.1;
        mapModel.getMarkers().get(i).setLatlng(new LatLng(lat, latLng.getLng()));

        RequestContext.getCurrentInstance().addCallbackParam("marker" + i, mapModel.getMarkers().get(i));
    }
}
public void updateMarkers()
{
populateMapModelEntities();
对于(int i=0;i

每当我不更新位置时,标记将保持可见。但是如果我在更新位置,标记就会消失。我需要你的帮助。

我不知道为什么,但是当javascript试图恢复时,lat long信息丢失了

这就是我所做的

在我的托管bean中,这是发送新数据的方法:

    public void ajaxPoll() {
    ILoadSrvc loadSrvc= new LoadSrvc();
    for(Marker marker:mapLoadModel.getMarkers()){
        Load load = loadSrvc.getLoadByRef(marker.getTitle());
        if(load != null){
            if(load.getLoadStatus().getLastLatitude()!=marker.getLatlng().getLat() ||
                    load.getLoadStatus().getLastLongitude()!= marker.getLatlng().getLng() ||
                    (load.getMaxAlert()!=null && load.getMaxAlert()=='H' && marker.getIcon().equals(Constants.POI_LOAD_OK)) ||
                    (load.getMaxAlert()==null && marker.getIcon().equals(Constants.POI_LOAD_ALERT))){
            marker.setLatlng(new LatLng(load.getLoadStatus().getLastLatitude(),load.getLoadStatus().getLastLongitude()));
            if(load.getMaxAlert()!=null && load.getMaxAlert()=='H'){
                marker.setIcon(Constants.POI_LOAD_ALERT);
            }else{
                marker.setIcon(Constants.POI_LOAD_OK);
            }
            logger.info("cambio coordenades de:"+marker.getTitle());
            }
        }
    }

      for (int i = 0; i < mapLoadModel.getMarkers().size(); i++){

          RequestContext.getCurrentInstance().addCallbackParam("marker" + i, mapLoadModel.getMarkers().get(i));

          RequestContext.getCurrentInstance().addCallbackParam("position" + i, mapLoadModel.getMarkers().get(i).getLatlng());
      }
      logger.info("refresco marcadores");
   }
public void ajaxPoll(){
ILOADRVC loadSrvc=新的loadSrvc();
对于(标记:mapLoadModel.getMarkers()){
Load=loadSrvc.getLoadByRef(marker.getTitle());
if(加载!=null){
如果(load.getLoadStatus().getLastLatitude()!=marker.getLatlng().getLat())||
load.getLoadStatus().getLastLongitude()!=marker.getLatlng().getLng()||
(load.getMaxAlert()!=null&&load.getMaxAlert()='H'&&marker.getIcon().equals(Constants.POI_load_OK))||
(load.getMaxAlert()==null和&marker.getIcon().equals(Constants.POI_load_ALERT))){
marker.setLatlng(新LatLng(load.getLoadStatus().getLastLattitude(),load.getLoadStatus().getLastLength());
if(load.getMaxAlert()!=null&&load.getMaxAlert()==H'){
marker.setIcon(常量.POI_LOAD_ALERT);
}否则{
marker.setIcon(常量.POI_LOAD_OK);
}
logger.info(“cambio coordenades de:+marker.getTitle());
}
}
}
对于(int i=0;i
这是XHTML的一部分

<ui:define name="scripts">
        <script src="https://maps.google.com/maps/api/js?sensor=false"
        type="text/javascript"></script>
        <script>
 //<![CDATA[
 function handleComplete(xhr, status, args){
var gmap = PF('gMapWV').getMap();
for(var i in gmap.markers)
{
  var newMarker = eval("args.marker"+i);
  var newPosition = eval("args.position"+i);
  var oldMarker = gmap.markers[i];
  oldMarker.setPosition(newPosition);
  oldMarker.icon=newMarker.icon;
  oldMarker.setMap(gmap);
 }   
 }
// ]]>
</script>
 </ui:define>

......

            <p:poll interval="#{manageLoadExecution.refreshInterval}" listener="#{manageLoadExecution.ajaxPoll}" oncomplete="handleComplete(xhr, status, args)" />
            <p:gmap widgetVar="gMapWV" id="gMapWV" center="#{manageLoadExecution.latitude} , #{manageLoadExecution.longitude}"  zoom="#{manageLoadExecution.zoomLevel}" fitBounds="false" type="ROADMAP"  style="width:900px;height:400px" model="#{manageLoadExecution.mapLoadModel}" >

//
......

您能添加描述吗?