如何将标记数组从 servlet 传递到 JavaScript

how to pass array of markers from servlet to javascript

本文关键字:servlet JavaScript 数组      更新时间:2023-09-26

我想在jsp页面上将标记数组传递给javascript,以便在谷歌地图上显示它们。在servlet中,我从数据库中加载标记数组,但我不知道如何将它们传递给javascript。Thi 是我的仆人

protected void doGet(HttpServletRequest request, HttpServletResponse response) `throws ServletException, IOException {
    // TODO Auto-generated method stub`
    PlaceDao placeDao = new PlaceDao();
    ArrayList<Place> pList = new ArrayList<Place>();
    try {
        pList = placeDao.readData();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Marker marker = new Marker();
    ArrayList<Marker> mList = new ArrayList<Marker>();
    for (int i = 0; i < pList.size(); ++i)
    {
        marker.setLatitude(pList.get(i).getLatitude());
        marker.setLongitude(pList.get(i).getLongitude());
        mList.add(marker);
    }
    request.setAttribute("marker", mList);
    request.getRequestDispatcher("pages/location.jsp").forward(request, response);
}`

和我的 JSP 页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script src="http://maps.googleapis.com/maps/api/js">
</script>
<script>
    var myCenter = new google.maps.LatLng(51.508742, -0.120850);
    function initialize() {
        var mapProp = {
            center : myCenter,
            zoom : 5,
            mapTypeId : google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("googleMap"),
                mapProp);
        var marker = new google.maps.Marker({
            position : myCenter,
        });
        marker.setMap(map);
    }
    google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
    <div id="googleMap" style="width: 500px; height: 380px;"></div>
</body>
</html>

所以而不是var myCenter = new google.maps.LatLng(51.508742, -0.120850);我想传递我的数组。我认为这可以用 JSON 完成,但我不确定也不知道如何完成。感谢您的任何帮助!

需要注意的几件事:

  • 您无法在 javascript 中读取 Java List
  • 您必须以某种方式返回结果才能在javascript(客户端(端访问。

如何在客户端获取列表?

您可以选择以下 2 个选项之一:

  • 使用 Ajax 调用(例如(:

    $.get( "urlToMethod", { 
            "someVariable": someValue 
        }).done(function( data ) {
            // in data you have the list of markers
        }).error(function (data) {
            // in data you have exception or the error
        });
    

    爪哇映射:

    @RequestMapping(value = "urlToMethod")
    public String[] getMarkers (
            HttpServletRequest httpRequest,
            HttpServletResponse httpResponse,
            @RequestParam(value = "someVariable") String someVariable) {
        // get the markers and return a String[] or JSONArray!!!
    }
    
  • 将列表放入 JSP 中并在脚本中读取:

    Java 端(如有必要,创建HelperClass(

    model.addAttribute("markers", markersList);
    

    爪哇语

    markers = $("#markers").val();
    

    .JSP

    <form:hidden path="markers" id="markers" />
    

如何在javascript中读取Java List

同样在这里,您可以使用以下任何选项:

  • 你不能在javascript中读取列表,但你可以读取StringString[](不要使用双精度或浮点数作为GPS纬度/长度,因为精度损失(。
  • 创建一个标记的 JSONArray,如以下答案所示:

注意:我假设您的项目中有JQuery,也要小心,因为在 Ajax 解决方案中使用了Spring,如果您的项目中没有它,请检查此处。