可移动标记位置 - 刷新标记位置(GMaps4JSF 1.1.3-u3)

时间:2010-08-18 12:33:02

标签: java google-maps facelets primefaces

我在Glassfish 6应用程序中使用GMaps4JSF 1.1.3-u3,在Glassfish v3应用服务器上使用JSF 2.0,Facelets,Mojarra 2.0.2和Primefaces 2.1。在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 个答案:

答案 0 :(得分:1)

也许你可以使用PrimeFaces的可拖动标记;

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

答案 1 :(得分:0)

背后的代码是什么(#{XBean.cancelOperation} [1])? 向我们发送一个问题的样本战,这将是很好的,所以我们可以帮助你[2] [1]我希望在重置动作中设置默认标记位置 [2] http://groups.google.com/group/gmaps4jsf-dev

答案 2 :(得分:0)

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

希望它有所帮助!

答案 3 :(得分: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监听器中调用此方法。