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

Google maps Primefaces GMap,如何在pointSelect事件后更新缩放,google-maps,jsf,primefaces,Google Maps,Jsf,Primefaces,我有一个p:gmap组件。它从bean中获取缩放属性,并在点选择上添加一个标记 通常的用户交互如下所示: 用户放大以找到所需的位置 用户点击地图 在单击的点上使用标记重新加载贴图 我唯一的问题是,在地图刷新之后,地图被缩小,因为缩放属性没有得到更新 p:gmap代码看起来像这样 <p:gmap binding="#{mapBean.gmap}" zoom="#{mapBean.zoom}" model="#{mapBean.poiMapModel}" wid

我有一个p:gmap组件。它从bean中获取缩放属性,并在点选择上添加一个标记

通常的用户交互如下所示:

  • 用户放大以找到所需的位置
  • 用户点击地图
  • 在单击的点上使用标记重新加载贴图
  • 我唯一的问题是,在地图刷新之后,地图被缩小,因为缩放属性没有得到更新

    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.setZoom()永远不会被调用

    如您所见,我甚至尝试将组件绑定回bean,以便获得p:gmap的当前缩放值。但PointSelect事件似乎总是重置
    zoom
    值。我找不到任何方法来处理更改的缩放

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


    我的问题是:有没有办法检测缩放变化并获得更新值?让
    p:gmap
    更新bean的
    zoom
    属性p:gmap事件API有四个事件(用户指南4.0版2.2 p.214):

  • markerDrag:获取拖动的标记实例
  • overlaySelect:获取选定的覆盖实例
  • pointSelect:获取选定点的坐标
  • 状态更改:获取地图的边界/地图的缩放级别
  • 因此,您可以使用

    <p:ajax event="stateChange" listener="#{mapBean.onStateChange}"/>
    
    public void onStateChange(StateChangeEvent event) {  
       zoom = event.getZoomLevel();
    }
    
    
    stateChange上的公共无效(StateChangeEvent事件){
    zoom=event.getZoomLevel();
    }
    我知道状态改变,但我从不认为缩放更新是状态改变。谢谢你指出这一点。肯定比搞乱javascript要干净得多
    
    <p:ajax event="stateChange" listener="#{mapBean.onStateChange}"/>
    
    public void onStateChange(StateChangeEvent event) {  
       zoom = event.getZoomLevel();
    }