1

GoogleMapsAPIと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 に答える