1

Invient Charts(https://vaadin.com/directory#addon/invient-charts)などの特定のVaadinアドオンを操作するには、javascriptライブラリを含める必要があります。

Vaadinアプリケーション用のカスタムサーブレットを作成せずにこれを行うにはどうすればよいですか?

4

3 に答える 3

1

ScaladinアドオンとScala言語を使用して、これはアプリケーションのinit()メソッドの次のコードによって実現されます。

override def init() {
  super.init()

  // bring in javascript needed for addons
  val jqsrc = io.Source.fromInputStream(getClass.getResourceAsStream("/js/jquery-1.4.4.min.js"))
  val hcsrc = io.Source.fromInputStream(getClass.getResourceAsStream("/js/highcharts.js"))
  val xpsrc = io.Source.fromInputStream(getClass.getResourceAsStream("/js/modules/exporting.js"))
  mainWindow.executeJavaScript((jqsrc ++ hcsrc ++ xpsrc).mkString)
  jqsrc.close(); hcsrc.close(); xpsrc.close() }

InputStreamsとして開かれるjavascriptファイルは、クラスパスに含まれている必要があることに注意してください。SBTを使用してこれを行うには、src / main dirの下にresourcesディレクトリを作成し、その中に/jsdirと.jsファイルを配置します。これらは、warファイルがビルドされるときにWEB-INF/classesディレクトリに配置されます。これらは、xsbt Webプラグインからcontainer:startを使用するときにもクラスパスに表示されるため、同じコードで.warファイルを作成する前にテストできます。

このアプローチは、Scalaがなくても(ただし、より多くのJavaコードを使用して)機能するはずですが、それはどのような楽しみでしょうか?

より効率的な方法は、JavaScriptコードをオブジェクトに保持されている文字列にロードして、次の場所で繰り返し読み取る必要がないようにすることです。

object Script {
  val js = Seq("/js/jquery-1.4.4.min.js", "/js/highcharts.js", "/js/modules/exporting.js") map { f =>
    val in = io.Source.fromInputStream(getClass.getResourceAsStream(f))
    val s = in.mkString
    in.close()
    s
  }
}

次に、Vaadinアプリケーションで:

class MyApp extends Application(title = "My App", applicationTheme = "reindeer")  {
  override def init() {
    super.init()

    // bring in javascript needed for addons
    Script.js foreach mainWindow.executeJavaScript
  }
.
.
.
于 2012-10-11T19:53:47.777 に答える
1

ページヘッドにカスタムリソースを追加するための拡張ポイントはありません。

とにかくそれを行うには、コンテンツモードCONTENT_RAWのラベルとJS/CSSのようなカスタムコンテンツをそこに追加できます。必要に応じて、頭にコンテンツを追加できます

document.getElementsByTagName("head")[0].appendChild()

于 2012-10-11T23:59:42.937 に答える
0

Vaadin 6には、次の2つのオプションがあります。

  1. すでに述べたオプション:Vaadinサーブレットを拡張する

  2. コンパイルしたウィジェットセットにファイルを含めます。

.gwt.xmlファイルとクライアントディレクトリを含むフォルダの下にpublicというディレクトリを作成します。ここにウィジェットセットに含めるファイルをコピーします。ほとんどの場合、これらのファイルはjsファイルとcssファイル、そしておそらくいくつかの写真です。このダイレクトの下にあるすべてのファイルは、コンパイルされたウィジェットセットにコピーされます。

また、jsファイルをVaadinアプリに含める場合は、.gwt.xmlファイルに次の行を追加します(srcはパブリックフォルダーを基準にしています)。

<script src="jquery/jquery.js" />
于 2012-10-12T07:06:41.117 に答える