我有一个p:gmap组件。它从bean中获取 zoom
属性,并在 pointSelect
通常的用户互动是这样的:
我唯一的问题是,在地图刷新后,地图会缩小,因为缩放属性没有得到更新
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
值。我无法找到处理变焦缩放的方法。
似乎bean
和p:gmap
组件之间存在单向通信!
我的问题是:有没有办法检测缩放变化并获得更新值?让p:gmap
更新bean zoom
属性
答案 0 :(得分:3)
p:gmap事件API有四个事件(用户指南4.0 ed.2.2 p.214):
所以你可以用
获得缩放级别<p:ajax event="stateChange" listener="#{mapBean.onStateChange}"/>
public void onStateChange(StateChangeEvent event) {
zoom = event.getZoomLevel();
}