Glassfish v3アプリサーバーでJSF 2.0、Facelets、Mojarra 2.0.2、およびPrimefaces 2.1を使用するJavaEE 6アプリケーションでGMaps4JSF 1.1.3-u3を使用しています。xhtml ページで、いくつかのマーカーと移動可能なマーカー (現在選択されている「ステーション」) を表示したいと考えています。その経度と緯度の位置は、valueChangeListenerを使用していくつかの変数に格納されます。confirmButtonを使用すると、位置がステーション オブジェクトに保存されます。次に、すべてのステーションがリロードされ、フォームが更新されます。駅を選択すると、その新しい位置が地図上に表示されます - すべてが機能します。マーカーを移動してcancelButtonを押した後、テーブルで同じステーションを選択すると、この移動の位置が表示されますが、cancelOperation古い位置を復元します (stationLongitude および stationLatitude 変数)。これは、キャンセル関数の前に valueChangeListener が呼び出されるために必要です。いろいろ試してみましたがキャンセルできず、該当する局を再選択すると古いマーカー位置が表示されてしまいます。ajax cancelButtonでoncomplete="window.location.reload()"を使用した場合にのみ機能します! しかし、これは醜いページの更新につながります (最初に 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>