将数据从Bean传递到jsf页面上的javascript。 Google api指示

时间:2013-11-05 13:30:18

标签: java javascript json java-ee google-maps-api-3

我需要将路径点从ManagedBean传递到google maps javascript directions api到jsf页面。 我正在尝试制作JSONArray并将其传递给jsf:

private JSONArray routesJSON;

有吸气剂和制定者。

比我创建JSON:在循环中我将带有​​LatLang的航点的字符串添加到List<String>

routes.add("new google.maps.LatLng(" + o.getLatitude() + "," + o.getLongitude()+")");

我正在获得JSON:

[{"location":"new google.maps.LatLng(50.495121,22.1705)"},{"location":"new google.maps.LatLng(50.57082,22.06813)"},{"location":"new google.maps.LatLng(50.570549,22.047871)"},{"location":"new google.maps.LatLng(50.521389,21.912695)"},{"location":"new google.maps.LatLng(50.495121,22.1705)"}]

来自:

for()
array.put(obj);
}
System.out.println(array);
用于显示路径的JSF函数中的

:(它与硬编码数据一起使用)

function calcRoute() {

              var waypts = [];                 
              var start = new google.maps.LatLng(#{someBean.startLatitude}, #{someBean.startLongitude});            
              var end = new google.maps.LatLng(49.712112, 21.50667);
              var way = #{someBean.routesJSON};
              var request = {
              origin:start,
              destination:end,
              optimizeWaypoints: true,                        
              waypoints:way;         
              travelMode: google.maps.TravelMode.DRIVING
              };
              directionsService.route(request, function(result, status) {
                if (status == google.maps.DirectionsStatus.OK) {
                  directionsDisplay.setDirections(result);
                }
              });
            }

但是当我显示该页面图时没有出现。我知道这可能是因为JSON中的"但我不知道如何删除它。或者可能有最简单的方法将路点数据从Bean传递到jsf页面?

1 个答案:

答案 0 :(得分:1)

不返回包含javascript语句的JSON数据包,例如“new google.maps.LatLng(50.495121,22.1705)”,而只返回坐标更为明智。

因此,如果您的javascript中有一个类似于此的JSON数据包(我不知道如何在Java和Javascript之间传递数据):

var routes = [
  {"lat":"50.495121", "lng":"22.1705"},
  {"lat":"50.57082", "lng":"22.06813"},
  {"lat":"50.570549", "lng":"22.047871"},
  {"lat":"50.521389", "lng":"21.912695"},
  {"lat":"50.495121", "lng":"22.1705"}
]

您可以将其转换为如下数组:

var way = [];
for (var i = 0; i < routes.length; i++) {
  way.push(new google.maps.LatLng(parseFloat(routes[i].lat), parseFloat(routes[i].lng)));
}

注意:使用parseFloat将“50.495121”等字符串转换为浮点数。