массив javascript и jsf / richfaces - PullRequest
1 голос
/ 02 июня 2011

У меня есть следующий код в javascript:

        <script type="text/javascript"
            src="#{facesContext.externalContext.requestContextPath}/js/sample-points.js"></script>

        <script type="text/javascript">//<![CDATA[
            var cloudmade = new CM.Tiles.CloudMade.Web({key: 'bbb'});
            var map = new CM.Map('cm-example', cloudmade);
            map.setCenter(new CM.LatLng(51.50874, 22.76367), 4);

            var markers = [];
            for (var i = 0; i < samplePoints.length; i++) {
                markers.push(new CM.Marker(new CM.LatLng(samplePoints[i][0], samplePoints[i][1])));
            }

            var clusterer = new CM.MarkerClusterer(map, {clusterRadius: 70});
            clusterer.addMarkers(markers);
        //]]></script>

"samplePoints" - это массив координат, который я могу использовать для отображения маркеров на карте.

Карта показывается здесь:

<div id="cm-example" style="width: 99.5%; height: 600px"></div>

Как я могу предоставить этот массив из jsf / richfaces без использования файла (например, я хочу получить эти данные из базы данных, создать массив и отправить в этот скрипт)?

Спасибо

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Просто позвольте JSF напечатать его, как будто это код JavaScript.

Заменить

var markers = [];
for (var i = 0; i < samplePoints.length; i++) {
    markers.push(new CM.Marker(new CM.LatLng(samplePoints[i][0], samplePoints[i][1])));
}

от (при условии Facelets)

var markers = [];
<ui:repeat value="#{bean.samplePoints}" var="samplePoint">
    markers.push(new CM.Marker(new CM.LatLng(#{samplePoint[0]}, #{samplePoint[1]})));
</ui:repeat>

, где #{bean.samplePoints} возвращает List<BigDecimal[]> или что-то еще.

1 голос
/ 02 июня 2011

См. Ссылка

Используя jsFunction, вы можете загрузить любую структуру данных (например, Точки), а на стороне клиента вы получите структуру данных javaScript, к которой вы можете легко получить доступ (point.x).

...