Về cơ bản bạn có quyền, và chủ yếu là tự trả lời câu hỏi.
Trong Vaadin các thành phần giao diện người dùng bao gồm hai phần:
- Server-side "thành phần" biên soạn sử dụng JDK
- Client-side "phụ tùng" biên soạn sử dụng GWT
Những bộ phận giao tiếp với nhau qua HTTP và tự động đồng bộ hóa trạng thái của họ khi cần. Phần phía máy chủ duy trì trạng thái của thành phần giao diện người dùng và tiện ích phía máy khách hiển thị trạng thái đó.
Nhà phát triển ứng dụng thường chỉ sử dụng các thành phần phía máy chủ để xây dựng ứng dụng và họ không thực sự phải quan tâm đến cách hoạt động của phía máy khách.
Nói chung, các thành phần mới để Vaadin thể được phát triển theo hai cách:
- Soạn thành phần hiện có
- Tạo một widget mới với GWT/JavaScript (+ khác client-side công nghệ)
Phương pháp đầu tiên ở đây sử dụng các lớp hiện có và không cần biên dịch lại các widget với GWT. Chỉ có mã ứng dụng được biên dịch (với trình biên dịch JDK). Tuy nhiên, trong kịch bản thứ hai, các lớp phía máy khách thay đổi và cần biên dịch lại. Đây là khi trình biên dịch GWT là cần thiết.
Do tính chất nguyên khối của JavaScript được biên dịch GWT (bất kể tính năng tách mã mới của GWT không gian tên là toàn cục) Vaadin sử dụng khái niệm bộ tiện ích. Đó là một mô-đun GWT chứa tất cả các tiện ích cần thiết trong ứng dụng. Điều đó có nghĩa là việc thêm các widget (phía máy khách) mới vào một ứng dụng cần phải biên dịch lại GWT. Nó cũng là một thực hành tốt để biên dịch lại bộ widget khi loại bỏ các widget để tối ưu hóa kích thước thiết lập widget.
Chính bước biên dịch GWT không có gì đặc biệt. Tuy nhiên, bản thân Vaadin chứa rất nhiều bổ sung, trợ giúp và giải pháp cho các lớp GWT được áp dụng và sử dụng bởi các widget.
Tất cả điều này là khá rõ ràng khi sử dụng tiện ích bổ sung của Vaadin (xem http://vaadin.com/directory).Ngay cả phần bổ sung cũng chỉ đơn giản là các tệp jar, nếu chúng chứa một mã widget phía máy khách mới, thì việc biên dịch tập hợp widget bằng cách sử dụng GWT là cần thiết, khi chúng được thêm vào một dự án.