如何将变量从java类传递给Javascript

时间:2015-01-27 06:54:05

标签: java javascript

我一直在尝试生成一张Latitude&经度,我拿这些拉特& amp;来自MYSQL DB。 我有一个java类,它将连接到数据库&检索lat,lon,所以我需要将这些值传递给一个JavaScript,它有一个生成map的代码。

在Java Script中我有一个名为addmarker()的函数,它有lat& lon。实际要求是我必须将lat,lon从java类传递给Java脚本。

这是我的java代码:

            Connection conn = null;  
            PreparedStatement pst = null;  
            ResultSet rs = null;  

            String url = "jdbc:mysql://localhost:3306/";  
            String dbName = "db5";  
            String driver = "com.mysql.jdbc.Driver";  
            String userName = "root";  
            String password = "root";  



             try {  
                    Class.forName(driver).newInstance();  
                    conn = DriverManager.getConnection(url + dbName, userName, password);  



                pst = conn.prepareStatement("select latitude,longitude  from nidgis where nidevid=?");
                pst.setString(1, n);
                rs = pst.executeQuery();

                while(rs.next())
                 {
                      rs.getInt("latitude");  
                      rs.getInt("longitude");  
                }

            }
            catch (Exception e) 
            {  
                System.out.println(e);  
            }

这是我的JS代码:

      <script>
             function addMarker() 
             {


               var vehicle = new MQA.Poi({
               lat: vehicle_lat,
               lng: vehicle_lng,
             });
              var icon = new MQA.Icon(
             'https://cdn2.iconfinder.com/data/icons/gpsmapicons   /blue/gpsmapicons07.png',
              35, 42);
             vehicle.setIcon(icon);
            vehicle.setKey("abc");
             map.addShape(vehicle);
           vehicle.setRolloverContent("Vehicle # KA05 9999");
         }

                 MQA.EventUtil.observe(window, 'load', function() {

              /*Create an object for options*/
             var options={
                    elt:document.getElementById('map'),        /*ID of element on the page where you want the map added*/
                    zoom:10,                                   /*initial zoom level of map*/
                    latLng:{lat:39.743943, lng:-105.020089},   /*center of map in latitude/longitude*/
                    mtype:'map'                                /*map type (map)*/
               };

                /*Construct an instance of MQA.TileMap with the options object*/
                 window.map = new MQA.TileMap(options);

                MQA.withModule('geocoder', function() {
              /*Executes a geocode and adds result to the map*/
             map.geocodeAndAddLocations("Denver CO");
            });
            });
              </script>
              <body>

              <div id='map' style='width:1560px; height:730px;'></div>
              <button id="getBasicSample" onclick="addMarker();">show veh1</button> 

             </body>

2 个答案:

答案 0 :(得分:1)

您的Java代码应该在servlet中,然后您应该将lat/lng结果添加到容器并序列化为JSON,例如GSON

class Result {
     double lat;
     double lng;

     Result(double l, double ll) {
         this.lat = l;
         this.lng = ll;
     }
}

List<Result> results = new ArrayList<>();
while (rs.next()) {
    results.add(new Result(rs.getInt("latitude"), rs.getInt("longitude"))); 
}

final TypeToken<List<Result>> resultsType = new TypeToken<List<Result>>() {};
response.getWriter().write(new Gson().toJson(results, resultsType.getType()))

然后在你的javascript中,假设这是用Ajax调用的,你可以使用json:

var markers = [];
for (var i = 0; i < responseJSON.length) {
    markers.push(responseJSON[i].lat + ', ' + responseJSON[i].lng)
}

答案 1 :(得分:0)

有了您的问题,您似乎正在尝试在地图中添加标记。无论如何,这是步骤中的解决方案:

步骤1:在控制器中,设置字符串:

String data = "{\"lat\":" + Lattitude + ",\"Longitude\":" + Longitude+ "}";
request.getSession(false).setAttribute("latLong", data);

步骤2:在JSP页面中,您可以获得与

相同的字符串
<script>
var latLon = <%=session.getAttribute("latLong") %>;

//你已经完成了。

如果您在加载JSP时尝试获取lat-long。然后你必须使用Ajax调用请求并获取上面的&#34; latLong&#34;作为JSON的回应。 更新:如果你想添加标记,那么下面将是逻辑。

假设用户在地图上的某个位置点击了您已经有相同的地图和图层。在以下示例中,有 map ,它是 OpenLayers.Map 的对象。

map.events.register("click", map, function(e) {

                            var positionN = this.events.getMousePosition(e);

                            var lonlat = map.getLonLatFromPixel(positionN);
                            var TempPoint = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat);
                            var iconAnnotation = new OpenLayers.Icon(OpenLayers.ImgPath + '../../css/img/icon.png');
                            var feature = new OpenLayers.Feature.Vector(TempPoint,{icon:iconAnnotation,labelText: "",markerId:"r", labelColor:"red"});
                            AnnotationLayer.addFeatures([feature]);

                    });