我在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>
答案 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监听器中调用此方法。