2014-07-22 35 views
1

我有一个p:gmap组件。它从一个bean zoom属性,并增加了pointSelectPrimefaces GMap,如何在pointSelect事件后更新缩放事件

标记通常的用户交互是这样的:

  1. 用户放大,以找出他所期望的位置
  2. 用户点击地图
  3. 地图重新加载与她点击点标记权

我唯一的问题是,地图刷新后,地图被缩小,因为缩放属性不会得到更新

号码: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

回答

3

的号码:GMAP事件API有四个事件(用户指南4.0 ed.2.2第214页):

  1. markerDrag:获取拖累标记例如
  2. overlaySelect:获得所选的覆盖情况下
  3. 指向 - 选择:选择获取点的坐标
  4. stateChange:获取地图的地图/缩放级别的界限

所以,你可以得到

<p:ajax event="stateChange" listener="#{mapBean.onStateChange}"/> 

public void onStateChange(StateChangeEvent event) { 
    zoom = event.getZoomLevel(); 
} 
+0

缩放级别我知道* stateChange *,但我从来不考虑变焦更新的状态变化。感谢Thanx指出。绝对比用javascript搞乱更清洁 – yannicuLar

相关问题