从vaadin中的java类调用javascript函数
我试图从vaadin项目中的java类调用javascript函数。在过去,我使用了一个RPC调用来实现这一点,但这次我只需要调用一个js函数,我想我可以用从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
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替换了相对URLhttp://localhost:8080/vaadinPopup/VAADIN/js/script.js
但我仍然在控制台中遇到同样的错误…真的不明白为什么