无法使用PrimeFaces使用Google地图坐标填充表格

时间:2013-08-26 15:05:46

标签: google-maps jsf primefaces

我在使用PrimeFaces时遇到bean和JSF视图的问题。我需要使用与标记相关联的Google地图坐标来填充表格。差不多完成了,路上只有一些小东西。有人可以给出指示吗?

这是豆子:

import java.io.Serializable;  
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;   
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;  
import javax.faces.event.ActionEvent;  

import org.primefaces.model.map.DefaultMapModel;  
import org.primefaces.model.map.LatLng;  
import org.primefaces.model.map.MapModel;  
import org.primefaces.model.map.Marker;
@SuppressWarnings("serial")
@ManagedBean
public class MapBean implements Serializable {  

    private MapModel emptyModel;  

    private String title;  

    private double lat;  

    private double lng;

    private List<LatLng> coordenadas;

    public List<LatLng> getCoordenadas() {
        return coordenadas;
    }

    public void setCoordenadas(List<LatLng> coordenadas) {
        this.coordenadas = coordenadas;
    }

    public MapBean() {  
        emptyModel = new DefaultMapModel();  
    }  

    public MapModel getEmptyModel() {  
        return emptyModel;  
    }  

    public void addMessage(FacesMessage message) {  
        FacesContext.getCurrentInstance().addMessage(null, message);  
    }  

    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 populateTable(List<LatLng> lista){
        lista.add(new LatLng(getLat(), getLng()));
    }

    public void addMarker(ActionEvent actionEvent) {  
        Marker marker = new Marker(new LatLng(lat, lng), title);  
        coordenadas = new ArrayList<LatLng>();
        emptyModel.addOverlay(marker);  

        addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Marker Added", "Lat:" + lat + ", Lng:" + lng));

        populateTable(coordenadas);

    }

}

这是视图,带有主要面孔标签。会发生什么:标记被添加,其他一切工作,但坐标不会到表,我不知道为什么。尽管如此仍在尝试:

<!DOCTYPE html>  

  <html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:a4j="http://richfaces.org/a4j"
  xmlns:rich="http://richfaces.org/rich"
  xmlns:p="http://primefaces.org/ui"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets">   

  <h:head>  
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">    </script>   
  </h:head>   
  <h:body>  
  <h:form prependId="false">  
 <p:growl id="messages" showDetail="true" />  
<p:gmap id="gmap" center="-3.12808313259846,-59.9729442607909" zoom="13" type="ROADMAP"   
style="width:1200px;height:600px"  
model="#{mapBean.emptyModel}"   
onPointClick="handlePointClick(event);"   
widgetVar="map" />  

     <p:dialog widgetVar="dlg" effect="FADE" effectDuration="0.5" fixedCenter="true"            closable="false" >  

    <h:panelGrid columns="2">  
        <h:outputLabel for="title" value="Title:" />  
        <p:inputText id="title" value="#{mapBean.title}" />  

        <f:facet name="footer">  
            <p:commandButton value="Add"   
                    actionListener="#{mapBean.addMarker}"   
                    update="messages"   
                    oncomplete="markerAddComplete()"/>  
            <p:commandButton value="Cancel" onclick="return cancel()"/>  
        </f:facet>  
    </h:panelGrid>  

    <h:inputHidden id="lat" value="#{mapBean.lat}" />  
    <h:inputHidden id="lng" value="#{mapBean.lng}" />  

</p:dialog>
<p:dataTable  value="#{mapBean.coordenadas}" var="latLng">
        <p:column headerText="Latitude">  
            <h:outputText value="#{mapBean.lat}" />  
        </p:column>  

        <p:column headerText="Longitude">  
          <h:outputText value="#{mapBean.lng}" />  
       </p:column>           
</p:dataTable>  

非常感谢。

1 个答案:

答案 0 :(得分:0)

视图中的这些更改解决了问题:

<p:commandButton value="Add"   
                        actionListener="#{mapBean.addMarker}"   
                        update="messages,tabela"   
                        oncomplete="markerAddComplete()"/>  
                <p:commandButton value="Cancel" onclick="return cancel()"/>

必须更新“tabela”,这是另一个primefaces元素的id:

<p:dataTable id="tabela" value="#{mapBean.coordenadas}" var="LatLng">
        <p:column headerText="Latitude">  
            <h:outputText value="#{LatLng.lat}" />  
        </p:column>  

        <p:column headerText="Longitude">  
          <h:outputText value="#{LatLng.lng}" />  
       </p:column>           
</p:dataTable>