2012-10-11 16 views

回答

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

注意,JavaScript文件被打開的InputStreams必須在類路徑。要使用SBT執行此操作,請在src/main目錄下創建一個資源目錄,並將/ js目錄和.js文件放入其中。這些將在war文件構建時放入WEB-INF/classes目錄中。當你使用container:xsbt web插件啓動它們時,它們也會出現在classpath中,所以相同的代碼允許在製作.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 
    } 
. 
. 
. 
1

沒有擴展點將自定義資源添加到頁頭。

無論如何,你可以添加一個內容模式爲CONTENT_RAW的標籤和任何自定義內容,比如JS/CSS。如果需要,您可以添加內容到頭部

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

0

在Vaadin 6,你有兩個選擇:

  1. 你已經提到的選項:延長Vaadin的servlet

  2. 包含的文件到您的編譯視窗元件:

創建directy在包含.gwt.xml文件和客戶端目錄的文件夾下調用public。將您想要包含的文件複製到您的widgetset中。這些文件很可能是js和css文件,也可能是一些圖片。此directy下的所有文件將被複制到編譯的widgetset。

如果你想,一個js文件包含到您的Vaadin應用程序,以下行添加到.gwt.xml文件(SRC是相對於公衆文件夾):

<script src="jquery/jquery.js" /> 
+0

第二種選擇是一個有趣的想法。雖然我沒有嘗試過。第一個選擇是沒有吸引力的,因爲我使用xsbt web插件測試Vaadin應用程序作爲servlet運行,但計劃部署爲portlet,並且不希望自定義兩個版本(或者如果可以的話)避免)。 –