我在 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>