我對使用Primefaces 3.5的Gmap組件的項目有問題我使用的是JSF2.0。 我有做的標記和最重要的更新過濾此命令按鈕mapForm如何使用新標記更新gmap後在primefaces p:gmap中刷新gmap標記
<h:form id="epsFilterForm">
<p:commandButton action="#{mapMB.filterProjects}" value="#{bundle['filter'] }" update=":mapForm" />
</h:form>
mapForm:
<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++;
}
}
filterProjects()
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()方法中有空指針異常(標記爲空)。 重要 - 這是工作沒有在本地服務器上的問題,但是當我部署到谷歌應用程序引擎它的工作正如我上面所述。
是的,這正是我解決它的方式。對不起,我沒有更新它。我只是忘了。所以豆: @ ManagedBean @ RequestScoped 公共類MapMB ... 和每次過濾後,我再次使用populateAdvancedModel()方法填充模型。謝謝你的回答 – makkasi
不客氣。如果你認爲這是正確的解決方案,你應該接受答案。 – yannicuLar