Я использую GMaps4JSF 1.1.3-u3 в приложении JavaEE 6 с JSF 2.0, Facelets, Mojarra 2.0.2 и Primefaces 2.1 на сервере приложений Glassfish v3. На странице HTML я хочу показать некоторые
Маркеры и подвижный маркер (текущая выбранная «станция»). Его значения долготы и широты сохраняются в некоторых переменных с помощью valueChangeListener . Когда я использую кнопку Подтверждение , положение сохраняется на объекте станции. Затем все станции перезагружаются и форма обновляется. Когда я выбираю станцию, ее новая позиция отображается на карте - все работает. Если я переместу маркер и нажму cancelButton , а затем выберу ту же станцию в таблице, позиция этого перемещения отобразится, хотя cancelOperation восстанавливает старое положение (переменные stationLongitude и stationLatitude ). Это необходимо, потому что valueChangeListener вызывается перед отменой функции. Я перепробовал много вещей, но я не могу выполнить отмену, чтобы после повторного выбора соответствующей станции отображалось старое положение маркера. Это работает, только когда я использую oncomplete = "window.location.reload ()" на ajax cancelButton ! Но это приводит к некрасивому обновлению страницы (сначала обновляется ajax, затем перезагружается вся страница). Я не уверен, что это проблема GoogleMaps, GMaps4JSF или Facelets или что-то еще. Может быть, есть хороший обходной путь, или я просто сделал что-то не так! Может быть, можно обновить позицию маркера или маркер имеет внутреннее состояние? Я заинтересован в любой подсказке! Заранее спасибо!
Фрагмент XHTML:
<h:form prependId="false" id="xTableForm">
<div class="xSection" >
<p:dataTable id="xTable" var="station" value="#{XBean.stations}"
selection="#{XBean.selectedStation}" selectionMode="single"
update="xTableForm pMessages">
...
</p:dataTable>
</div>
<h:panelGrid id="mapPanelGrid">
<m:map width="929px" height="500px"
longitude="#{XBean.stationLongitude}" latitude="#{XBean.stationLatitude}"
renderOnWindowLoad="false">
<ui:repeat ... >
... other markers
</ui:repeat>
<m:marker id="stationMarker" longitude="#{XBean.stationLongitude}"
latitude="#{XBean.stationLatitude}" jsVariable="sMarker" draggable="true"
submitOnValueChange="false" valueChangeListener="#{XBean.valueChangeListener}" >
<m:icon imageURL="http://www.google.com/mapfiles/marker_blackS.png"/>
</m:marker>
<m:mapControl name="GLargeMapControl" position="G_ANCHOR_BOTTOM_RIGHT"/>
<m:mapControl name="GMapTypeControl"/>
</m:map>
</h:panelGrid>
<div id="xMenu">
...
<p:commandLink id="confirmButton" value="confirm"
actionListener="#{XBean.confirm}" update="XTableForm pMessages" />
<p:commandLink id="cancelButton" value="Cancel"
actionListener="#{XBean.cancelOperation}" update="XTableForm pMessages" />
</div>
</h:form>