Поверхности GMap, Как обновить масштабирование после пунктаВыберите Событие

У меня есть ap: gmap. Он получает атрибут zoom от bean-компонента и добавляет маркер в pointSelect

Обычное взаимодействие с пользователем:

  1. Пользователь масштабируется, чтобы найти нужное местоположение
  2. Пользователь нажимает на карту
  3. Карта перезагружается маркером прямо на том месте, где она нажала

Моя единственная проблема заключается в том, что после обновления карты карта уменьшается, поскольку атрибут масштабирования не обновляется

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:ajax></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() никогда не будет вызван.

Как вы можете видеть, я даже попытался привязать компонент к компоненту, поэтому я могу получить текущее значение масштабирования p: gmap. Но кажется, что событие PointSelect всегда сбрасывает значение zoom. Я не могу найти способ обработать измененный масштаб вообще.

Кажется, есть односторонняя связь между bean и bean p:gmap !

Мой вопрос: есть ли способ обнаружить изменения масштаба и получить обновленное значение? Попросите p:gmap обновить атрибут zoom компонента.

1 ответ

API-интерфейс p: gmap имеет четыре события (руководство пользователя 4.0 ed.2.2 с.214):

  1. markerDrag: Получить перетаскиваемый экземпляр маркера
  2. overlaySelect: Получить выбранный экземпляр наложения
  3. pointSelect: Получить координаты выбранной точки
  4. stateChange: получить границы карты/уровня масштабирования карты

Таким образом, вы можете получить уровень масштабирования с помощью

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

public void onStateChange(StateChangeEvent event) { 
 zoom = event.getZoomLevel();
}
</p:ajax>

licensed under cc by-sa 3.0 with attribution.