PillowRelease Notes



  • New: Rewrote regex route globs for new BedSheet wildcard URLs.
  • New: Limited (NoDoc) support for EventMeta.
  • Chg: Updated to BedSheet 1.5.16 (Breaking change.)
  • Chg: Welcome Pages no-longer end with a directory slash as per the new BedSheet standard.
  • Chg: Page and Event context args may no longer be null (it's complicated and under-used), use a default / optional argument instead.
  • Chg: WelcomePageStrategy redirects downgraded to a 307 Temporary Redirect.
  • Chg: Deleted internal ThreadStack pattern and replaced it with a nested parent obj.
  • Bug: Pages and Events with routes disabled were printed as valid routes on startup.


  • New: Added redirect methods to PageMeta.
  • Chg: Updated to efan v2.0.



  • New: Pillow pages now respond to HEAD requests.
  • Chg: Page event methods may be overridden by subclasses.
  • Chg: Removed hardcoding for xhtml MIME type - see here.


  • New: Pages may define * placeholders in the URL for page ctx params.
  • New: Added PageMeta.pageUrlAbs() method.
  • Chg: Event methods may be overridden.
  • Chg: Code now uses the facet() method after an F4 upgrade.
  • Chg: Changed the default MimeType from text/plain to text/html.


  • Chg: Page meta no longer escapes the @ char, to be more consistent with Fantom's Uri class.


  • Chg: Updated to work with IoC 3.0 and BedSheet 1.5. (Breaking change.)
  • Chg: @InitRender may now return any BedSheet Response object for further processing.
  • Chg: Deprecated Page.disableRoutes in favour of Page.disableRouting
  • Chg: Added default template directories.
  • Bug: Events were not logged correctly on the BedSheet Err pages if they had the same name.



  • 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