<a:growl id="messages" showDetail="true" /> <a:gmap id="gmap" center="36.890257,30.707417" zoom="13" type="HYBRID" style="width:100%;height:400px" model="#{addMarkersView.emptyModel}" onPointClick="handlePointClick(event);" widgetVar="map" /> <a:dialog widgetVar="dlg" showEffect="fade"> <a:form prependId="false"> <h:panelGrid columns="2"> <h:outputLabel for="title" value="Title:" /> <a:inputText id="title" value="#{addMarkersView.title}" /> <f:facet name="footer"> <a:commandButton value="Add" actionListener="#{addMarkersView.addMarker}" update=":messages" oncomplete="markerAddComplete()" /> <a:commandButton value="Cancel" onclick="return cancel()" /> </f:facet> </h:panelGrid> <h:inputHidden id="lat" value="#{addMarkersView.lat}" /> <h:inputHidden id="lng" value="#{addMarkersView.lng}" /> </a:form> </a:dialog> <script type="text/javascript"> var currentMarker = null; function handlePointClick(event) { if(currentMarker === null) { document.getElementById('lat').value = event.latLng.lat(); document.getElementById('lng').value = event.latLng.lng(); currentMarker = new google.maps.Marker({ position:new google.maps.LatLng(event.latLng.lat(), event.latLng.lng()) }); PF('map').addOverlay(currentMarker); PF('dlg').show(); } } function markerAddComplete() { var title = document.getElementById('title'); currentMarker.setTitle(title.value); title.value = ""; currentMarker = null; PF('dlg').hide(); } function cancel() { PF('dlg').hide(); currentMarker.setMap(null); currentMarker = null; return false; } </script>
package com.jarch.showcase.view.data.gmap; import java.io.Serializable; import javax.annotation.PostConstruct; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.context.FacesContext; import org.primefaces.model.map.DefaultMapModel; import org.primefaces.model.map.LatLng; import org.primefaces.model.map.MapModel; import org.primefaces.model.map.Marker; @ManagedBean public class AddMarkersView implements Serializable { private MapModel emptyModel; private String title; private double lat; private double lng; @PostConstruct public void init() { emptyModel = new DefaultMapModel(); } public MapModel getEmptyModel() { return emptyModel; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public double getLat() { return lat; } public void setLat(double lat) { this.lat = lat; } public double getLng() { return lng; } public void setLng(double lng) { this.lng = lng; } public void addMarker() { Marker marker = new Marker(new LatLng(lat, lng), title); emptyModel.addOverlay(marker); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Marker Added", "Lat:" + lat + ", Lng:" + lng)); } }