PillowRelease Notes



  • Chg: Deprecated Page.disableRoutes in favour of Page.disableRouting


  • New: @InitRender method parameters with default values become optional URL parameters.
  • New: @PageContext fields may also be optional.
  • New: @PageEvent methods may also have optional and nullable URL parameters.
  • New: Added @Page.disableRoutes so individual pages can be omitted from Route generation.
  • Chg: PageMeta.eventUrl(...) may now take a Method or a Str as the event argument.
  • Chg: Made Pages.renderXXXX() methods public.
  • Chg: Caching HTTP headers are only set in prod mode.
  • Bug: Page context parameters are now correctly URL encoded and decoded - see URI Encoding / Decoding.


  • Chg: Updated to IoC 2.0.0.
  • Chg: Converted PageMeta to a mixin.
  • Chg: Pillow BedSheet Routes are contributed via a single afPillow.pageRoutes contribution, and not placeholders.



  • Bug: Bodged release.


  • New: Added @PageEvent.name which overrides the default method name.
  • New: Added PageMeta.eventMethods().
  • Chg: Updated to IoC 1.7.2 and BedSheet 1.3.12.
  • Chg: Renamed PageMeta.eventUri -> PageMeta.eventUrl.


  • New: Added a default cache-control HTTP header as a config value.
  • Chg: Renamed PageMeta.pageUri -> PageMeta.pageUrl.


  • New: Stack frames from Pillow, efanXtra and efan are marked as boring on BedSheet's Err500 page.
  • Chg: Updated to IoC 1.6.4.


  • New: Using Bean Utils 0.0.2
  • New: Page state from events are saved and restored should the page be rendered as part of the same request.
  • Chg: Page events render the containing page by default.
  • Chg: Renamed @Page.uri -> @Page.url


  • Chg: Updated to use efanXtra 1.1.0.
  • Chg: Pages.pageMeta() and Pages.get() now throw a NotFoundErr if the given page type could not be found.


  • Chg: Page context may be nullable on Pages.pageMeta().
  • Chg: Added Pages.get() operator for easy PageMeta access.
  • Chg: Contributed Pillow Pages section to BedSheet's Err and Not Found pages.


  • Chg: Page context values may now be mutable / non-const objects.


  • New: Implemented WelcomePageStrategy.
  • New: Added helpful http response headers for testing.
  • Chg: PageUriResolver and ContentTypeResolver are now configurable.
  • Chg: Renamed ConfigId welcomePage -> welcomePageName.
  • Bug: Page URIs with no page context could be a directory URI.


  • New: Added @PageEvent methods allowing URIs to be mapped to page methods.
  • New: Added @PageContext fields that can replace @InitRender methods.
  • New: Added the PageMeta class to wrap up, um, page meta data! Oh, and attached an instance to the rendering pages. (Deleted RenderPageMeta.)
  • New: Added PageMetaResponseProcessor that renders Pillow pages when PageMeta instances are returned as BedSheet response objects.
  • New: Added httpMethod field to @Page and @PageEvent
  • New: Added template uri to @Page
  • Chg: Page is now a facet, incorporating fields from @PageUri and @PageContentType (which have now been deleted).


  • New: Use the @PageContentType facet to explicitly define the content type for your page.
  • New: Use a double extension (e.g. indexPage.xhtml.slim) to set the content type for the page.
  • Bug: @InitRender params could incorrectly match for directory index pages.


  • New: Page uris and BedSheet routes are generated from the @InitRender method signature.
  • New: Directory uris may now serve welcome pages.
  • Chg: Updated to use BedSheet 1.2.
  • Chg: Renamed project to afPillow (from afBedSheetEfanExtra).
  • Chg: Reanmed EfanPageMeta to RenderPageMeta.
  • Chg: Renamed PageRoute to PageUri.


  • New: Added @PageRoute facet that lets you specify a bespoke uri
  • New: Added EfanPageMeta which returns the active rendering page.


  • New: Preview Release