在不同的Web页面中包含动态创建的GWT窗口小部件

时间:2010-03-03 22:09:17

标签: java javascript serialization gwt

我有以下要求:基于一些用户输入,我需要生成一个HTML表单,用户可以将其嵌入到单独的Web应用程序中。因为我熟悉它,所以我想用GWT做这件事。

我很清楚输入解析和小部件生成部分。我不知道该怎么做是如何导出根小部件(很可能是Panel)编译的代码,因此用户可以获取代码并将其包含在其他页面中。

类似的东西:

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 个答案:

答案 0 :(得分:1)

我会说......不:)主要是因为当启动GWT应用程序时,它首先运行引导程序文件,然后选择当前浏览器的特定排列。因此,您获得的代码可能包含一些在所有浏览器中都不起作用的内容。这个可能通过提供某种“轻量级”的boostrap文件/方法来下载,但我怀疑它会起作用。

此外,您获得的JS代码经过了大量优化(并且使用GWT 2.0,JS文件包含JS,CSS甚至图像),例如,当出于性能原因将可能的字符串放入变量时 - 但这些变量通常是分组的在编译的JS文件中放在一起,所以即使你能以某种方式获得创建表单的代码,它也可能包含对一些未定义变量的引用。换句话说,编译后的代码应该作为一个整体使用。

更“优雅”的解决方案(更重要的是,GWT可行;))是将表单导出为某种抽象形式/语言,也许是JSON,以便您可以在其他Web上轻松地解析/重新创建它应用程式:

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

嗯,我只是想到了一个可能的黑客..正确使用code splitting可能可以分离负责表单创建的代码 - 但这会使它成为可能也许更容易“导出”,它不是一个完整的解决方案(我不推荐它......只是一个有趣/可能的黑客攻击)。