Pages and components

Tapestry divides an application into a set of pages. Each page is assembled from Tapestry components. Components themselves may be assembled from other components ... there's no artificial depth limit.

Tapestry pages are themselves components, but are components with some special responsibilities.

All Tapestry components can be containers of other components. Tapestry pages, and most user-defined components, have a template, a special HTML file that defines the static and dynamic portions of the component, with markers to indicate where embedded components are active. Components do not have to have a template, most of the components provided with Tapestry generate their portion of response in code, not using a template.

Components may have one or more named parameters which may be set (or, more correctly, "bound") by the page or component which contains them. Unlike Java method parameters, Tapestry component parameters may be bidirectional; a component may read a parameter to obtain a value, or write a parameter to set a value.

Most components are concerned only with generating HTML. A certain subset of components deal with the flip-side of requests; handling of incoming requests. Link classes, such as PageLink, DirectLink and ActionLink, create clickable links in the rendered page and are involved in dispatching to user-supplied code when such a link is triggered by clicking it.

Other components, Form, and the form control components (TextField, PropertySelection, Checkbox, etc.), facilitate HTML forms. When such components render, they read properties from application objects so as to provide default values. When the forms are submitted, the components within the form read HTTP query parameters, convert the values to appropriate types and then update properties of application objects.