2012-03-12 25 views
5

Estoy tratando de pasar datos del controlador de primavera a javascript pero sin suerte. ¿Debo usar ajax para hacer esto? ¿Podrías darme algunas pistas sobre cómo hacer esto? ¿Cuál es la mejor manera?cómo pasar el objeto json de java a javascript?

En mi controlador de trato de pasar datos:

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

... 

model.addAttribute("trackpoints", json); 


return "map"; 

} 

donde JSON es un objeto GSON (JSONObject) que contiene:

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

en mi archivo JSP que tengo:

<script type="text/javascript"> 

var myJSON = {}; 

myJSON = ${trackpoints}; 

document.writeln(myJSON.trackpoints); 

</script> 

pero el resultado es:

[object Object],[object Object] 

explico esto con más detalle:>

quiero usar API de Google Maps para mostrar el mapa y trazar ruta coordinada de muchos lat, anhela. creo que json será mejor que la lista, pero puedo estar equivocado.

intento ajustar el código de la documentación - en el siguiente código intento reemplazar las coordenadas codificadas con bucle, y los valores del objeto 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> 

espero que sea ahora más claro :)

Respuesta

1

myJSON.trackpoints es un conjunto de dos objetos. Si desea escribir como HTML que podría hacer algo como esto:

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]); 
} 

Por cierto: JSON es muy útil cuando se utiliza peticiones AJAX, pero para "normal" Solicitudes que es mejor poner llanura objetos Java en el modelo, por ejemplo:

controlador de primavera:

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

JSP:

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

dado que la clase Coordinate tiene los métodos getLatitude() y getLongitude(). Ese método en el controlador Spring se puede usar incluso para solicitudes "normales" y AJAX, utilizando un codificador JSON, como Jackson, y ContentNegotiatingViewResolver.

0

Tome un vistazo a: http://jsfiddle.net/AHue8/4/

supongo que la comida para llevar aquí es que es necesario especificar qué elemento en el objeto de ploteo que quiere y cómo los countrol se muestran en el navegador. Dado que un "trackPoint" no es un tipo de datos primitivo (es un objeto con 2 elementos de datos de latitud y longitud), el navegador no sabe cómo interpretarlo, por lo que debe indicarle cómo hacerlo.

Cuestiones relacionadas