0

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>
4

4 に答える 4

1

おそらく、PrimeFaces のドラッグ可能なマーカーを使用できます。

http://www.primefaces.org/showcase/ui/gmapDruggableMarkers.jsf

于 2010-08-18T12:41:29.793 に答える
0

私はあなたのケースの例を追加しました:http: //www.mashups4jsf.com/gmaps4jsf-test/pages/markersServerSideEvents2.jsf

お役に立てば幸いです。

于 2010-08-18T21:34:53.063 に答える
0

コード ビハインド (#{XBean.cancelOperation}[1]) は何ですか?
私たちがあなたを助けることができるように、私たちに問題のあるサンプル戦争を送るのは素晴らしいことです[2]。
[1] リセット アクションでデフォルトのマーカー位置を設定する予定です。
[2] http://groups.google.com/group/gmaps4jsf-dev

于 2010-08-18T20:46:00.437 に答える
0

同じ問題がありました。次のコードで修正しました。

private void rebuildRootView()
{
    FacesContext context = FacesContext.getCurrentInstance();
    Application application = context.getApplication();
    ViewHandler viewHandler = application.getViewHandler();
    UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());
    context.setViewRoot(viewRoot);
}

このメソッドを cancelButton リスナーで呼び出します。

于 2010-08-19T12:42:20.897 に答える