1

我正在使用 Google 地图 API 和 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();
                });

        <% }%>
4

1 回答 1

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 次,覆盖之前对同一个变量的定义。因此,所有侦听器都将在标记中获得 Z 索引,该标记由分配给变量的最后一个对象引用。

于 2012-12-17T20:49:02.177 回答