Подвижная позиция маркера - обновить позицию маркера (GMaps4JSF 1.1.3-u3) - PullRequest
0 голосов
/ 18 августа 2010

Я использую 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>

Ответы [ 4 ]

1 голос
/ 18 августа 2010

Может быть, вы можете использовать перетаскиваемые маркеры PrimeFaces;

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

0 голосов
/ 19 августа 2010

У меня была такая же проблема.Я исправил это с помощью следующего кода:

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);
}

Я вызываю этот метод в listenButton listener.

0 голосов
/ 19 августа 2010

Я добавил пример вашего случая: http://www.mashups4jsf.com/gmaps4jsf-test/pages/markersServerSideEvents2.jsf

Жаль, что это помогает!

0 голосов
/ 19 августа 2010

Что такое код (# {XBean.cancelOperation} [1])?
Будет приятно прислать нам пример войны с этой проблемой, чтобы мы могли помочь вам [2].
[1] Я ожидаю установить позиции маркера по умолчанию в действии сброса.
[2] http://groups.google.com/group/gmaps4jsf-dev

...