Skip to content

Redwood page templates

Oracle’s Redwood design system organises its full-page templates into three families, by what the user is doing: getting the big picture (overview), exploring one record (detail), or changing something (transactional). This page follows that grouping, in Mateu terms: for every template it names the archetype, annotation or component that builds it and links to its guide, where you will find its anatomy, its responsive behaviour, what you can configure and screenshots of Mateu painting it with the Redwood renderer.

The texts are our own summary of Redwood’s guidance, and the screenshots are Mateu’s — none of Oracle’s material is copied. Where Mateu does not yet match a template, the template’s guide says so under Known gaps.

See also Page templates (the full map, design-system neutral) and Choosing a page template (the decision guide).

An overview page sums up a business flow so that the user sees, at a glance, what needs their attention before they dive into any one record. Redwood has two of them, and Mateu has an archetype for each:

TemplateWhat it is forMateuDoc
Dashboard landing pageA prioritised “one-stop” status of the business: a strip of KPIs on top and a grid of panels that explain themDashboard (or a plain class with MetricCard fields under @AutoPage)Dashboard
Welcome pageA visually engaging first page of a workflow: a banner with an image and the next actions, and a few tiles with what matters before startingWelcome (and @WelcomeBanner on any page)Welcome page

The pages that show one object — Foldout, General overview, Item overview — look like overviews but Redwood files them under Details; see Choosing a page template.

Dashboard landing page — two arrangements

Section titled “Dashboard landing page — two arrangements”
  • Hero: one visualization carries the story, so it takes the full width at the top, with secondary panels below it. In Mateu: declare that @Panel first and give it colSpan equal to columns().
  • Above the fold: two to five panels must be read together. In Mateu: keep the spans so the panels fill one or two rows of columns().

Both start with the page header (title required; subtitle, primary action, context or object switcher optional), then the scoreboard (consecutive MetricCard fields), an optional performance title, and the grid of panels (@Panel(title, subtitle)).

AspectRedwoodMateu
Page widthfixed, full width or edge to edge@PageWidth; fixed by default
Contexta standalone pagea routed @UI class
Panel contentcharts, treemaps, sunbursts, thematic maps, lists, embedded analyticsChart/TrendChart, Map, Grid, StatusList, Markdown…; no treemap/sunburst
Empty panelan empty-state messageEmptyState
Requiredtitle@Title
Optionssubtitle, switchers, primary action, back arrow (PWA), grid layoutsprimary action (@Toolbar), grid layout (columns(), colSpan); subtitle and switchers are not available on the archetype yet
Drawers that pair with itgeneral drawer, create/edit draweran action returning a Drawer

Welcome page — what goes under the banner

Section titled “Welcome page — what goes under the banner”

The banner is always the same (title, optional greeting and description, image, actions or a search box); what changes is the main slot underneath:

  • a read-only form — a @Panel holding a read-only component tree;
  • a list or an expandable list — a @Panel holding a StatusList, a Grid or collapsible content;
  • cards — one @Panel per card.
AspectRedwoodMateu
Page widthfixed (default) or full width@PageWidth; fixed by default
Contexta standalone pagea routed @UI class
Messagesbanner and toast messages, empty statetoasts from actions (Message), EmptyState
RequiredtitleheroTitle() (no @Title fallback on the archetype yet)
Optionsbackground illustration or uploaded image, image on/off on phones, a primary and a secondary action — or a search boxheroImage() (Redwood shows its own illustration instead), heroTone(), Button fields (Redwood paints two); no phone-image switch, no search

Note: Redwood’s own pages disagree on the number of banner actions — the category page says a primary and one secondary, the template guide allows one call to action plus up to six in an overflow menu. Mateu sends every Button field; the Redwood renderer currently paints the first two.

Built with Spectra’s component?Biggest gap
Dashboard landing page❌ composed: Spectra page header + JET panels; no oj-sp-dashboard-landing-page / oj-sp-scoreboard / oj-sp-dashboard-panela KPI drill-in is a «View» button, not a clickable tile; rowSpan is ignored
Welcome page🟡 Spectra’s banner (oj-sp-header-welcome-banner) + JET tiles; not oj-sp-welcome-pageonly two actions, custom image ignored, no overline

Detail pages explore one entity — a person, an order, a work order — and let the user move sideways to its peers (previous / next record) without going back to the list. Redwood offers four full pages and two drawers for it; the choice depends on how much there is to show and whether the user must keep the page underneath in view.

Redwood templatePick it when…Mateu pieceRedwood renderer
Foldout layout (horizontal)an overview across the top plus 2–8 categories of related information, each in its own vertical panel the user unfoldsFoldout archetype (@Panel fields; panelSummary for the strip)✅ oj-sp-foldout-layout + oj-sp-foldout-panel
Foldout layout (vertical)a small amount of varied content: the overview is the first vertical panel, the rest fold out beside itFoldout (the overview field is the first panel)✅ same component; the horizontal/vertical overview variants are not distinguished
General overviewthe simplest detail page: the attributes of one object, read-only, with related collections and an optional info columnGeneralOverview<Row> (record switcher, overview, info slot)✅ oj-sp-general-overview-page + oj-sp-header-general-overview
Item overviewthe item itself fills the page: a key-info panel next to tabbed related informationItemOverview archetype🟡 composed (key panel + oj-tab-bar); the oj-sp-item-overview-page attempt was reverted (see the Redwood DESIGN-NOTES)
General drawermore about one or several objects of the current page, read-only, without leaving itDrawer returned from an action (subtitle, size, maximizable, peerNav, position)🟡 oj-drawer-popup at the end edge with title + subtitle; size, maximize, peer arrows, position, close icon not drawn
Bottom drawerthe same, docked full width along the bottom; closable, or fixed with an expand/collapse handleDrawer with DrawerPosition.bottom + collapsible❌ opens at the end edge like any drawer
  • Required: a title (and, for foldouts, at least two titled panels).
  • Header extras: subtitle, avatar, badges, contextual information, timestamp, previous/next object, PWA back arrow, edit/share/favourite icon buttons (item overview). In Mateu these are the canonical page-header pieces (@Subtitle, @Avatar, @BadgeInHeader, @KPI, @Timestamp, PeerNavigationSupplier) — see Page templates.
  • Messages: banner, toast and empty-state messages — @Banner/PageBanner, Message, EmptyState.
  • Compatible drawers: every detail page accepts the general drawer as a popup; the general overview also accepts the create-and-edit and bottom drawers. In Mateu any page can return any Drawer from an action — there is no compatibility check.
  • Page width: foldouts are edge to edge (Foldout declares EDGE_TO_EDGE); general overview allows all three widths; item overview fixed or full width (@PageWidth / PageWidthSupplier).
  • General drawer: sizes S/M/L (XL with maximize), start or end position, popup (modal or not) or layout (overlay or push); required title and close. Mateu models all of it on Drawer (DrawerSize, DrawerPosition, modeless, layout); Vaadin draws it all, Redwood does not yet (see Drawer).
  • Bottom drawer: default or maximized height, closable (close icon) or fixed (handle, expand/collapse), tabs or title. Mateu: DrawerPosition.bottom + collapsible; no “fixed” flag and maximize does not change the height.
  1. Redwood drawers: size, maximize, peer arrows, start/bottom position, modeless/layout and the close icon are sent to the renderer but not drawn yet.
  2. Spectra’s drawer templates (oj-sp-general-drawer-template, oj-sp-bottom-drawer-template) are not used yet: the drawers are a plain JET drawer.
  3. Small screens: no drawer goes full window (guide rule) in any web renderer.
  4. Item overview is composed, not oj-sp-item-overview-page.

A transactional page is where the user changes something: creates or updates a business object, records a transaction, or moves a process forward. What sets these pages apart from overview and landing pages is that they end in a commitment — Save, Submit, Create, Finish — and that the object behind them can carry a lot of data, sometimes whole collections of records.

Redwood standardises six of them. In Mateu each one is an archetype or a composition you declare on the backend; the page comes out with the template’s anatomy.

TemplateUse it to…Mateu pieceRedwood renderer
Advanced create and editcreate or edit one complex object with many grouped attributes, on one pagea sectioned form: @Section + the create-edit header (@Toolbar cancel + primary, @KPI, @Timestamp, @BadgeInHeader) + @Toc or @Aside — Advanced create & edit✅ composed from oj-sp-header-create-edit + oj-sp-section; the section index imitates the anchor navigator
Data managementwork inside a large data collection as part of a transaction, with drawers for the details of a pieceDataManagement archetype (grid ⇄ Gantt, docked panels) — Data managementsee that page
Gantt pageadjust and follow a schedule, with a bottom panel and a side detailGanttPage archetype — Ganttsee that page
Guided processsplit a complex, infrequent process (2–25 steps) into steps the user can leave and resumeWizard + @WizardProgress(RAIL), Draftable, stepSkippable, stepApplies — Wizard✅ oj-sp-guided-process; drafts/skip are Mateu buttons in the body
Collection detailgo through a list and read or act on the selected item beside itCollectionDetail<Row> archetype — Collection detail🟡 composed (cards + detail column), not the template component
Create and edit drawercreate or edit one or several related items without leaving the main taskeditInDrawer() on a CRUD, or an action returning a Drawer — Drawersee that page

Ask three questions, in this order:

  1. Is it one step or many? A sequence of decisions, possibly over several sessions → guided process. (Two or three short steps → a guided process in a drawer.)
  2. Does the user stay on the main task? If the edit is a side job on the page they are working on → create and edit drawer. If it deserves a page of its own →
  3. What is the page’s main content?
    • one object with many attributes → advanced create and edit (with @Toc for a long form, @Aside when supporting context helps);
    • a list the user works through, item by item → collection detail;
    • a large data set edited in place, with drawers for detail → data management;
    • a schedule → Gantt page.
  • A transactional header: the title, Cancel and one primary action are mandatory; optional are the subtitle, avatar, badge, up to four contextual facts, a timestamp, up to ten secondary actions, a parent link and next-object navigation. In Mateu the header comes from the page’s @Title, @Toolbar methods and header annotations — see Page templates. (Collection detail uses the overview header instead.)
  • The same supporting pieces: banner and toast messages, dialogs, attachments and the unsaved-changes guard — in Mateu @Banner, Message, Dialog, file fields and @ConfirmOnNavigationIfDirty (automatic on CRUD editors).
  • Drawers that fit them: a create-and-edit drawer and a general drawer can open from any of them; data management and the Gantt page also dock bottom drawers.
  • Fixed texts: Cancel, Save, Continue, Skip are the design system’s, not the developer’s — on Redwood they come from Redwood itself, in the UI’s language.
  • Page width per template: advanced create and edit is fixed-width; data management full width or edge to edge; the Gantt page and the guided process edge to edge; collection detail any of the three. Mateu infers the width from the page type unless @PageWidth says otherwise — for the guided process declare @PageWidth(EDGE_TO_EDGE) (the default is still fixed; see guided-process review).