[jboss-user] [JBoss Seam] - Re: How do I fetch the HTML source of a page programatically

JakeC do-not-reply at jboss.com
Fri Feb 8 13:47:22 EST 2008


OK, I think I'm getting much closer. MailComponent.encode() has the process down, but from within a UIComponent, which renders differently. However, the info from Monkey shows how to render from outside a UIComponent, and org.jboss.seam.ui.facelet.FaceletsRenderer showed how to create a ResponseWriter (the one from FacesContext is null). Here is what I have so far:
    try {
  |       FacesContext facesContext = FacesContext.getCurrentInstance();
  |       ViewHandler viewHandler = facesContext.getApplication().getViewHandler();
  |       UIViewRoot viewRoot = viewHandler.restoreView(facesContext, "/myDir/myPage.xhtml");
  |       if(viewRoot == null) {
  |         log.info("restoreView returned null, calling createView");
  |         viewRoot = viewHandler.createView(facesContext, "/myDir/myPage.xhtml");
  |       }
  |       StringWriter stringWriter = new StringWriter();
  |       ResponseWriter originalResponseWriter = facesContext.getResponseWriter();
  |       if(originalResponseWriter == null) {
  |         log.info("responseWriter is null, creating new one");
  |         facesContext.setResponseWriter(facesContext.getRenderKit().createResponseWriter(stringWriter, null, null));
  |       } else {
  |         ResponseWriter cachingResponseWriter = originalResponseWriter.cloneWithWriter(stringWriter);
  |         facesContext.setResponseWriter(cachingResponseWriter);
  |       }
  |       viewHandler.renderView(facesContext, viewRoot);
  |       if(originalResponseWriter != null)
  |         facesContext.setResponseWriter(originalResponseWriter);
  |       String output = stringWriter.getBuffer().toString();
  |       log.info("Rendered data: {0}", output);
  |     } catch (Throwable t) {
  |       log.error("Error rendering: {0}", t, t.getMessage());
  |     }
Here is the output I got:
restoreView returned null, calling createView
  | responseWriter is null, creating new one
  | Rendered data:
The call to restoreView() returns null, so I call createView(). I suspect that this may be my problem.  I'm getting nothing rendered because I am creating a new view, not restoring my existing one. The viewId I'm using is "/myDir/myPage.xhtml", like I would refer to it in in pages.xml. Is this incorrect? If so, what should I use for viewId?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4127949#4127949

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4127949



More information about the jboss-user mailing list