The
updateComponent() does a few things. One is updating default parameters for widgets, such as “invisible” or “disabled”. For example, if the component is invisible, the function returns with true and (because of the return; above) the component will not be displayed. One of the default parameters is the caption: if the third parameter is “true”, the containing layout will manage the caption, usually displaying it above the actual component. Some widgets, such as
IButton , like to manage the caption itself; in
IButton the caption is inside the widget.
The
updateComponent() also checks that the current client-side widget is a correct counterpart (“implementation”) of a server-side component. A server-side component can be mapped to different client-side widgets depending on its parameters. For example,
OrderedLayout is mapped to either
IHorizontalLayout or
IVerticalLayout depending on its orientation. If the orientation parameter changes, the
updateComponent() can actually replace the client-side widget with the correct one.
So, if you have loop in the
updateComponent() call, my first suspicion is that you have done something wrong in your widget set definition class that inherits the
DefaultWidgetSet . That’s the place where your widgets are instantiated and a mistake might cause something weird when the
updateComponent() uses
resolveWidgetTypeName(UIDL uidl) to check the correct implementation. Check that it’s correct in every way, especially for the class names in strings, as they are not checked compile-time and you can easily make mistakes in them.