The rendering package contains interfaces and implementation of portal framework rendering. This part of the framework provides a set of abstractions that can be configured to generate diverse context presentations.

A top-level object responsible for generating context presentation is defined by the simple {@link org.jasig.portal.rendering.IPortalRenderer} interface. Although the interface is general enough to allow for a wide variety of implementations, the uPortal3 takes an approach where the presentation is compiled by a set of connected rendering components. Components pass presentation from one to another, adding/transforming or filtering presentation content, until the final component sends presentation to the response object. The logic of the presentation is modified by adding, removing, connecting and configuring individual components.

{@link org.jasig.portal.rendering.TreeRenderer} is the main renderer implementation. It assumes that rendering components are organized as a tree, with a single top-level entry component (root) at which the rendering is initiated. The root component itself must also implement {@link org.jasig.portal.rendering.IPortalRenderer} interface. TreeRenderer is responsible for establishing the rendering cycle and firing {@link org.jasig.portal.rendering.RenderingPipelineEvent}s.

TreeRenderer does not deal with components themselves, instead it delegates component management responsibilities to the {@link org.jasig.portal.rendering.IRenderingComponentManager}. The component manager implementation defines the topology in which the rendering components are connected. Knowing the topology one can enumerate components of the rendering path, and decide on an optimal cache entry point.
{@link org.jasig.portal.rendering.PipelineComponentManager} is an implementation that assumes a linear rendering pipeline (such as the one present in uPortal2).

The package also includes some abstractions for caching implementation. Given a network of rendering components, there are might be multiple points at which the content is cached. Each such point is described by a {@link org.jasig.portal.rendering.ICacheEntryPoint} interface. The rendering component manager is tasked with determining an optimal (and valid) cache entry point for each rendering cycle. PipelineComponentManager delegates this responsibility to a {@link org.jasig.portal.rendering.IPipelineCacheManager} instance.

Specific subpackages contain implementations of rendering components, component and cache managers for different types of components: sax, string and hybrid (which can be configured to use multiple types of rendering components).