某些Vaadin插件(如Invient Charts(https://vaadin.com/directory#addon/invient-charts))需要包含JavaScript庫才能運行。如何將javascript注入Vaadin以支持插件
如何在不需要爲Vaadin應用程序創建自定義Servlet的情況下完成此任務?
某些Vaadin插件(如Invient Charts(https://vaadin.com/directory#addon/invient-charts))需要包含JavaScript庫才能運行。如何將javascript注入Vaadin以支持插件
如何在不需要爲Vaadin應用程序創建自定義Servlet的情況下完成此任務?
使用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
}
.
.
.
沒有擴展點將自定義資源添加到頁頭。
無論如何,你可以添加一個內容模式爲CONTENT_RAW的標籤和任何自定義內容,比如JS/CSS。如果需要,您可以添加內容到頭部
document.getElementsByTagName("head")[0].appendChild()
。
在Vaadin 6,你有兩個選擇:
你已經提到的選項:延長Vaadin的servlet
包含的文件到您的編譯視窗元件:
創建directy在包含.gwt.xml文件和客戶端目錄的文件夾下調用public。將您想要包含的文件複製到您的widgetset中。這些文件很可能是js和css文件,也可能是一些圖片。此directy下的所有文件將被複制到編譯的widgetset。
如果你想,一個js文件包含到您的Vaadin應用程序,以下行添加到.gwt.xml文件(SRC是相對於公衆文件夾):
<script src="jquery/jquery.js" />
第二種選擇是一個有趣的想法。雖然我沒有嘗試過。第一個選擇是沒有吸引力的,因爲我使用xsbt web插件測試Vaadin應用程序作爲servlet運行,但計劃部署爲portlet,並且不希望自定義兩個版本(或者如果可以的話)避免)。 –