Primefaces GMap,如何在pointSelect事件后更新缩放

时间:2014-07-22 08:31:18

标签: google-maps jsf primefaces

我有一个p:gmap组件。它从bean中获取 zoom 属性,并在 pointSelect

上添加标记

通常的用户互动是这样的:

  1. 用户放大,找到所需的位置
  2. 用户点击地图
  3. 使用标记右侧的地图重新加载地图
  4. 我唯一的问题是,在地图刷新后,地图会缩小,因为缩放属性没有得到更新

    p:gmap代码看起来像这样

    <p:gmap
        binding="#{mapBean.gmap}"
        zoom="#{mapBean.zoom}"
        model="#{mapBean.poiMapModel}"
        widgetVar="poiMap"
        id="poiMapComponent"        
        >
        <p:ajax event="pointSelect" 
            listener="#{mapBean.onPointSelect}"  
            update=":#{p:component('poiMapComponent')}"
        />  
    </p:gmap>
    

    MapBean的相关代码是:

    public void onPointSelect(PointSelectEvent event) {  
    
            LatLng latlng = event.getLatLng();  
    
    
            int _zoom = this.getGmap().getZoom(); //This never gets changed
            System.out.println("NEW ZOOM = " + _zoom);
    
            //Creating a new Marker in the clicked area
            selectedMarker = new Marker(latlng, "");
            poiMapModel.addOverlay(selectedMarker);
        }
    
    
        public org.primefaces.component.gmap.GMap getGmap() {
            return gmap;
        }
        public void setGmap(org.primefaces.component.gmap.GMap gmap) {
            this.gmap = gmap;
        }
    

    经过一些测试后,我确信MapBean.setZoom()永远不会被调用。

    正如您所看到的,我甚至尝试将组件绑定回bean,因此我可以获得p:gmap的当前缩放值。但似乎PointSelect事件总是重置zoom值。我无法找到处理变焦缩放的方法。

    似乎beanp:gmap组件之间存在单向通信

    我的问题是:有没有办法检测缩放变化并获得更新值?让p:gmap更新bean zoom属性

1 个答案:

答案 0 :(得分:3)

p:gmap事件API有四个事件(用户指南4.0 ed.2.2 p.214):

  1. markerDrag:获取拖动标记实例
  2. overlaySelect:获取选定的叠加层实例
  3. pointSelect:获取所选点的坐标
  4. stateChange:获取地图的地图/缩放级别的边界
  5. 所以你可以用

    获得缩放级别
    <p:ajax event="stateChange" listener="#{mapBean.onStateChange}"/>
    
    public void onStateChange(StateChangeEvent event) {  
       zoom = event.getZoomLevel();
    }