繁体   English   中英

仅刷新此部分数据(谷歌地图)

[英]refresh only this part of Data (Google Maps)

我正在使用, JPAServletsJSP用于我正在处理的谷歌地图项目。

JPA实体被称为“地点”

“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的方法中返回数据库中所有Locations的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中 ,我传递了Locations列表:

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

在我使用的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. 我的设计是否无法适应这种情况,我怎么能改变它才能满足这种能力?

我设法让它发挥作用。

我做的是,我在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}

                       });

最好的方法是使用WebSocket,只在后端数据发生变化时进行刷新。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM