This package provides a strategy for rendering complex components. A complex component is any component that consists of multiple sub-components. The {@link com.sun.enterprise.tools.jsfext.renderer.TemplateRenderer} is the actual Renderer class, the other files in this package provide support for creating and holding the LayoutDefinition information. While {@link com.sun.enterprise.tools.jsfext.renderer.TemplateRenderer} could also render a simple component, the flexibility and extensibility capabilities are probably overkill for small components.

The {@link com.sun.enterprise.tools.jsfext.renderer.TemplateRenderer} is driven off a "template". The template is actually a tree data structure consisting of "{@link com.sun.enterprise.tools.jsfext.layout.descriptor.LayoutElement}" objects. This structure is walked in order to render the component. This data structure may be populated programatically, however, a {@link com.sun.enterprise.tools.jsfext.layout.LayoutDefinitionManager} is the recommended way to obtain the structure. A {@link com.sun.enterprise.tools.jsfext.layout.LayoutDefinitionManager} is responsible for locating a {@link com.sun.enterprise.tools.jsfext.layout.descriptor.LayoutDefinition} for a particular component (such as a table). How this is done is left to implementations of {@link com.sun.enterprise.tools.jsfext.layout.LayoutDefinitionManager}. One implementation currently exists which populates the {@link com.sun.enterprise.tools.jsfext.layout.descriptor.LayoutElement} tree from an XML file: {@link com.sun.enterprise.tools.jsfext.layout.xml.XMLLayoutDefinitionManager}.

Different types of {@link com.sun.enterprise.tools.jsfext.layout.descriptor.LayoutElement} objects are used to effect the output. {@link com.sun.enterprise.tools.jsfext.layout.descriptor.LayoutElement} are delegated the encode responsibilty so that they may determine whether and how their child components are encoded. See the {@link com.sun.enterprise.tools.jsfext.layout.descriptor.LayoutElement} documentation and the implementing classes of {@link com.sun.enterprise.tools.jsfext.layout.descriptor.LayoutElement} for more information.