У меня проблема с проектом с компонентом Gmap в Primefaces 3.5 Я использую JSF2.0. У меня есть эта команда кнопки, которые фильтрацию маркеров и наиболее важных обновлений mapFormКак обновить маркеры gmap в сетях 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 - область - область Session 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++;
}
}
filterProjec ц()
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() (маркер равен null). ВАЖНО - это работает без проблем на локальном сервере, но когда я его развертываю в движке Google, он работает, как описано выше.
Да, это именно то, как я его решаю. Извините, что я не обновил его. Я просто забыл. Итак, bean: @ ManagedBean @ RequestScoped public class MapMB ... и после каждой фильтрации я снова заполняю модель методом populateAdvancedModel(). Благодарим за ответ. – makkasi
Добро пожаловать. Если вы считаете, что это правильное решение, вы должны принять ответ. – yannicuLar