2012-03-12 106 views
5

我试图从弹簧控制器传递数据到JavaScript,但没有运气。我应该使用ajax来做到这一点吗?请你能给我一些提示,告诉我如何做到这一点?什么是最好的方法?如何将json对象从java传递给javascript?

以我控制器I尝试传递数据:

@RequestMapping(value = "/map", method = RequestMethod.GET) 
public String map(ModelMap model) { 

... 

model.addAttribute("trackpoints", json); 


return "map"; 

} 

其中JSON是含有GSON对象(的JSONObject):

{"trackpoints":[{"latitude":52.390556,"longitude":16.920295}, 
{"latitude":52.390606,"longitude":16.920262}]} 

在我的jsp文件我有:

<script type="text/javascript"> 

var myJSON = {}; 

myJSON = ${trackpoints}; 

document.writeln(myJSON.trackpoints); 

</script> 

但结果是:

[object Object],[object Object] 

我更详细地解释这一点:>

我想使用谷歌地图API来显示地图和借鉴许多协调LAT路径,多头。 我认为JSON会比列表更好,但我可能是错的。

我尝试从文档中调整代码 - 在下面的代码中,我尝试用循环替换硬编码坐标,并从json对象中取值。

<script type="text/javascript"> 
function initialize() { 
    var myLatLng = new google.maps.LatLng(0, -180); 
    var myOptions = { 
     zoom : 3, 
     center : myLatLng, 
     mapTypeId : google.maps.MapTypeId.TERRAIN 
    }; 

    var map = new google.maps.Map(document.getElementById("map_canvas"), 
      myOptions); 
    var flightPlanCoordinates = [ 
      new google.maps.LatLng(37.772323, -122.214897), 
      new google.maps.LatLng(21.291982, -157.821856), 
      new google.maps.LatLng(-18.142599, 178.431), 
      new google.maps.LatLng(-27.46758, 153.027892) ]; 
    var flightPath = new google.maps.Polyline({ 
     path : flightPlanCoordinates, 
     strokeColor : "#FF0000", 
     strokeOpacity : 1.0, 
     strokeWeight : 2 
    }); 

    flightPath.setMap(map); 
} 
</script> 

我希望它现在更清晰:)

回答

1

myJSON.trackpoints是两个对象的数组。如果你想将它写为HTML,你可以做这样的事情:

function writeCoordinates(coords) { 
    document.writeln('<div>lat = ' + coords.latitude); 
    document.writeln(', lon = ' + coords.longitude + '</div>'); 
} 

int len = myJSON.trackpoints.length; 
for (int i = 0; i < len; i++) { 
    writeCoordinates(myJSON.trackpoints[i]); 
} 

BTW:JSON是真正有用的,当你使用AJAX请求,但对于“正常”的要求,最好把普通的Java对象转换成该模型,例如:

弹簧控制器:

List<Coordinate> trackpoints = ... 
model.addAttribute("trackpoints", trackpoints); 

JSP

<c:forEach items="${trackpoints}" var="coord"> 
    <div>lat = ${coord.latitude}, lon = ${coord.longitude}</div> 
</c:forEach> 

给出,即Coordinate类具有方法getLatitude()getLongitude()。通过使用JSON编码器(如JacksonContentNegotiatingViewResolver),Spring控制器中的该方法甚至可以用于“正常”和AJAX请求。

0

看看:http://jsfiddle.net/AHue8/4/

我猜外卖这里是你需要指定要哪个元素在指点杆对象和你countrol如何将这些都显示在浏览器中。由于“trackPoint”不是原始数据类型(它是一个包含2个数据元素纬度和经度的对象),因此浏览器不知道如何解释它,所以你必须告诉它如何。

相关问题