基本上你是对的,而且大部分都是你自己回答的问题。
在 Vaadin 中,用户界面组件由两部分组成:
- 使用 JDK 编译的服务器端“组件”
- 使用 GWT 编译的客户端“小部件”
这些部分通过 HTTP 相互通信,并根据需要自动同步它们的状态。服务器端部分维护用户界面组件的状态,客户端小部件呈现该状态。
应用程序开发人员通常只使用服务器端组件来构建应用程序,他们并不真正需要关心客户端的工作方式。
一般来说,可以通过两种方式开发 Vaadin 的新组件:
- 组合现有组件
- 使用 GWT/JavaScript(+ 其他客户端技术)创建新的小部件
这里的第一种方法使用现有的类,不需要使用 GWT 重新编译小部件。仅编译应用程序代码(使用 JDK 编译器)。但是,在第二种情况下,客户端类发生了变化,需要重新编译。这是需要 GWT 编译器的时候。
由于 GWT 编译的 JavaScript 具有相当单一的性质(不管 GWT 的新代码拆分功能如何,命名空间都是全局的)Vaadin 使用小部件集的概念。那是一个 GWT 模块,其中包含应用程序所需的所有小部件。这意味着向应用程序添加新的(客户端)小部件需要重新编译 GWT。在删除小部件以优化小部件集大小时,重新编译小部件集也是一个很好的做法。
GWT 编译步骤本身并没有什么特别之处。但是,Vaadin 本身包含许多对小部件应用和使用的 GWT 类的添加、帮助程序和解决方法。
在使用 Vaadin 附加组件时,所有这些都非常明显(请参阅http://vaadin.com/directory)。即使附加组件也只是 jar 文件,如果它们包含新的客户端小部件代码,则在将它们添加到项目时需要使用 GWT 编译小部件集。