2016-07-22 58 views
1

我想從一個vaadin項目中的java類調用一個javascript函數。在過去,我使用RPC調用來做到這一點,但是這一次它只是一個我需要調用的js函數,而且我認爲我可以用類似JavaScript.getCurrent().execute("test()"); 的方法做到這一點。所以我有一個vaadin項目和這裏就是我想從調用該函數的類:從vaadin中的java類調用一個javascript函數

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函數,我似乎隨時都會出現錯誤。任何想法?

+0

'因爲我似乎總是有一個錯誤'照顧與我們分享這個錯誤? –

+0

當然,我應該直截了當地道歉。這個錯誤實際上並非在java中,而是我在瀏覽器中得到的。我在構造函數中添加了這個調用:public void UploaderComponent(){ \t \t JavaScript.getCurrent()。execute(「test()」); \t \t formLayout.addStyleName(「myLayout」);' 因爲我不知道在哪裏添加它的說實話。無論如何,我認爲瀏覽器期待一個RPC調用,這裏是[鉻控制檯](http://pastebin.com/mFDLhduJ)中的錯誤(我必須使用pastebin,因爲它相當長) – antobbo

回答

2

您的電話JavaScript.getCurrent().execute("test()");是正確的,只要方法test()被正確聲明(顯然不是這種情況)。

假設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文件時在控制檯中收到警告。

+0

謝謝。那麼我把js放在這個文件夾的路徑是這樣的:(順便說一下,這是一個maven項目,而不是像我之前說過的那樣是一個vaadin項目,對不起) 'src/main/webapp/VAADIN/js/script.js'(我已經在另一個項目中使用過這個結構,並且工作正常)。至於腳本的內容,這裏是: '功能測試(){ \t console.log(「test()inside script.js called」); }' – antobbo

+0

在你的Chrome控制檯中,在網絡標籤下,你是否看到這個'script.js'文件被正確下載? – geert3

+0

不,這實際上是一個好點,它不在那 – antobbo