2012-11-08

Abstract

Vaadin is a server-side AJAX web application development framework that enables developers to build high-quality user interfaces with Java. It provides a library of ready-to-use user interface components and a clean framework for creating your own components. The focus is on ease-of-use, re-usability, extensibility, and meeting the requirements of large enterprise applications. Vaadin has been used in production since 2001 and it has proven to be suitable for building demanding business applications.


Table of Contents

Preface
I. Vaadin Core Framework
1. Introduction
1.1. Overview
1.2. Example Application Walkthrough
1.3. Support for the Eclipse IDE
1.4. Goals and Philosophy
1.5. Background
2. Getting Started with Vaadin
2.1. Setting up the Development Environment
2.1.1. Installing Java SDK
2.1.2. Installing Eclipse IDE
2.1.3. Installing Apache Tomcat
2.1.4. Firefox and Firebug
2.2. Installing Vaadin
2.2.1. Vaadin Plugin for Eclipse
2.2.2. Installing the JAR Package
2.3. Your First Project with Vaadin
2.3.1. Creating the Project
2.3.2. Exploring the Project
2.3.3. Setting Up and Starting the Web Server
2.3.4. Running and Debugging
2.4. Creating a Project with NetBeans
2.4.1. Regular Web Application Project
2.4.2. Maven Project from Vaadin Archetype
2.5. Creating a Project with Maven
3. Architecture
3.1. Overview
3.2. Technological Background
3.2.1. AJAX
3.2.2. Google Web Toolkit
3.2.3. JSON
3.3. Applications as Java Servlet Sessions
3.4. Client-Side Engine
3.5. Events and Listeners
4. Writing a Web Application
4.1. Overview
4.2. Managing the Main Window
4.3. Sub-Windows
4.3.1. Opening and Closing a Sub-Window
4.3.2. Window Positioning
4.3.3. Scrolling Sub-Window Content
4.3.4. Modal Windows
4.4. Handling Events with Listeners
4.5. Referencing Resources
4.5.1. Resource Interfaces and Classes
4.5.2. File Resources
4.5.3. Class Loader Resources
4.5.4. Theme Resources
4.5.5. Stream Resources
4.6. Shutting Down an Application
4.6.1. Closing an Application
4.6.2. Handling the Closing of a Window
4.7. Handling Errors
4.7.1. Error Indicator and message
4.7.2. Notifications
4.7.3. Customizing System Messages
4.7.4. Handling Uncaught Exceptions
4.8. Setting Up the Application Environment
4.8.1. Creating Deployable WAR in Eclipse
4.8.2. Web Application Contents
4.8.3. Deployment Descriptor web.xml
5. User Interface Components
5.1. Overview
5.2. Interfaces and Abstractions
5.2.1. Component Interface
5.2.2. AbstractComponent
5.2.3. Field Components (Field and AbstractField)
5.3. Common Component Features
5.3.1. Caption
5.3.2. Description and Tooltips
5.3.3. Enabled
5.3.4. Icon
5.3.5. Locale
5.3.6. Read-Only
5.3.7. Style Name
5.3.8. Visible
5.3.9. Sizing Components
5.3.10. Managing Input Focus
5.4. Label
5.4.1. Content Mode
5.4.2. Making Use of the XHTML Mode
5.4.3. Spacing with a Label
5.4.4. CSS Style Rules
5.5. Link
5.6. TextField
5.6.1. Data Binding
5.6.2. String Length
5.6.3. Handling Null Values
5.6.4. Text Change Events
5.6.5. CSS Style Rules
5.7. TextArea
5.8. PasswordField
5.9. RichTextArea
5.10. Date and Time Input with DateField
5.10.1. PopupDateField
5.10.2. InlineDateField
5.10.3. Time Resolution
5.10.4. DateField Locale
5.11. Button
5.12. CheckBox
5.13. Selecting Items
5.13.1. Binding Selection Components to Data
5.13.2. Basic Select Component
5.13.3. ListSelect
5.13.4. Native Selection Component NativeSelect
5.13.5. Radio Button and Check Box Groups with OptionGroup
5.13.6. Twin Column Selection with TwinColSelect
5.13.7. Allowing Adding New Items
5.13.8. Multiple Selection Mode
5.13.9. Other Common Features
5.14. Table
5.14.1. Selecting Items in a Table
5.14.2. Table Features
5.14.3. Editing the Values in a Table
5.14.4. Column Headers and Footers
5.14.5. Generated Table Columns
5.14.6. Formatting Table Columns
5.14.7. CSS Style Rules
5.15. Tree
5.16. MenuBar
5.17. Embedded
5.17.1. Embedded Objects
5.17.2. Embedded Images
5.17.3. Browser Frames
5.18. Upload
5.19. Form
5.19.1. Form as a User Interface Component
5.19.2. Binding Form to Data
5.19.3. Validating Form Input
5.19.4. Buffering Form Data
5.20. ProgressIndicator
5.20.1. Doing Heavy Computation
5.21. Slider
5.22. LoginForm
5.22.1. Customizing LoginForm
5.23. Component Composition with CustomComponent
6. Managing Layout
6.1. Overview
6.2. Window and Panel Root Layout
6.3. VerticalLayout and HorizontalLayout
6.3.1. Sizing Contained Components
6.4. GridLayout
6.4.1. Sizing Grid Cells
6.5. FormLayout
6.6. Panel
6.6.1. Scrolling the Panel Content
6.7. HorizontalSplitPanel and VerticalSplitPanel
6.8. TabSheet
6.9. Accordion
6.10. AbsoluteLayout
6.11. CssLayout
6.12. Layout Formatting
6.12.1. Layout Size
6.12.2. Layout Cell Alignment
6.12.3. Layout Cell Spacing
6.12.4. Layout Margins
6.13. Custom Layouts
7. Visual User Interface Design with Eclipse
7.1. Overview
7.2. Creating a New Composite
7.3. Using The Visual Designer
7.3.1. Adding New Components
7.3.2. Setting Component Properties
7.3.3. Editing an AbsoluteLayout
7.4. Structure of a Visually Editable Component
7.4.1. Sub-Component References
7.4.2. Sub-Component Builders
7.4.3. The Constructor
8. Themes
8.1. Overview
8.2. Introduction to Cascading Style Sheets
8.2.1. Basic CSS Rules
8.2.2. Matching by Element Class
8.2.3. Matching by Descendant Relationship
8.2.4. Notes on Compatibility
8.3. Creating and Using Themes
8.3.1. Styling Standard Components
8.3.2. Built-in Themes
8.3.3. Using Themes
8.3.4. Theme Inheritance
8.4. Creating a Theme in Eclipse
9. Binding Components to Data
9.1. Overview
9.2. Properties
9.2.1. Property Viewers and Editors
9.2.2. ObjectProperty Implementation
9.2.3. Implementing the Property Interface
9.3. Holding properties in Items
9.3.1. The PropertysetItem Implementation
9.3.2. Wrapping a Bean in a BeanItem
9.4. Collecting Items in Containers
9.4.1. BeanContainer
9.4.2. BeanItemContainer
9.4.3. Iterating Over a Container
9.4.4. Filterable Containers
10. Vaadin SQLContainer
10.1. Architecture
10.2. Getting Started with SQLContainer
10.2.1. Creating a connection pool
10.2.2. Creating the TableQuery Query Delegate
10.2.3. Creating the Container
10.3. Filtering and Sorting
10.3.1. Filtering
10.3.2. Sorting
10.4. Editing
10.4.1. Adding items
10.4.2. Fetching generated row keys
10.4.3. Version column requirement
10.4.4. Auto-commit mode
10.4.5. Modified state
10.5. Caching, Paging and Refreshing
10.5.1. Container Size
10.5.2. Page Length and Cache Size
10.5.3. Refreshing the Container
10.5.4. Cache Flush Notification Mechanism
10.6. Referencing Another SQLContainer
10.7. Using FreeformQuery and FreeformStatementDelegate
10.8. Non-implemented methods of Vaadin container interfaces
10.9. Known Issues and Limitations
11. Developing New Components
11.1. Overview
11.2. Doing It the Simple Way in Eclipse
11.2.1. Creating a Widget
11.2.2. Recompiling the Widget Set
11.2.3. Plugin Related Project Settings
11.3. Google Web Toolkit Widgets
11.3.1. Extending a Vaadin Widget
11.3.2. Example: A Color Picker GWT Widget
11.3.3. Styling GWT Widgets
11.4. Integrating a GWT Widget
11.4.1. Deserialization of Component State from Server
11.4.2. Serialization of Component State to Server
11.4.3. Example: Integrating the Color Picker Widget
11.5. Defining a Widget Set
11.6. Server-Side Components
11.6.1. Binding to the Client-Side Widget
11.6.2. Server-Client Serialization
11.6.3. Client-Server Deserialization
11.6.4. Example: Color Picker Server-Side Component
11.7. Using a Custom Component
11.7.1. Example: Color Picker Application
11.7.2. Web Application Deployment
11.8. GWT Widget Development
11.8.1. Creating a Widget Project
11.8.2. Importing GWT Installation Package
11.8.3. Writing the Code
11.8.4. Compiling GWT Widget Sets
11.8.5. Ready to Run
11.8.6. GWT Development Mode
11.8.7. Packaging a Widget Set
11.8.8. Troubleshooting
12. Advanced Web Application Topics
12.1. Special Characteristics of AJAX Applications
12.2. Application-Level Windows
12.2.1. Creating New Application-Level Windows
12.2.2. Creation of Windows When Requested
12.2.3. Dynamic Multi-Window Applications
12.2.4. Closing Windows
12.2.5. Caveats in Using Multiple Windows
12.3. Embedding Applications in Web Pages
12.3.1. Embedding Inside a div Element
12.3.2. Embedding Inside an iframe Element
12.3.3. Cross-Site Embedding with the Vaadin XS Add-on
12.4. Debug and Production Mode
12.4.1. Debug Mode
12.4.2. Analyzing Layouts
12.4.3. Custom Layouts
12.4.4. Debug Functions for Component Developers
12.5. Resources
12.5.1. URI Handlers
12.5.2. Parameter Handlers
12.6. Shortcut Keys
12.6.1. Click Shortcuts for Default Buttons
12.6.2. Field Focus Shortcuts
12.6.3. Generic Shortcut Actions
12.6.4. Supported Key Codes and Modifier Keys
12.7. Printing
12.8. Google App Engine Integration
12.9. Common Security Issues
12.9.1. Sanitizing User Input to Prevent Cross-Site Scripting
12.10. URI Fragment and History Management with UriFragmentUtility
12.11. Capturing HTTP Requests
12.11.1. Using Request and Response Objects
12.11.2. Managing Cookies
12.12. Drag and Drop
12.12.1. Handling Drops
12.12.2. Dropping Items On a Tree
12.12.3. Dropping Items On a Table
12.12.4. Accepting Drops
12.12.5. Dragging Components
12.12.6. Dropping on a Component
12.12.7. Dragging Files from Outside the Browser
12.13. Logging
12.14. Accessing Session-Global Data
12.14.1. Passing References Around
12.14.2. Overriding attach()
12.14.3. ThreadLocal Pattern
13. Portal Integration
13.1. Deploying to a Portal
13.2. Creating a Portal Application Project in Eclipse
13.3. Portlet Deployment Descriptors
13.4. Portlet Hello World
13.5. Installing Vaadin in Liferay
13.6. Handling Portlet Requests
13.7. Handling Portlet Mode Changes
13.8. Non-Vaadin Portlet Modes
13.9. Vaadin Control Panel for Liferay
13.9.1. Installing
13.9.2. Using the Control Panel
13.10. Vaadin IPC for Liferay
13.10.1. Installing the Add-on
13.10.2. Basic Communication
13.10.3. Considerations
13.10.4. Communication Through Session Attributes
13.10.5. Serializing and Encoding Data
13.10.6. Communicating with Non-Vaadin Portlets
13.11. Remote Portlets with WSRP
13.11.1. Installing the Add-on
13.11.2. Configuring a Remote Portlet
13.11.3. Producer Configuration
13.11.4. Consumer Configuration
13.11.5. Advanced Configuration
14. Rapid Development Using Vaadin and Roo
14.1. Overview
14.2. Setting Up the Environment
14.2.1. Installing Spring Roo
14.2.2. Creating the Project
14.2.3. Installing Vaadin Plugin for Spring Roo
14.2.4. Setting up the Roo Data Layer
14.3. Creating the Domain Model
14.3.1. Domain Model Design
14.3.2. Creating the Model in Roo
14.4. Creating Vaadin Application and CRUD Views
14.4.1. Creating the Application Skeleton
14.4.2. Generating CRUD Views
14.4.3. Deploying to Development Server
14.5. Using Vaadin Add-ons in a Roo project
14.5.1. Installing Add-ons
14.5.2. Compiling the Widget Set
14.5.3. Configuring the Deployment Assembly
14.6. Customizing Views
14.6.1. Modifying Roo generated entity form
14.6.2. Creating a Calendar View for Filling Work Entries
14.6.3. Creating a Custom View for Reporting
14.7. Authentication and Authorization
14.7.1. Implementing Authentication and Authorization
14.8. Internationalization
14.9. Testing the Application
14.9.1. Overview of Testing
14.9.2. Running the Test Server
14.9.3. Installing TestBench with Maven
14.9.4. Generating JUnit Tests
14.9.5. Configuring System Properties
14.9.6. Notes
14.10. Exception Handling
14.10.1. Preventing Stacktraces in the UI
14.10.2. Where to Catch Exceptions
14.11. Deploying to Cloud Foundry
14.11.1. Installing the Cloud Foundry Plug-in in STS
14.11.2. Deploying the Application
14.11.3. Binding to the MySQL Service
II. Vaadin Add-ons
15. Using Vaadin Add-ons
15.1. Overview
15.2. Downloading Add-ons from Vaadin Directory
15.3. Compiling Add-on Widget Sets
15.3.1. Compiling Widget Sets in Eclipse
15.3.2. Compiling Widget Sets with an Ant Script
15.3.3. Troubleshooting
15.4. Removing Add-ons
15.5. Using Add-ons in a Maven Project
15.5.1. Adding a Dependency
15.5.2. Enabling Widget Set Compilation
15.5.3. Updating and Compiling the Project Widget Set
16. Vaadin Calendar
16.1. Overview
16.2. Installing Calendar
16.3. Basic Use
16.3.1. Setting the Date Range
16.3.2. Adding and Managing Events
16.3.3. Getting Events from a Container
16.4. Implementing an Event Provider
16.4.1. Custom Events
16.4.2. Implementing the Event Provider
16.5. Configuring the Appearance
16.5.1. Sizing
16.5.2. Styling
16.5.3. Visible Hours and Days
16.6. Drag and Drop
16.7. Using the Context Menu
16.8. Localization and Formatting
16.8.1. Setting the Locale and Time Zone
16.8.2. Time and Date Caption Format
16.9. Customizing the Calendar
16.9.1. Overview of Handlers
16.9.2. Creating a Calendar
16.9.3. Backward and Forward Navigation
16.9.4. Date Click Handling
16.9.5. Handling Week Clicks
16.9.6. Handling Event Clicks
16.9.7. Event Dragging
16.9.8. Handling Drag Selection
16.9.9. Resizing Events
17. Vaadin Timeline
17.1. Overview
17.2. Using Timeline
17.2.1. Data Source Requirements
17.2.2. Events and Listeners
17.2.3. Configurability
17.2.4. Localization
17.3. Code example
17.3.1. Prerequisites
17.3.2. Create the data sources
17.3.3. Create the Vaadin Timeline
17.3.4. Final Touches
18. Vaadin JPAContainer
18.1. Overview
18.2. Installing
18.2.1. Downloading the Package
18.2.2. Installation Package Content
18.2.3. Downloading with Maven
18.2.4. Including Libraries in Your Project
18.2.5. Persistence Configuration
18.2.6. Troubleshooting
18.3. Defining a Domain Model
18.3.1. Persistence Metadata
18.4. Basic Use of JPAContainer
18.4.1. Creating JPAContainer with JPAContainerFactory
18.4.2. Creating and Accessing Entities
18.4.3. Nested Properties
18.4.4. Hierarchical Container
18.5. Entity Providers
18.5.1. Built-In Entity Providers
18.5.2. Using JNDI Entity Providers in JEE6 Environment
18.5.3. Entity Providers as Enterprise Beans
18.6. Filtering JPAContainer
18.7. Querying with the Criteria API
18.7.1. Filtering the Query
18.7.2. Compatibility
18.8. Automatic Form Generation
18.8.1. Configuring the Field Factory
18.8.2. Using the Field Factory
18.8.3. Master-Detail Editor
18.9. Using JPAContainer with Hibernate
18.9.1. Lazy loading
18.9.2. The EntityManager-Per-Request pattern
18.9.3. Joins in Hibernate vs EclipseLink
19. Mobile Applications with TouchKit
19.1. Overview
19.2. Considerations Regarding Mobile Browsing
19.2.1. Mobile Human Interface
19.2.2. Bandwidth
19.2.3. Mobile Features
19.2.4. Compatibility
19.3. Creating a Project Targeting Multiple Devices
19.3.1. Using TouchKit Add-on in a Project
19.3.2. Application
19.4. Mobile User Interface Components
19.4.1. NavigationView
19.4.2. Toolbar
19.4.3. NavigationManager
19.4.4. NavigationButton
19.4.5. Popover
19.4.6. Switch
19.4.7. VerticalComponentGroup
19.4.8. HorizontalComponentGroup
19.4.9. TabBarView
19.4.10. EmailField
19.4.11. NumberField
19.4.12. UrlField
19.5. Mobile Features
19.5.1. Geolocation
19.6. Testing and Debugging on Mobile Devices
19.6.1. Debugging
20. Vaadin TestBench
20.1. Overview
20.2. Installing Vaadin TestBench
20.2.1. Test Development Installation
20.2.2. A Distributed Testing Environment
20.2.3. Downloading and Unpacking the Installation Package
20.2.4. Installation Package Contents
20.2.5. Example Contents
20.2.6. Installing the Recorder
20.2.7. Installing Browser Drivers
20.2.8. Test Node Configuration
20.3. Preparing an Application for Testing
20.4. Using Vaadin TestBench Recorder
20.4.1. Starting the Recorder
20.4.2. Recording
20.4.3. Selectors
20.4.4. Playing Back Tests
20.4.5. Editing Tests
20.4.6. Exporting Tests
20.4.7. Saving Tests
20.5. Developing JUnit Tests
20.5.1. Starting From a Stub
20.5.2. Finding Elements by Selectors
20.5.3. Running JUnit Tests in Eclipse
20.5.4. Executing Tests with Ant
20.5.5. Executing Tests with Maven
20.5.6. Test Setup
20.5.7. Creating and Closing a Web Driver
20.5.8. Basic Test Case Structure
20.5.9. Waiting for Vaadin
20.5.10. Testing Tooltips
20.5.11. Scrolling
20.5.12. Testing Notifications
20.5.13. Testing Context Menus
20.5.14. Profiling Test Execution Time
20.6. Taking and Comparing Screenshots
20.6.1. Screenshot Parameters
20.6.2. Taking Screenshots on Failure
20.6.3. Taking Screenshots for Comparison
20.6.4. Practices for Handling Screenshots
20.6.5. Known Compatibility Problems
20.7. Running Tests in an Distributed Environment
20.7.1. Running Tests Remotely
20.7.2. Starting the Hub
20.7.3. Node Service Configuration
20.7.4. Starting a Grid Node
20.7.5. Mobile Testing
20.8. Known Issues
20.8.1. Testing the LoginForm
20.8.2. Using assertTextPresent and assertTextNotPresent
20.8.3. Exporting Recordings of the Upload Component
20.8.4. Running Firefox Tests on Mac OS X
A. User Interface Definition Language (UIDL)
A.1. API for Painting Components
A.2. JSON Rendering
B. Songs of Vaadin
Index

