2010-03-03 64 views
1

我有以下要求:基於某些用戶輸入,我需要生成一個HTML表單,用戶可以將它嵌入到單獨的Web應用程序中。因爲我熟悉GWT,所以我想這麼做。在不同的網頁中包含一個動態創建的GWT小部件

我很清楚輸入解析和構件生成部分。我不知道如何做的是如何導出根窗口小部件(最可能是面板)編譯的代碼,以便用戶可以獲取代碼並將其包含在其他頁面中。

喜歡的東西:

String rootPanelCode = rootPanel.exportCode(); 
Dialog codeDialog = new DialogBox(); 
codeDialog.setText(rootPanelCode); 

然後用戶拷貝一些HTML文件中顯示的代碼:

<script type="text/javascript" language="javascript"> 
    //copied code goes here 
</script> 

需要在HTML文件中的特定<div id="required_id" />是沒有問題的。或者,也許JavaScript代碼是不夠的,並且用戶需要下載帶有js和html文件的zip文件,將它們複製到一個目錄並在頁面中引用它們。這再次不是問題。

我的用例可能與GWT?

在此先感謝。

回答

1

我想說...不:)主要是因爲當一個GWT應用程序啓動時,它首先運行引導文件,然後選擇當前瀏覽器的特定排列。所以你得到的代碼可能會包含一些不適用於所有瀏覽器的東西。這可能旁邊通過提供某種「輕量級」boostrap文件/方法下載,但我懷疑這將工作。例如,當可能的字符串出於性能原因被放入變量時,您獲得的JS代碼會得到大量優化(並且使用GWT 2.0,JS文件包含JS,CSS甚至圖像),但這些變量通常是分組在一起並放在編譯後的JS文件中的一個位置,所以即使您可以以某種方式獲取創建表單的代碼,它也可以包含對某些未定義變量的引用。換句話說,編譯的代碼是作爲一個整體來使用的。

一個更「優雅」的解決方案(更重要的是,GWT是可行的))是將表單導出爲某種抽象形式/語言,也許是JSON,以便您可以輕鬆地在其他語言中解析/重新創建它Web應用程序:

{ 
    "form1": [ 
     { "label1": "value1" }, 
     { "label2": "value2" } 
    ] 
} 

嗯,我只是想,可能黑客。隨着使用權的code splitting可能有可能單獨負責創建窗體的代碼 - 而這將使它也許更容易「出口」,它不是一個完整的解決方案離子(我不會推薦它..只是一個有趣的/可能的黑客)。

+0

感謝您的洞察力。我不希望陷入複雜的黑客行爲,但JSON的想法看起來很有希望。我只是想確定GWT中是否有任何東西能夠讓我直接做到這一點。 – Cesar 2010-03-04 00:03:08