gpt4 book ai didi

google-maps - 如何刷新 primefaces p :gmap after updating the gmap with new markers 中的 gmap 标记

转载 作者:行者123 更新时间:2023-12-01 14:23:30 30 4
gpt4 key购买 nike

我在使用 JSF2.0 的 Primefaces 3.5 的 Gmap 组件的项目上遇到问题。我有这个命令按钮,可以对标记进行过滤和最重要的更新 mapForm

<h:form id="epsFilterForm">
<p:commandButton action="#{mapMB.filterProjects}" value="#{bundle['filter'] }" update=":mapForm" />
</h:form>

map 形式:

<h:form id="mapForm">  
<p:gmap id="googleMap" center="48.849988,2.3805715" zoom="11" type="TERRAIN" fitBounds="false" model="#{mapMB.advancedModel}"
widgetVar="wmap" style="width:1000px;height:700px;display: inline-block;" >

<p:ajax event="overlaySelect" listener="#{mapMB.onMarkerSelect}" />
<p:gmapInfoWindow>
<p:outputPanel style="text-align:center;display:block;margin:auto:">
<p:panelGrid columns="2" styleClass="InfoTable" >

<p:outputLabel value="#{bundle['ep.operation.name'] }" />
<p:outputLabel value="#{mapMB.selectedEp.opName}" />
</p:panelGrid>
</p:outputPanel>
</p:gmapInfoWindow>
</p:gmap>

MapMB - 范围 - session 范围populateAdvancedModel()

public void populateAdvancedModel(List<EP> eps) {
advancedModel = new DefaultMapModel();
int count = 0;
Marker marker;
for (EP ep :eps) {
//advancedModel.addOverlay(new Marker(coord1, "Konyaalti", "konyaalti.png", "http://maps.google.com/mapfiles/ms/micons/blue-dot.png"));
System.out.println("Integer.toString(ep.getId()):"+Integer.toString(ep.getId()));
marker = new Marker(new LatLng( Double.parseDouble(ep.getLatitude()) , Double.parseDouble(ep.getLongitude())));
marker.setTitle( Integer.toString(count));
advancedModel.addOverlay(marker);
count++;
}
}

过滤项目()

public String filterProjects() {
//FilterMB filterMB = (FilterMB) JSFUtil.getManagedObject("filterMB");
eps = EPDAO.filterEPs(client, architect, realizationType, state, selectedCert);
populateAdvancedModel(eps);
return null;
}

onMarkerSelect()

public void onMarkerSelect(OverlaySelectEvent event) {
Marker marker = (Marker) event.getOverlay();
String markerTitle = marker.getTitle();
selectedEp = eps.get(Integer.parseInt(markerTitle));
}

当我第一次加载页面时,一切正常。信息 (p:gmapInfoWindow) 窗口正在加载,EP 变量的信息就在那里。但是,当我单击 epsFilterForm 中的命令按钮(其中有一些我未在此处发布的输入字段)时, map 会更新并且已过滤的标记在那里,当我将鼠标悬停在它们上面时它们显然有标题,但 overlaySelect 事件不起作用以同样的方式。我认为当页面第一次加载时有一些初始脚本将这种行为放在标记上但是当我刷新 map 时这个初始脚本不会再次运行这就是为什么当我点击标记和 overlaySelect 事件时被解雇 我在 onMarkerSelect() 方法中有空指针异常(标记为空)。 重要 - 这在本地服务器上没有问题,但是当我将它部署到谷歌应用引擎时,它按照我上面描述的那样工作。

最佳答案

gmap 的 DefaultMapModel(引用自 p:gmap 元素中的“model”属性)没有适当的功能可以清除,这与其他模型对象不同,例如p:schedule 的 EventModel。

如果您从 SessionScoped Controller 提供该对象,即使您从头开始重新创建该对象,p:gmap 出于某种原因仍会保留对提供的第一个 mapModel 的引用。实际上,这意味着除了第一个之外,所有新的/更新的 mapmodel 对象都没有被使用。

因此,要更新(添加/删除标记、叠加层等)的 gmap 的一个棘手点是应该从 RequestScoped 对象中检索 mapmodel 对象。

现在,另一种选择是遍历所有标记。你可以找到类似的帖子here .通过这种方式,您可以将支持 bean 保留为 SessionScoped,但同样,您不应该创建新的 mapModel。

编辑:我的印象是 View 无法更新标记,而不是 mapModel 本身。不管怎样,解决方法都是一样的。只是有时您无法删除要请求的 bean Scope(例如,在 overlaySelect 上获取信息窗口),所以您最终会刷新标记

关于google-maps - 如何刷新 primefaces p :gmap after updating the gmap with new markers 中的 gmap 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17853896/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com