--- title: Advanced Client-Side Topics order: 10 layout: page --- [[gwt.advanced]] = Advanced Client-Side Topics In the following, we mention some topics that you may encounter when integrating widgets. [[gwt.advanced.phases]] == Client-Side Processing Phases Vaadin's client-side engine reacts to changes from the server in a number of phases, the order of which can be relevant for a connector. The processing occurs in the [methodname]#handleUIDLMessage()# method in [classname]#ApplicationConnection#, but the logic can be quite overwhelming, so we describe the phases in the following summary. . Any dependencies defined by using [classname]#@JavaScript# or [classname]#@StyleSheet# on the server-side class are loaded. Processing does not continue until the browser confirms that they have been loaded. . New connectors are instantiated and [methodname]#init()# is run for each [interfacename]#Connector#. . State objects are updated, but no state change event is fired yet. . The connector hierarchy is updated, but no hierarchy change event is fired yet. [methodname]#setParent()# and [methodname]#setChildren()# are run in this phase. . Hierarchy change events are fired. This means that all state objects and the entire hierarchy are already up to date when this happens. The DOM hierarchy should in theory be up to date after all hierarchy events have been handled, although there are some built-in components that for various reasons do not always live up to this promise. . Captions are updated, causing [methodname]#updateCaption()# to be invoked on layouts as needed. . [classname]#@DelegateToWidget# is handled for all changed state objects using the annotation. . State change events are fired for all changed state objects. . [methodname]#updateFromUIDL()# is called for legacy connectors. . All RPC methods received from the server are invoked. . Connectors that are no longer included in the hierarchy are unregistered. This calls [methodname]#onUnregister()# on the [interfacename]#Connector#. . The layout phase starts, first checking the sizes and positions of all elements, and then notifying any [interfacename]#ElementResizeListener#s, as well as calling the appropriate layout method for the connectors that implement either [classname]#SimpleManagedLayout# or [classname]#DirectionalManagedLayout# interface.