首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有Primefaces GMap OverlaySelect事件的NullPointer

带有Primefaces GMap OverlaySelect事件的NullPointer
EN

Stack Overflow用户
提问于 2011-12-16 05:38:57
回答 5查看 3.2K关注 0票数 5

我对版本是3.0.M3的Primefaces有一个问题。我使用了Gmap和prime p:ajax.我想做的事情是当用户在gmap上点击一个标记时,获得点击的标记。

以下是代码

代码语言:javascript
运行
复制
<p:tabView effect="slide" effectDuration="normal" style="width:1050px;height:450px" >
            <p:tab title="blabla">
                <h:panelGrid colums="1">    
                </h:panelGrid>
            </p:tab>
            <p:tab title="blabla" >
                <h:panelGrid colums="1">
                    <h:form id="mapId">

                        <p:gmap  id="asd" center="39.000409,35.201554" 
                            zoom="#{mapBean.modelMap.zoomLevel}" 
                            type="ROADMAP" 
                            style="width:1000px;height:400px"
                            model="#{mapBean.emptyModel}"
                            widgetVar="map" >

                            <p:ajax event="overlaySelect" listener="#{mapBean.onMarkerSelect}"/>

                        </p:gmap>

                    </h:form>   
                </h:panelGrid>
            </p:tab></p:tabView>

还有我的ManagedBean

代码语言:javascript
运行
复制
public void onMarkerSelect(OverlaySelectEvent event) {  

    Marker marker = (Marker) event.getOverlay();
    if (marker!=null) {
        System.out.println(marker.getId());
    }
    System.out.println("Clicked");
    modelMap.setZoomLevel(modelMap.getZoomLevel()+1);

}

托管Bean声明

代码语言:javascript
运行
复制
@ManagedBean(name="mapBean")
@RequestScoped
public class MapBean implements Serializable 

我正在使用onMarkerSelect方法中的NullPointerException。(event.getOverlay();)

EN

回答 5

Stack Overflow用户

发布于 2012-06-06 17:01:26

解决了我的问题。

问题是,在创建MapModel时,它是一个本地变量:

代码语言:javascript
运行
复制
public MapModel getModel() {

    final MapModel mapModel = new DefaultMapModel(); // this should be a field

    final Set<MapEventDto> events = service.loadEvents();
    for (MapEventDto event : events) {

        final double latitude = event.getLatitude().doubleValue();
        final double longitude = event.getLongitude().doubleValue();
        final String magnitude = event.getMagnitude().toString();

        final String title = "Id: " + event.getId() + ", Lat: " + latitude + ", Lng: " + longitude + ", Mag: " + magnitude;

        mapModel.addOverlay(new Marker(new LatLng(latitude, longitude), title));

    }
    return mapModel;
}

在渲染地图之后,整个mapModel可能会被垃圾回收(因为不再需要它)。因此,当overlay事件被调用时,将不再有mapModel

当我把mapModel设为Bean的一个字段时,这个问题就消失了。

票数 6
EN

Stack Overflow用户

发布于 2012-12-10 16:48:42

使用static字段,如下所示。这对我很管用。

代码语言:javascript
运行
复制
final static MapModel mapModel = new DefaultMapModel();
票数 3
EN

Stack Overflow用户

发布于 2013-08-08 05:54:12

代码语言:javascript
运行
复制
final DefaultMapModel mapModel = new DefaultMapModel();

曾在viewScoped best主播担任全局变量

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8526984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档