【问题标题】:refresh only this part of Data (Google Maps)只刷新这部分数据(谷歌地图)
【发布时间】:2014-06-12 20:10:03
【问题描述】:

我正在将 JPAServletsJSP 用于我正在从事的 google map 项目.

JPA 实体称为“Locations”

"Locations" 实体类有一个构造函数,它接受:

public Locations(Double latitude,Double longitude,String name,int people)
{this.latitude = latitude; this.longitude=longitude,this.name=name, this.people=people}

我有一个名为 LocationData 的类,我在一个名为 getLocation 的方法中返回数据库中所有位置的 ArrayList 以及它们的 latitude,longitude,PeopleAvailableNow

ArrayList locations = new ArrayList() ;

List<Location> locations = query.getResultList(); //This contains all the Locations

for (Location s : locations) {

locations.add(new Location(s.lat,s.lon,s.name,s.people))

}
return locations

在我的 servlet 中,我这样传递位置列表:

ArrayList list = ld.getLocations();
String json = new Gson().toJson(list);
response.setContentType("text/json");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write(json);

在我的 JSP 使用的 map.js 中

// get locations from server
$.getJSON("locations", {}, function(data){

$.each(data, function(index, element){

                var marker = new google.maps.Marker({
                    position: new google.maps.LatLng(element.lat, element.lng),
                    map: map,
                    title: element.name,
                    people : element.people,                    
                });
                markers.push(marker);

所以现在,清楚地了解程序的运行方式,所有标记都出现在地图上,我使用信息窗口来显示标记(位置)的人和名称。问题是,数据库中的人数总是会发生变化,因为一个人可以离开一个地方去另一个地方。

  1. 我怎样才能在一定的时间间隔内总是刷新“人”值(从实体中读取)?
  2. 我的设计无法容纳这个,我怎么能改变它来满足这个能力?

【问题讨论】:

  • 设置刷新计时器以重新加载页面或重新执行 getJSON 调用应该不会很困难。根据您允许它的频率,您可以毫无差别地消耗大量资源。

标签: java ajax google-maps jsp


【解决方案1】:

我设法让它工作。

我所做的是,我在 LocationData java 类中创建了一个方法,该方法具有人名的输入参数,并基于该方法返回该人的属性。

然后我创建了第二个 servlet,这个只返回人的值,而不是像后者那样的所有人。我写在servlet的doGet

String personname = request.getParameter("personName"); //This will be received from an Ajax call
ArrayList list = ld.getLocation(personname);
String json = new Gson().toJson(list);
response.setContentType("text/json");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write(json);

在 Javascript 中,我有一个名为的 ajax 放置在获取数据的标记的 onbutton 单击中

$.ajax({
                            dataType: "json",
                            type: 'GET',
                            url: 'servleturl',
                            data: {"personName": marker.getTitle()},
                            success: function(response) {
                              //do stuff here to perform the unique action to the marker}

                       });

【讨论】:

    【解决方案2】:

    最好是使用 WebSocket 并且只在后端数据发生变化时刷新。

    http://docs.oracle.com/javaee/7/tutorial/doc/websocket003.htm#BABGJEIG

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2013-10-06
      • 1970-01-01
      • 2012-12-25
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多