如何执行自定义Javascript Vaadin

如何执行自定义Javascript Vaadin,javascript,java,vaadin,Javascript,Java,Vaadin,我正在构建一个Vaadin应用程序,需要使用PropaleJS进行一些地图可视化。我已经创建了必要的Javascript函数和Java类,或者至少我认为我已经创建了,但是当我在服务器上运行我的程序时,它没有显示出来。你知道为什么会这样吗 以下是我的Javascript代码: window.com_vaadin_demo_dashboard_component_MyMap = function() { var peaElement = this.getElement(); var

我正在构建一个Vaadin应用程序,需要使用PropaleJS进行一些地图可视化。我已经创建了必要的Javascript函数和Java类,或者至少我认为我已经创建了,但是当我在服务器上运行我的程序时,它没有显示出来。你知道为什么会这样吗

以下是我的Javascript代码:

window.com_vaadin_demo_dashboard_component_MyMap = function() {
    var peaElement = this.getElement();
    var mapboxAccessToken = pk.eyJ1Ijoibmlja2VtbW9ucyIsImEiOiJjaWY2cm45aG0wb285c3VrdGI1YXNzc2Y5In0.aDSzTBUN58FCUpsr-VvH4Q;
    var map = L.map('map').setView([37.8, -96], 4);
    var geojson;
    L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=' + mapboxAccessToken, {
        id: 'mapbox.light'}).addTo(map);

    function getColor(d) {
        return d > 1000 ? '#800026' :
               d > 500  ? '#BD0026' :
               d > 200  ? '#E31A1C' :
               d > 100  ? '#FC4E2A' :
               d > 50   ? '#FD8D3C' :
               d > 20   ? '#FEB24C' :
               d > 10   ? '#FED976' :
                          '#FFEDA0';
    }

    function style(feature) {
        return {
            fillColor: getColor(feature.properties.density),
            weight: 2,
            opacity: 1,
            color: 'white',
            dashArray: '3',
            fillOpacity: 0.7
        };
    }

    function highlightFeature(e) {
        var layer = e.target;

        layer.setStyle({
            weight: 5,
            color: '#666',
            dashArray: '',
            fillOpacity: 0.7
        });

        if (!L.Browser.ie && !L.Browser.opera) {
            layer.bringToFront();
        }
    }

    function resetHighlight(e) {
        geojson.resetStyle(e.target);
    }

    function zoomToFeature(e) {
        map.fitBounds(e.target.getBounds());
    }

    function onEachFeature(feature, layer) {
        layer.on({
            mouseover: highlightFeature,
            mouseout: resetHighlight,
            click: zoomToFeature
        });
    }

    geojson = L.geoJson(peas, {
        style: style,
        onEachFeature: onEachFeature
    }).addTo(map);
}
下面是我扩展AbstractJavaScriptComponent的Java类:

package com.vaadin.demo.dashboard.component;

import com.vaadin.annotations.*;
import com.vaadin.ui.AbstractJavaScriptComponent;

@JavaScript({"http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.js", "pea_map.js"})
@StyleSheet({"http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.css"})
public class PeaMap extends AbstractJavaScriptComponent {

    public void setId(final Integer id) {
        getState().setId(id);
    }

    public void setName(final String name) {
        getState().setName(name);
    }

    public void setPopulation(final Integer population) {
        getState().setPopulation(population);
    }

    @Override
    public MyMapState getState() {
        return (MyMapState) super.getState();
    }

}
下面是我的Java类,它跟踪状态:

package com.vaadin.demo.dashboard.component;

import com.vaadin.shared.ui.JavaScriptComponentState;

public class MyMapState extends JavaScriptComponentState {

    private Integer id;
    private String name;
    private Integer population;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getPopulation() {
        return population;
    }
    public void setPopulation(Integer population) {
        this.population = population;
    }



}
这是它所绑定的组件:

package com.vaadin.demo.dashboard.component;

import com.vaadin.demo.dashboard.component.PeaMap;
import com.vaadin.ui.*;
import com.vaadin.server.Page;


public class MyMapUI extends CustomComponent {

    final MyMap mymap = new MyMap();
    final VerticalLayout layout = new VerticalLayout();

    public void MyMap(){


            Page.getCurrent().getJavaScript().execute("com_vaadin_demo_dashboard_component_MyMap()");

            //now we build the layout.
            layout.setSpacing(true);
            layout.addComponent(mymap);
        }
}

然后,它应该被添加到我的项目的一个页面上的面板中,但它没有显示出来

pea_map.js命令来自哪里?URL是否正确?不显示可能是任何内容。如果有错误,是否查看了浏览器devconsole?是否已尝试使用?调试运行以获得更好的错误通知?另外,不需要在MyAppUI.MyApp中手动调用javascript组件的命令