【问题标题】:Displaying marker data in primefaces gmap在 primefaces gmap 中显示标记数据
【发布时间】:2015-09-22 15:37:34
【问题描述】:

我正在使用 primefaces 来管理 gmap。 我使用用户传递的一些参数在地图上显示查询结果的一些标记。

我想在用户单击标记时显示更多信息,但我没有成功显示 marker.data。

map.xhtml:

<p:gmap center="53.483959, -2.244644" zoom="7" type="HYBRID" style="width:100%;height:800px" model="#{poc_InputManager.mymap}" >                    
                <p:ajax event="overlaySelect" listener="#{poc_InputManager.onMarkerSelect}" />
                <p:gmapInfoWindow id="infoWindow">
                <p:outputPanel style="text-align: center; display: block; margin: auto">      
                <h:outputText value="#{poc_InputManager.marker.data}" />

                </p:outputPanel>
                </p:gmapInfoWindow>
</p:gmap>

java代码:

public MapModel getMymap() throws Exception {
    mymap=new DefaultMapModel();
    ArrayList<POC_LocationsPostalCode> ad = lpcdao.getCodesFiltered(selectedsta);

    for (int  i = 0 ;i<ad.size();i++){          
         LatLng tmpcoord = new LatLng(ad.get(i).getLat(),ad.get(i).getLng());
         Marker m = new Marker(tmpcoord, ad.get(i).getLocationcode());
         m.setData("TEST");
         mymap.addOverlay(m);
    }
    return mymap;
}

在此示例中,当用户单击标记时,它应显示“TEST”。 最终目标是使用标记的标题显示查询检索到的一些信息。

【问题讨论】:

    标签: google-maps jsf primefaces


    【解决方案1】:

    你应该尝试这样的事情:

    <p:gmap ... >
      <p:ajax event="overlaySelect" listener="#{locationManager.onMarkerSelect}" />
      <p:gmapInfoWindow id="infoWindow" >
        <p:outputPanel style="text-align: left; display: block; margin: auto">
          <p:outputLabel value="${locationManager.myMarker}" />
        </p:outputPanel>                                            
      </p:gmapInfoWindow>
    
    </p:gmap>
    
    @ViewScoped
    @Managedbean
    public class LocationManager {
      private String myMarker; //Your object
      //Getter and Setters...
    
      //your listener
      public void onMarkerSelect(OverlaySelectEvent event) {
        marker = (Marker) event.getOverlay();
        myMarker = (String) marker.getData();
      }
    }
    

    【讨论】:

    • 为什么?代码中产生差异的部分是什么?非常感谢一些解释
    • poc_InputManager.marker.data 是一个对象而不是字符串,因此最后您将对象的 .toString() 作为您的值。在我的示例中,“myMarker”可能是一些复杂的对象,例如 public class Place { String name;字符串描述:// ... }
    • 如果您将String 作为数据放入,您将获得字符串。如果你不这样做,并把一个对象放在那里,你总是可以像#{locationManager.marker.data.field1}一样访问对象的字段,所以不需要将它创建到一个字符串服务器端......这里缺少的是(afaics)一个'infoWindow'的ajax调用中的'update',还是不需要?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多