latitude; @Column(name="longitude") private double longitude; /* * Getters e Setters */}Agora vamos fazer nossa classe dao.LocalDAO:@Statelesspublic class LocalDAO { @PersistenceContext(unitName="PrimeGmapPU") private EntityManager em; public void gravar(Local local){ try { em.persist(local); } catch (Exception e) { e.printStackTrace(); } } public List<Local> listar(){ List<Local> locais = new ArrayList<Local>(); try { Query query = em.createQuery("SELECT l FROM Local l"); locais = query.getResultList(); } catch (Exception e) { e.printStackTrace(); } return locais; } }Lembrando que na Linha 4, o unitName, e da minha unidade de persistencia, o que pode mudar de acordo como voce criou sua conexao.Agora vamos para nossa classe controller.LocalBean, eu refiz ela, ou seja tirei do projeto aquela questao do growl, ela ficou dessa forma:@javax.faces.bean.ManagedBean@javax.faces.bean.ViewScopedpublic class LocalBean implements Serializable{ @EJB private LocalDAO localDAO; private Local local; private MapModel locais; public void novo(PointSelectEvent event) { local = new Local(); LatLng coord = event.getLatLng(); local.setLatitude(coord.getLat()); local.setLongitude(coord.getLng()); } public void gravar() { localDAO.gravar(local); carregarLocais(); } private void carregarLocais() { locais = new DefaultMapModel(); List<Local> locaisList = localDAO.listar(); for (Local l1 : locaisList) { locais.addOverlay( new Marker( new LatLng(l1.getLatitude(), l1.getLongitude()), l1.getDescricao())); } } /* * Getters e Setters */ public MapModel getLocais() { if (locais == null) { carregarLocais(); } return locais; }}Linha 8: a classe MapModel deve ser importada da biblioteca do Primefaces;Linha 10: metodo novo, responsavel por pegar as coordenadas geograficas e setar no meu objeto Local;Linha 17: metodo gravar, responsavel por chamar o DAO e gravar o metodo no banco de dados;Linha 22: metodo carregarLocais, este metodo e responsavel por converter uma lista de locais em um MapModel;Linha 37: neste caso estou mostrando apenas esse get, por ter um diferencial que e carregar os locais caso o mesmo esteja null.E por fim nossa pagina index.xhtml:<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui"> <h:head> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true" /> <title>GMap</title> </h:head> <h:body style="font-size: 12px"> <p:gmap id="mapa" center="-15.565986,-54.309782" zoom="15" model="#{localBean.locais}" onPointClick="dlgLocal.show()" type="HYBRID" style="width:600px;height:400px"> <p:ajax event="pointSelect" listener="#{localBean.novo}" update="formLocal" /> </p:gmap> <p:dialog widgetVar="dlgLocal" width="280" height="100"> <h:form id="formLocal"> <p:focus for="desc" /> <h:panelGrid columns="2" style="width: 100%"> <h:outputLabel for="desc" value="Descricao:" /> <p:inputText id="desc" value="#{localBean.local.descricao}" /> </h:panelGrid> <p:toolbar> <p:toolbarGroup align="right"> <p:commandButton value="Gravar" actionListener="#{localBean.gravar()}" oncomplete="dlgLocal.hide()" update=":mapa" /> </p:toolbarGroup> </p:toolbar> </h:form> </p:dialog> </h:body></html>Agora vamos entender o que esta acontecendo nesta pagina:Linha 9: temos o gmap, com a propriedade model, que esta relacionada ao MapModel do nosso controller, e a propriedade onPointClick, que abre o dialog de cadastro de um novo marcador;Linha 10: chama o metodo novo quando e clicado no mapa;Linha 13: temos o dialog que faz o cadastro de um novo marcador.Ficando dessa forma:Este projeto foi apenas para dar uma base de como carregar e adicionar marcadores no gmaps com o PrimeFaces. Tambem nao tratei o dialog, ou seja, precisaria de um "trato especial" no caso dele nao fechar quando o campo descricao estiver vazio. Bom eu tenho o codigo que faz isso, mas para nao deixar essa postagem mais extensa, nao coloquei aqui, provavelmente eu deva criar uma postagem sobre como controlar o dialog, ate mesmo como abrir ou fechar ele pelo controller.Ate mais! :)