2012-02-15 50 views
14

由於Vaadin是一個Java Web應用程序框架,因此可以在Vaadin Java代碼中插入jQuery JavaScript片段嗎?Vaadin框架內部可以使用jQuery嗎?

+1

我不明白爲什麼不,但我不明白爲什麼你會想...當然,框架允許分離的視圖和控制器? – bdares 2012-02-16 00:01:03

+0

該框架提供了使用本地js代碼的自定義組件。然而,當我嘗試了一些複雜的js代碼時,可能沒有任何事情發生。這就是爲什麼我問這樣的問題。 – Kyleinincubator 2012-02-27 05:14:18

回答

9

是的。

創建自己的ApplicationServlet擴展類是這樣的:

public class MyApplicationServlet extends ApplicationServlet { 

    @Override 
    protected void writeAjaxPageHtmlVaadinScripts(Window window, 
      String themeName, Application application, BufferedWriter page, 
      String appUrl, String themeUri, String appId, 
      HttpServletRequest request) throws ServletException, IOException { 

     page.write("<script type=\"text/javascript\">\n"); 
     page.write("//<![CDATA[\n"); 
     page.write("document.write(\"<script language='javascript' src='./jquery/jquery-1.4.4.min.js'><\\/script>\");\n"); 
     page.write("//]]>\n</script>\n"); 

     super.writeAjaxPageHtmlVaadinScripts(window, themeName, application, 
      page, appUrl, themeUri, appId, request); 
    } 
} 

,然後更換Vaadin的servlet在web.xml(默認爲com.vaadin.terminal.gwt.server.ApplicationServlet):

<servlet-class>com.example.MyApplicationServlet</servlet-class> 

然後,您可以讓jQuery的電話在您的代碼通過電話:

MyApplication.getMainWindow().executeJavascript(jQueryString); 
+0

正如我試過的,這行代碼:MyApplication.getMainWindow()。executeJavascript(jQueryString);可能只適用於一些簡單的JavaScript代碼。它似乎不太適合支持更復雜的js代碼。 – Kyleinincubator 2012-02-16 20:59:38

+0

我不太瞭解jQuery,但至少在我的Vaadin應用程序中它由Invient圖表(基於Highcharts)使用。如果你在一個js文件中聲明你的jQuery東西,將它放在頁面頭文件(如jQuery.js)中並用executeJavascript調用你的函數,它會對你有用嗎?此外,你檢查(w/firebug或類似的)jQuery庫已成功加載? – miq 2012-02-17 07:10:15

+1

此外,請查看此示例:http://vaadinjquery.appspot.com/ – miq 2012-02-17 07:29:41

3

另一個習慣mizing爲ApplicationServlet:

public class VaadinApplicationServlet extends ApplicationServlet { 

    @Override 
    protected void writeAjaxPageHtmlHeader(BufferedWriter page, String title, String themeUri, HttpServletRequest request) throws IOException { 
     page.write("<script language='javascript' src='http://code.jquery.com/jquery-1.8.0.min.js'></script>"); 
     super.writeAjaxPageHtmlHeader(page, title, themeUri, request); 
    } 

} 
5

您可以使用@JavaScript和@StyleSheet註釋

@StyleSheet({ 
       /* 
       * JQuery UI 
       */ 
       "vaadin://jquery/jquery-ui-1.9.2.custom/css/ui-darkness/jquery-ui-1.9.2.custom.min.css", 
}) 

@JavaScript({ 
       /* 
       * JQuery 
       */ 
       "vaadin://jquery/jquery-1.11.1.min.js", 

       /* 
       * JQuery UI 
       */ 
       "vaadin://jquery/jquery-ui-1.9.2.custom/js/jquery-ui-1.9.2.custom.min.js", 
}) 

public class MyUI extends UI { 
... 
} 

執行:

JavaScript.getCurrent().execute("...javascript code here...") 

小心較大的腳本。通過vaadin註釋添加javascript的性能非常差。更好地手動將腳本注入到html頭文件中。

+0

這些文件(例如'/ jquery/...')在哪裏?項目中的哪個文件夾? – luckydonald 2016-06-11 12:33:49

+0

文件進入可通過「vaadin://」url訪問的應用程序的「VAADIN」文件夾 – d2k2 2016-06-13 08:20:05

相關問題