2013-09-25 49 views
0

我有gmap4jsf的问题。下面的代码:primefaces GMap示例不工作,不知道为什么

<f:view contentType="text/html"> 
     <h:form id="form"> 
      <p:growl id="msg" showDetail="true"/> 
         <p:gmap id="gmap" center="36.890257,30.707417" zoom="13" type="HYBRID" 

           style="width:600px;height:400px" 
           model="#{addPlaceBean.emptyModel}" 
           onPointClick="handlePointClick(event);" 
           widgetVar="map" disableDoubleClickZoom="true"> 

         </p:gmap> 

         <p:dialog widgetVar="dlg"> 
          <h:form prependId="false"> 
           <h:panelGrid columns="1"> 
            <h:outputLabel value="Are you sure?"/> 


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

           <h:inputHidden id="lat" value="#{addPlaceBean.lat}"/> 
           <h:inputHidden id="lng" value="#{addPlaceBean.lng}"/> 
          </h:form> 
         </p:dialog> 

         <script type="text/javascript"> 
          var currentMarker = null; 

          function handlePointClick(event) { 

           console.log("click event"); 

           console.log(event.marker); 

           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()) 
            }); 

            map.addOverlay(currentMarker); 

            dlg.show(); 
           } 
          } 

          function markerAddComplete() { 
         //currentMarker = null; Only one can be added. 
           dlg.hide(); 
          } 

          function cancel() { 
           dlg.hide(); 
           currentMarker.setMap(null); 
           currentMarker = null; 

           return false; 
          } 
         </script> 
      </h:form> 
    </f:view> 

这里的支持bean:

public void addMarker(ActionEvent actionEvent) { 
    System.err.println("Adding marker"); 
    Marker marker = new Marker(new LatLng(lat, lng), title); 
    emptyModel.addOverlay(marker); 

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

,你可以看到,它是从primefaces“添加标记”例如,使用GMAP的拍摄。我使用的素数是3.5。问题是,当我双击地图添加标记时,没有任何反应! addMarker(ActionEvent actionEvent)未执行,并且javascript函数handlePointClick(event)正在执行,直到currentMarker = new google.maps.Marker({ position: new google.maps.LatLng(event.latLng.lat(), event.latLng.lng()) });行,然后中断(使用警报进行检查 - 它不会在此行后显示)。没有发现异常。坦率地说,我不知道发生了什么(JavaScript知识不是我的好方面)。我试图删除p:dialog中的<h:form>标签,但它不起作用。当我将disableDoubleClickZoom属性更改为false时,地图正在放大,而不是显示对话框。

你能告诉我我做错了什么或给我一个很好的例子吗?

在此先感谢。

回答

2

好的,

我做到了。具体方法如下:

<p:gmap model="#{addPlaceBean.emptyModel}" center="41.381542, 2.122893" zoom="10" type="ROADMAP" style="width:600px;height:600px" id="map"> 
     <p:ajax event="pointSelect" listener="#{addPlaceBean.onPointSelect}" update="msg map" /> 
     <p:ajax event="overlaySelect" listener="#{addPlaceBean.onMarkerSelect}" update="msg" /> 
    </p:gmap> 

而且在支持bean:

public void onPointSelect(PointSelectEvent event) { 
    System.out.println("Add marker title: " + title); 
    LatLng latlng = event.getLatLng(); 
    addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Dodano marker.", "")); 
    emptyModel = new DefaultMapModel(); 
    Marker marker = new Marker(latlng, title); 
    emptyModel.addOverlay(marker); 
} 
+0

想纪念你的答案被接受? – Brett

+0

是的,我忘了。谢谢! – greenskin

-1

更换

document.getElementById('lat').value = event.latLng.lat(); 

通过

document.getElementById('form:lat').value = event.latLng.lat(); 
相关问题