2013-08-23 4 views
1

Когда я ищу место, карта обновляется. Но центрирующее значение не обновляется. Любая помощь будет отличной.primefaces gmap search center

/* The XHTML приводится ниже */

<h:outputLabel value="Search Location :" for="acSimple" /> 
<p:autoComplete id="acSimple" minQueryLength="0" value="#{sampleMapProducer.searchString}" forceSelection="true" completeMethod="#{sampleMapProducer.complete}"> 
    <p:ajax event="itemSelect" update="gmap_loc" process="#{sampleMapProducer.searchCenter}" /> 
    <p:ajax process="@this" update="gmap_loc" /> 
</p:autoComplete> 
<p:outputPanel id="gmapPanel" autoUpdate="true"> 
    <p:gmap center="#{sampleMapProducer.searchCenter}" zoom="6" type="ROADMAP" style="width:100%;height:600px" model="#{sampleMapProducer.mapBySearch}" id="gmap_loc"></p:gmap> 
</p:outputPanel> 

Bean код для карты:

private void clearMap (MapModel map) 
{ 
    for (Marker marker : map.getMarkers()) { 
     marker.setVisible(false); 
    } 
} 

/* Получить карту для поиска */

public MapModel getMapBySearch() 
{ 
    clearMap(mapBySearch); 
    for (Marker markerIterator : markersList) 
    { 
     if (searchString == null || searchString.trim().equals("")) 
     { 
      mapBySearch.addOverlay(markerForLocation(markerIterator,BLUE_DOT)); 
     } 
     else 
     { 
      if (markerIterator.getTitle().toLowerCase().contains(searchString.toLowerCase())) 
      { 
       mapBySearch.addOverlay(markerForLocation(markerIterator,BLUE_DOT)); 
      } 
     } 
    } 
    return mapBySearch; 
} 

/* Auto complete String */

public List<String> complete (String searchString) 
{ 
    List<String> suggestedStrings = new ArrayList<String>(); 
    for (String locationName : LOCATION_NAMES) 
    { 
     if (locationName.toLowerCase().contains(searchString.toLowerCase())) { 
      suggestedStrings.add(locationName); 
     } 
    } 
    this.searchString = searchString; 
    return suggestedStrings; 
} 

/* получить расположение центра */

public String getLocationCenter() 
{ 
    String center = "39,-98"; 
    for (LocationGeocodeBean geoCode : GEO_CODES) 
    { 
     if (geoCode.getId().equals(selectedLocationId())) 
     { 
      if ((geoCode.getLatitude() != 0) && (geoCode.getLongitude() != 0)) 
      { 
       center = String.format("%s,%s", geoCode.getLatitude(),geoCode.getLongitude()); } 
       return center; 
      } 
     } 

    } 
    return center; 
}  
+0

Вы можете также разместить свой подкладочный боб? – Tankhenk

+0

У меня есть код обновления –

ответ

0

Ну я не понимаю ваш код полностью, поэтому я создал простой пример. Он помещает некоторые маркеры на карту, и когда вы нажимаете карту, карта сосредотачивается на маркере. Вы можете использовать параметры обратного вызова. Поэтому, когда вы нажимаете или выбираете что-то в своей форме, вы отправляете обратно параметр и перехватываете его на JavaScript, а затем обновляете свою карту. Попробуйте следующий пример:

Bean:

public class MapBean 
{ 
    private MapModel advancedModel; 

    public MapBean() 
    { 
    advancedModel = new DefaultMapModel(); 

    LatLng coord1 = new LatLng(36.883707, 30.689216); 
    LatLng coord2 = new LatLng(36.879703, 30.706707); 
    LatLng coord3 = new LatLng(36.885233, 30.702323); 

    advancedModel.addOverlay(new Marker(coord1)); 
    advancedModel.addOverlay(new Marker(coord2)); 
    advancedModel.addOverlay(new Marker(coord3)); 

    } 

    public MapModel getAdvancedModel() 
    { 

    return advancedModel; 
    } 

    public void onMarkerSelect(OverlaySelectEvent event) 
    { 
    Marker marker = (Marker) event.getOverlay(); 
    RequestContext context = RequestContext.getCurrentInstance();   
     context.addCallbackParam("lat", marker.getLatlng().getLat()); 
     context.addCallbackParam("lng", marker.getLatlng().getLng());   
    } 

} 

И .xhtml,

<h:form id="form"> 
    <p:gmap center="36.890257,30.707417" zoom="13" type="HYBRID" model="#{mapBean.advancedModel}" style="width:600px;height:400px" id="maps" widgetVar="map" onPointClick="pointClick(event)"> 
     <p:ajax event="overlaySelect" listener="#{mapBean.onMarkerSelect}" oncomplete="handleComplete(xhr, status, args)"/> 
    </p:gmap> 
    <script type="text/javascript"> 
     function handleComplete(xhr, status, args) 
     { 
      //Create center point from callback params 
      var latlng = new google.maps.LatLng(args.lat , args.lng); 
      //Get de google map from your widget now you can use the googlemap api 
      var gmap = map.getMap(); 
      gmap.setCenter(latlng);     
     } 
    </script> 
</h:form> 
Смежные вопросы