从vaadin中的java类调用javascript函数

从vaadin中的java类调用javascript函数,javascript,java,vaadin,vaadin7,Javascript,Java,Vaadin,Vaadin7,我试图从vaadin项目中的java类调用javascript函数。在过去,我使用了一个RPC调用来实现这一点,但这次我只需要调用一个js函数,我想我可以用JavaScript.getCurrent().execute(“test()”)这样的东西来实现 我有一个vaadin项目,下面是我想从中调用该函数的类: package my.vaadin.project.vaadinUploader; import com.vaadin.annotations.JavaScript; import

我试图从vaadin项目中的java类调用javascript函数。在过去,我使用了一个RPC调用来实现这一点,但这次我只需要调用一个js函数,我想我可以用
JavaScript.getCurrent().execute(“test()”)这样的东西来实现
我有一个vaadin项目,下面是我想从中调用该函数的类:

package my.vaadin.project.vaadinUploader;



import com.vaadin.annotations.JavaScript;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

@JavaScript({ "https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js", "vaadin://js/script.js" })

public class UploaderComponent extends CustomComponent
{
    final TextField name;
    final TextField surname;
    //final Label div;
    final VerticalLayout formLayout = new VerticalLayout();

    public UploaderComponent(){

        formLayout.addStyleName("myLayout");
        //div = new Label();


        name = new TextField();
        surname = new TextField();
        name.setCaption("Type your name here:");
        surname.setCaption("Type your surname here:");
        formLayout.addComponents(name, surname);

    }


}

该脚本驻留在一个自定义文件夹中,但我不确定在哪里可以调用该js函数,因为我似乎一直在收到错误。有什么想法吗?

你的调用
JavaScript.getCurrent().execute(“test()”)test()
(显然不是这样),则code>是正确的

假设
script.js
源代码包含
test()
函数的声明,则很可能您将
script.js
放错了位置

使用
vaadin://
前缀,您的文件应该相对于
src/main/webapps/vaadin
目录,因此在您的情况下
src/main/webapps/vaadin/js/script.js

如果您省略了
vaadin://
前缀(即
@JavaScript(“script.js”)
),并且您正在使用Maven,那么文件的正确位置是
src/main/resources/
,然后是java源代码所在的包结构。所以在您的例子中,
src/main/resources/my/vaadin/project/vaadinUploader/script.js


另外请注意,当访问无法定位的
@Javascript
文件时,您会在控制台中收到警告。

因为我似乎一直在收到错误
是否愿意与我们分享该错误?当然,很抱歉,我应该立即这样做。这个错误实际上不是java中的,但我在浏览器中看到了。我在构造函数中添加了调用:
public UploaderComponent(){JavaScript.getCurrent().execute(“test()”);formLayout.addStyleName(“myLayout”);
,因为老实说,我不知道在哪里添加它。无论如何,我估计浏览器需要一个RPC调用,下面是其中的错误(我不得不使用pastebin,因为它很长)谢谢。我放置js的文件夹路径如下:(顺便说一句,这是一个maven项目,而不是我在开始时说的vaadin项目,对不起)
src/main/webapp/vaadin/js/script.js
(我在另一个项目中使用了这个结构,它工作正常)。至于脚本的内容,这里是:
function test(){console.log(“script.js中的test()称为“;}”
在你的chrome控制台的“网络”选项卡下,你看到这个
script.js
文件被正确下载了吗?谢谢。不过有几件事。我知道“正确”的位置,但我的理解是使用
vaadin://js/script.js
允许您将脚本放入自定义文件夹中,如
src/main/VAADIN/js
而不是“正确的”一个。我见过大型maaven项目,js文件以这种方式排列,并且只有js连接器处理RPC调用在“正确”的位置,这就是为什么我这样做的原因。你完全正确。只有我用
VAADIN:
进行的测试似乎出于某种原因不起作用。我刚刚意识到这一点,我忘了
/
。因此,再次使用
vaadin://
进行测试,效果很好(再次编辑答案)。所以基本上你的设置是正常的。你肯定会看到你的
script.js
正在chrome网络选项卡中下载-但一定要禁用缓存。很高兴你能让它工作,因为我的设置仍然没有,但很高兴知道我的设置是正确的,而且我做的一切都是正确的,我清除了缓存并尝试了两种不同的方法nt机器,但那个该死的文件仍然没有出现在源代码下…我仍然在浏览器中得到警告。作为测试,我用绝对URL替换了相对URL
http://localhost:8080/vaadinPopup/VAADIN/js/script.js
但我仍然在控制台中遇到同样的错误…真的不明白为什么