我在使用 JSF2.0 的 Primefaces 3.5 的 Gmap 组件的项目上遇到问题。我有这个命令按钮,可以过滤标记和最重要的更新 mapForm
<h:form id="epsFilterForm">
<p:commandButton action="#{mapMB.filterProjects}" value="#{bundle['filter'] }" update=":mapForm" />
</h:form>
地图形式:
<h:form id="mapForm">
<p:gmap id="googleMap" center="48.849988,2.3805715" zoom="11" type="TERRAIN" fitBounds="false" model="#{mapMB.advancedModel}"
widgetVar="wmap" style="width:1000px;height:700px;display: inline-block;" >
<p:ajax event="overlaySelect" listener="#{mapMB.onMarkerSelect}" />
<p:gmapInfoWindow>
<p:outputPanel style="text-align:center;display:block;margin:auto:">
<p:panelGrid columns="2" styleClass="InfoTable" >
<p:outputLabel value="#{bundle['ep.operation.name'] }" />
<p:outputLabel value="#{mapMB.selectedEp.opName}" />
</p:panelGrid>
</p:outputPanel>
</p:gmapInfoWindow>
</p:gmap>
MapMB - 范围 - 会话范围 populateAdvancedModel()
public void populateAdvancedModel(List<EP> eps) {
advancedModel = new DefaultMapModel();
int count = 0;
Marker marker;
for (EP ep :eps) {
//advancedModel.addOverlay(new Marker(coord1, "Konyaalti", "konyaalti.png", "http://maps.google.com/mapfiles/ms/micons/blue-dot.png"));
System.out.println("Integer.toString(ep.getId()):"+Integer.toString(ep.getId()));
marker = new Marker(new LatLng( Double.parseDouble(ep.getLatitude()) , Double.parseDouble(ep.getLongitude())));
marker.setTitle( Integer.toString(count));
advancedModel.addOverlay(marker);
count++;
}
}
过滤器项目()
public String filterProjects() {
//FilterMB filterMB = (FilterMB) JSFUtil.getManagedObject("filterMB");
eps = EPDAO.filterEPs(client, architect, realizationType, state, selectedCert);
populateAdvancedModel(eps);
return null;
}
onMarkerSelect()
public void onMarkerSelect(OverlaySelectEvent event) {
Marker marker = (Marker) event.getOverlay();
String markerTitle = marker.getTitle();
selectedEp = eps.get(Integer.parseInt(markerTitle));
}
当我第一次加载页面时,一切正常。正在加载信息(p:gmapInfoWindow)窗口,并且 EP 变量的信息在那里。但是,当我单击 epsFilterForm 中的命令按钮(有一些我没有在此处发布的输入字段)时,地图会更新并且过滤的标记在那里,当我将鼠标悬停在它们上时它们显然有标题,但是 overlaySelect 事件不起作用以同样的方式。我的事情是,当页面第一次加载时,有一些初始脚本会将该行为放在标记上,但是当我刷新地图时,这个初始脚本不会再次运行,这就是为什么当我单击标记和 overlaySelect 事件时解雇我在 onMarkerSelect() 方法中有空指针异常(标记为空)。 重要的- 这在本地服务器上没有问题,但是当我将它部署到谷歌应用引擎时,它就像我上面描述的那样工作。