0

我在 Glassfish v3 应用服务器上的 JSF 2.0、Facelets、Mojarra 2.0.2 和 Primefaces 2.1 的 JavaEE 6 应用程序中使用 GMaps4JSF 1.1.3-u3。在一个 xhtml 页面上,我想显示一些标记和一个可移动的标记(当前选择的“站”)。它的经度和纬度位置在valueChangeListener的帮助下存储在一些变量中。当我使用confirmButton时,位置被保存到一个站对象。然后重新加载所有站点并更新表格。当我选择车站时,它的新位置会显示在地图上 - 一切正常。如果我移动标记并按下取消按钮,然后在表中选择相同的站点,则显示此移动的位置,尽管取消操作恢复旧位置(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/gmapDraggableMarkers.jsf

于 2010-08-18T12:41:29.793 回答
0

(#{XBean.cancelOperation}[1]) 背后的代码是什么?
很高兴向我们发送有关该问题的示例战争,以便我们为您提供帮助[2]。
[1] 我希望在重置操作中设置默认标记位置。
[2] http://groups.google.com/group/gmaps4jsf-dev

于 2010-08-18T20:46:00.437 回答
0

我添加了您的案例示例:http: //www.mashups4jsf.com/gmaps4jsf-test/pages/markersServerSideEvents2.jsf

希望它有帮助!

于 2010-08-18T21:34:53.063 回答
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 回答