List of Figures

1.1. General Architecture of Vaadin
1.2. Hello World Application
2.1. Development Toolchain and Process
2.2. Firebug Debugger for Firefox
2.3. A New Dynamic Web Project
2.4. Running a Vaadin Application
2.5. Debugging a Vaadin Application
2.6. Adding a New Maven Archetype in NetBeans
2.7. Adding a New Maven Project in NetBeans
2.8. A New Vaadin Project with vaadin-archetype-clean
3.1. Vaadin Architecture
3.2. Architecture of Vaadin Client-Side Engine
3.3. Class Diagram of a Button Click Listener
4.1. Application Architecture
4.2. Opening a Sub-Window
4.3. Screenshot of the Modal Window Demo Application
4.4. Resource Interface and Class Diagram
4.5. Theme Resources
4.6. Screenshot of the stream resource example with an embedded image
4.7. Error indicator active
4.8. Notification
4.9. Notification with Formatting
4.10. Uncaught Exception in Component Error Indicator
5.1. UI Component Inheritance Diagram
5.2. Component Interfaces and Abstractions
5.3. Field Components
5.4. Field Interface Inheritance Diagram
5.5. Caption Management by VerticalLayout and FormLayout components.
5.6. Component Description as a Tooltip
5.7. A Rich Text Tooltip
5.8. An Enabled and Disabled Button
5.9. Styling Disabled Components
5.10. Displaying an Icon from a Theme Resource.
5.11. Set Locale for InlineDateField
5.12. Selecting a Locale
5.13. A Read-Only Component.
5.14. Component with a Custom Style
5.15. An Invisible Component.
5.16. The Label Component
5.17. Label Modes Rendered on Screen
5.18. Referencing An Image Resource in Label
5.19. Link Example
5.20. Link That Opens a New Window
5.21. TextField Example
5.22. Text Field Class Relationships
5.23. Null Value Representation
5.24. Text Change Events
5.25. Styling TextField with CSS
5.26. TextArea Example
5.27. Word Wrap in TextArea
5.28. PasswordField
5.29. Rich Text Area Component
5.30. Regular English and a Localized Rich Text Area Toolbar
5.31. DateField (PopupDateField) for Selecting Date and Time
5.32. Custom Date Format for PopupDateField
5.33. Example of the InlineDateField
5.34. An Example of a Button
5.35. An Example of a Check Box
5.36. Selected Item
5.37. The Select Component
5.38. Filtered Selection
5.39. The ListSelect Component
5.40. The NativeSelect Component
5.41. Option Button Group in Single and Multiple Selection Mode
5.42. OptionGroup with a Disabled Item
5.43. Horizontal OptionGroup
5.44. Twin Column Selection
5.45. Select Component with Adding New Items Allowed
5.46. Basic Table Example
5.47. Table Selection Example
5.48. Resizing Columns
5.49. Collapsing Columns
5.50. Components in a Table
5.51. A Table in Normal and Editable Mode
5.52. A Table with a Footer
5.53. Table with Generated Columns in Normal and Editable Mode
5.54. Formatted Table Columns
5.55. Cell Style Generator for a Table
5.56. A Tree Component as a Menu
5.57. Menu Bar
5.58. Embedded Image
5.59. Upload Component
5.60. Image Upload Example
5.61. Layout of the Form Component
5.62. Form Automatically Generated from a Bean
5.63. Form Fields Generated with a FormFieldFactory
5.64. Form Validation in Action
5.65. Empty Required Field After Clicking Commit
5.66. The Progress Indicator Component
5.67. Starting Heavy Work
5.68. The Slider Component
5.69. The LoginForm Component
5.70. Customizing the LoginForm
5.71. A Custom Composite Component
6.1. Layout Example
6.2. Component Widths in HorizontalLayout
6.3. Defining the Size with a Component
6.4. The Grid Layout Component
6.5. Expanding Rows and Columns in GridLayout
6.6. A FormLayout Layout for Forms
6.7. A Panel Layout in Runo Theme
6.8. A Panel with Light Style
6.9. Panel with Scroll Bars
6.10. HorizontalSplitPanel and VerticalSplitPanel
6.11. A Layout With Nested SplitPanels
6.12. A Simple TabSheet Layout
6.13. A TabSheet with Hidden and Disabled Tabs
6.14. An Accordion
6.15. Components Positioned Relative to Various Edges
6.16. Component Filling an Area Specified by Coordinates
6.17. Specifying an Area by Proportional Coordinates
6.18. Basic Use of CssLayout
6.19. Use of getCss() and line wrap
6.20. Styling CssLayout
6.21. HorizontalLayout with Undefined vs Defined size
6.22. Cell Alignments
6.23. Layout Spacings
6.24. Layout Margins
6.25. Example of a Custom Layout Component
7.1. New Composite Component
7.2. Adding a New Component Node
7.3. Basic Component Properties
7.4. Layout Properties
7.5. Positioning with AbsoluteLayout
7.6. Manually positioned Label
8.1. Contents of a Theme
8.2. Simple Styling by Element Type
8.3. Matching HTML Element Type and Class
8.4. Matching Only HTML Element Class
8.5. Themeing Login Box Example with 'runo' theme.
8.6. Themeing Login Box Example with Custom Theme
8.7. Runo Theme
8.8. Newly Created Theme
9.1. Vaadin Data Model
9.2. Interface Relationships in Vaadin Data Model
9.3. A Form with Nested Bean Properties
9.4. Table Bound to a BeanContainer with Nested Properties
11.1. Color Picker Package
11.2. The Compile Widgetset Button in Eclipse Toolbar
11.3. Recompiling a Widget Set
11.4. Plugin Related Project Settings
11.5. GWT Widget Base Class Hierarchy
11.6. Color Picker Widget Without Styling
11.7. Color Picker Widget With Styling
11.8. Annotated Project Contents
11.9. GWT Development Mode
11.10. Creating New Launch Configuration
11.11. Naming Launch Configuration
11.12. DevMode Arguments
11.13. Setting a Breakpoint
11.14. Debugging with GWT Development Mode
12.1. Synchronization Error Between Windows with the Same Name
12.2. A Dynamically Created Window
12.3. Opening Windows
12.4. Communication Between Two Application-Level Windows
12.5. Vaadin Applications Embedded Inside IFrames
12.6. Debug Window
12.7. Debug Window Showing the Result of Analyze layouts.
12.8. Dynamic Resource with URI Parameters
12.9. Default Button with Click Shortcut
12.10. Application State Management with URI Fragment Utility
12.11. Switching a static (or ThreadLocal) reference during sequential processing of requests
12.12. Switching ThreadLocal references during concurrent processing of requests
13.1. Portlet Categories in Add Application Window
13.2. Portlet Project Structure in Eclipse
13.3. Hello World Portlet
13.4. Portlet Modes in Action
13.5. Initial State of Vaadin Control Panel for Liferay
13.6. Vaadin IPC for Liferay Architecture
13.7. Vaadin IPC Add-on Demo with Two Portlets
13.8. WSRP Architecture
13.9. WSRP Producer Configuration
13.10. WSRP Consumer Configuration
14.1. Entity Diagram of the Domain Model
14.2. Getting List of Add-ons in Directory
14.3. The Externalize Strings Dialog
15.1. The Compile Vaadin widgets Button in Eclipse Toolbar
15.2. Maven POM Definitions in Vaadin Directory
16.1. Monthly view with All-Day and Normal Events
16.2. Weekly View
17.1. Vaadin Timeline Add-On Component
17.2. Scrollbar Area
17.3. Main Area
17.4. Preset Zoom Buttons
17.5. Current Time Range and Graph Legend
17.6. Chart Mode
17.7. Timeline Event Markers
17.8. New Timeline Project
17.9. Widget set compilation
17.10. Timeline Example Project
17.11. Timeline Example Application
17.12. Styling Timeline
17.13. Final Example
18.1. Three-Layer Architecture Using JPAContainer And JPA
18.2. JPAContainer Architecture
18.3. Object-Relational Mapping
18.4. A Domain Model
18.5. Nested Properties
18.6. Using FieldFactory with One-to-Many Relationship
19.1. Layout of the NavigationView
19.2. NavigationManager with Three NavigationViews
19.3. Popover in a Tablet Device
20.1. Controlling the Browser with WebDriver
20.2. TestBench Workflow
20.3. Vaadin TestBench Grid Setup
20.4. Installing Vaadin TestBench Recorder
20.5. A Simple Application To Be Tested
20.6. Recorder Workflow
20.7. Starting Vaadin TestBench Recorder
20.8. Vaadin TestBench Recorder Running
20.9. User Interaction Recorded as Commands
20.10. Inserting commands in a test script
20.11. Exporting Test Case as JUnit Test
20.12. Running JUnit Tests in Eclipse
20.13. A screenshot taken by a test run
20.14. The reference image and a highlighed error image
A.1. Debugging UIDL Messages with Firebug
B.1. Constellation of Tarandus vel Rangifer in Bode's Uranographia (1801)