2012-12-17 5 views
1

Google지도 API 및 JSP를 사용하여 응용 프로그램을 만들고 있습니다. 내가 마커에 이벤트를 추가하고 쿼리 문자열을 사용하여 값을 전달할 때 나는 마커의 실제 값이 아닌 동일한 값을 지속적으로 얻고 있기 때문에 문제가 발생했습니다. 누군가 내가 잘못하고있는 것을 알려주시겠습니까?Google지도 JSP

<% 

      Query query2 = em.createNamedQuery("Factories.findAll"); 
      List<Factories> factories = query2.getResultList(); 

      for (int i = 0; i < factories.size(); i++) { 
       Float longitude = factories.get(i).getLongitude(); 
       Float latitude = factories.get(i).getLatitude(); 
       String name = factories.get(i).getName(); 
       Integer id = factories.get(i).getFactoryID(); 
     %> 

       var marker = new google.maps.Marker({ 
        position: new google.maps.LatLng(<%=latitude%>, <%=longitude%>), 
        raiseOnDrag:true, 
        title: "<%=name%>", 
        clickable:true, 
        zIndex: <%=id%>, 
        map: map 
       }); 
       google.maps.event.addListener(marker, 'click', function() { 
        window.location = "viewFireworksFactory.jsp?id=" + marker.getZIndex(); 
       }); 

     <% }%> 
+0

스크립틀릿을 사용하는 것은 처음 실수입니다. – NimChimpsky

답변

1

생성 된 JavaScript를보세요. 그것은 다음과 같이 표시됩니다

var marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(245, 654), 
       raiseOnDrag:true, 
       title: "A", 
       clickable:true, 
       zIndex: 1, 
       map: map 
      }); 
google.maps.event.addListener(marker, 'click', function() { 
    window.location = "viewFireworksFactory.jsp?id=" + marker.getZIndex(); 
}); 

var marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(654, 987), 
       raiseOnDrag:true, 
       title: "B", 
       clickable:true, 
       zIndex: 2, 
       map: map 
      }); 
google.maps.event.addListener(marker, 'click', function() { 
    window.location = "viewFireworksFactory.jsp?id=" + marker.getZIndex(); 
}); 

var marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(985, 2315), 
       raiseOnDrag:true, 
       title: "C", 
       clickable:true, 
       zIndex: 3, 
       map: map 
      }); 
google.maps.event.addListener(marker, 'click', function() { 
    window.location = "viewFireworksFactory.jsp?id=" + marker.getZIndex(); 
}); 

var marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(6855, 464), 
       raiseOnDrag:true, 
       title: "D", 
       clickable:true, 
       zIndex: 4, 
       map: map 
      }); 
google.maps.event.addListener(marker, 'click', function() { 
    window.location = "viewFireworksFactory.jsp?id=" + marker.getZIndex(); 
}); 

그래서, 명확에서,이 같은 변수의 이전 정의를 덮어 쓰기, 같은 마커 변수 N 시간을 재정의합니다. 그리고 모든 리스너는 variabe에 할당 된 마지막 객체에 의해 참조 된 마커에서 Z 인덱스를 얻습니다.

+0

대신에 jstl 태그를 사용하십시오. 의미가 있지만지도에 나타나는 모든 마커가 사실이 아닌 것으로 가정했기 때문에 가능합니다. 모든 루프마다 변수 이름을 변경할 수 있습니까? – user1911104

+0

매 반복마다 증분 된 카운터의 값을 각 마커 변수에 추가 할 수 있습니다. 또는 모든 루프를 클로저로 묶을 수 있습니다. '(function() {var marker = ...; google.maps.addListener ...;})();' –

+0

Worked ... Thanks :) – user1911104