【问题标题】:javascript array and jsf/richfacesjavascript 数组和 jsf/richfaces
【发布时间】:2011-06-02 13:08:17
【问题描述】:

我在 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 提供这个数组(例如,我想从 db 中获取这些数据,创建数组并发送到这个脚本)?

谢谢

【问题讨论】:

    标签: java javascript jsf richfaces


    【解决方案1】:

    只要让 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&lt;BigDecimal[]&gt; 或其他内容。

    【讨论】:

    • “通过(假设 Facelets)”是什么意思?
    • JSF 可用于旧的 JSP 或其后继 Facelets(基于 XML)。 &lt;ui:repeat&gt; 在旧 JSP 中不可用。如果您将 JSF 2.0 与 XHTML 文件一起使用,那么您肯定在使用 Facelets。
    • 我正在使用带有 xhtml 的 JSF 1.2。这是否意味着我不能使用
    • 你可以使用它。你在根标签声明中有一个xmlns:ui="http://java.sun.com/jsf/facelets",对吧?
    • 是的,我有,但是当我尝试执行那部分代码时,我认为我永远不会到达循环(或 ui:repeat 中的行)。我得到了这个生成的代码:&lt;ui:repeat items="[[Ljava.lang.String;@6216cf1f]" var="samplePoint"&gt; markers.push(new CM.Marker(new CM.LatLng(samplePoint[0], samplePoint[1]))); &lt;/ui:repeat&gt; Bean:private List&lt;String[]&gt; samplePoints; ... @Create public void init() { String[] a = new String[2]; a[0] = "50.4397550076928"; a[1] = "30.6139826774597"; samplePoints.add(a); } ... getter setter
    【解决方案2】:

    看到这个Link

    使用 jsFunction,您可以加载任何数据结构(例如 Points),并且在您的客户端,您可以获得一个可以轻松访问它的 javaScript 数据结构(point.x)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 2011-06-14
      相关资源
      最近更新 更多