Я использую GMaps4JSF 1.1.3-u3 в приложении JavaEE 6 с JSF 2.0, Facelets, Mojarra 2.0.2 и Primefaces 2.1 на сервере приложений Glassfish v3. На странице xhtml я хочу показать несколько маркеров и подвижный маркер (текущая выбранная «станция»). Его долгота и широта сохраняются в некоторых переменных с помощью valueChangeListener. Когда я использую confirmButton, позиция сохраняется в объекте станции. Затем все станции перезагружаются и форма обновляется. Когда выбираю станцию, на карте отображается ее новое положение - все работает. Если я перемещаю маркер и нажимаю кнопку 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>