Red Hat Web Application Framework 6.1: WAF Developer Guide | ||
---|---|---|
Prev | Chapter 12. Presentation (Bebop) Tutorial | Next |
You may occasionally want to override the default stylesheet rules for one particular page. Because of the way XSLT works, you can choose to override only some template match=... rules, allowing others to be handled by the default stylesheet.
You should handle this in the dispatcher for your application, or by overriding the getStylesheetTransformer() or servePage methods in a PresentationManager class specific to your application. For example:
public class SockPuppetPresentationManager extends BasePresentationManager { public void servePage(Page p, HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { RequestContext rctx = DispatcherHelper.getRequestContext(req); String url = rctx.getRemainingURLPart(); // serve page as usual, except for URLs foo/*; those get a // special-case stylesheet if (!url.startsWith("foo/")) { super.servePage(p, req, resp); } else { // use custom stylesheet for foo/* // in reality, probably cache Transformer for performance Stylesheet fooSS = ... get overridden rules from somewhere ...; Transformer xformer = fooSS.newTransformer(); Document doc = p.buildDocument(req, resp); Writer out = resp.getWriter(); xformer.transform(new DOMSource(doc), new StreamResult(out)); } } } |