Previous | Next
WireHose Developers Guide

WireHose user interface concepts

Like all WebObjects web applications, a WireHose application consists of pages and components. The WireHoseLayoutSupport framework provides a very dynamic, flexible system for controlling your application's appearance and behavior.

To achieve this flexibility, WireHose introduces the concepts of layouts, pages, wrappers and areas. These are defined in a configuration file known as the application's layout dictionary.


WireHose provides the ability for your application to have multiple user interface appearances (also known as being "skinnable"). Each separate look in a WireHose application is called a layout.

A WireHose application can support multiple branded affiliates from a single codebase, as in an application service provider environment. Or it can allow the user to personalize the look of their page in addition to personalizing its content. You can also use this ability to support multiple output formats, such as XML, HDML, SMIL, RSS, RDF, etc.

You can substitute pages and components for a given layout; the session helper uses the layout dictionary to determine which components to use for each layout.


Each page is identified by its canonical name, which is typically the name of a page's superclass. For example, the canonical name for a search results page is "WHSearchResultsPage". You can provide a subclass of WHSearchResultsPage, such as "MySearchResultsPage", and with an appropriate entry in the layout dictionary, have it be used only when a particular layout is active.


Each layout has an associated wrapper, which defines the look for that layout. A wrapper component will include the enclosing <HTML><BODY>...</BODY></HTML> tags, and provides a WOComponentContent in which pages are rendered. WireHose page components therefore do not usually contain these tags; rather, they use a WOSwitchComponent to switch in the appropriate wrapper for the current layout via a helper.currentWrapper binding. This allows a page component to be used in multiple layouts.


Wrappers and pages also may define multiple areas. For example, a three-column layout may define three areas, "left", "middle" and "right", while another layout may include only a "main" area. Each of a user's channels are mapped to a particular area through its areaName property.

Previous | Next