2012-02-15 11 views
14

VaadinはJava Webアプリケーションフレームワークなので、Vaadin JavaコードにjQuery javascriptスニペットを挿入することは可能ですか?Vaadinフレームワークの中でjQueryを使用することはできますか?

+1

私はなぜそうではありませんが、私はあなたが望む理由がわかりません...確かにフレームワークは分離されたビューとコントローラを可能にしますか? – bdares

+0

フレームワークは、ネイティブjsコードを使用するカスタムコンポーネントを提供します。しかし、私はいくつかの複雑なjsコードを試していたが、おそらく何も起こっていない。だから私はそのような質問をしました。 – Kyleinincubator

答えて

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); 
    } 
} 

その後、あなたのweb.xmlでVaadinサーブレットを交換する(デフォルトは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

+0

私はjQueryについてよく分かりませんが、少なくとも私のVaadinアプリケーションでは、Invittedチャート(Highchartsに基づいています)で使用されています。 jsファイルでjQueryを宣言し、jQuery.jsのようなページヘッダーに配置し、executeJavascriptで関数を呼び出した場合、それはうまくいくでしょうか?さらに、jQueryライブラリが正常に読み込まれたことを確認しましたか? – miq

+1

また、次の例もチェックしてください。http://vaadinjquery.appspot.com/ – miq

3

もう1つのcusto ApplicationServletためmizing:

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

+0

ファイルは "vaadin://" URLでアクセスできるアプリケーションの "VAADIN"フォルダに入ります – d2k2

関連する問題