[jboss-cvs] jboss-seam/src/ui/org/jboss/seam/ui/facelet ...

Norman Richards norman.richards at jboss.com
Wed Jan 10 09:36:34 EST 2007


  User: nrichards
  Date: 07/01/10 09:36:34

  Added:       src/ui/org/jboss/seam/ui/facelet  FaceletsRenderer.java
  Log:
  add renderer
  
  Revision  Changes    Path
  1.1      date: 2007/01/10 14:36:34;  author: nrichards;  state: Exp;jboss-seam/src/ui/org/jboss/seam/ui/facelet/FaceletsRenderer.java
  
  Index: FaceletsRenderer.java
  ===================================================================
  package orb.jboss.seam.ui.facelet;
  
  import java.io.StringWriter;
  import java.io.Writer;
  import java.io.IOException;
  import java.net.URL;
  
  import javax.faces.component.UIViewRoot;
  import javax.faces.context.FacesContext;
  import javax.faces.context.ResponseWriter;
  
  import org.jboss.seam.*;
  import org.jboss.seam.annotations.*;
  import org.jboss.seam.core.Renderer;
  
  import org.jboss.seam.ui.JSF;
  
  import com.sun.facelets.Facelet;
  import com.sun.facelets.compiler.SAXCompiler;
  import com.sun.facelets.impl.DefaultFaceletFactory;
  import com.sun.facelets.impl.DefaultResourceResolver;
  
  @Scope(ScopeType.STATELESS)
  @Intercept(InterceptionType.NEVER)
  @Name("renderer")
  @Install(value=true, precedence=Install.BUILT_IN)
  public class FaceletsRenderer
      extends Renderer
  {
  
      public String render(String viewId) {
          return render(viewId,
                        Thread.currentThread().getContextClassLoader());
      }
      
  
      public String render(String viewId, ClassLoader classLoader) {
          FacesContext facesContext = FacesContext.getCurrentInstance();
  
          ResponseWriter originalWriter = null;
  
          try {
              StringWriter stringWriter = new StringWriter();
              wrapResponseWriter(facesContext, stringWriter);
  
              renderFacelet(facesContext, faceletForURL(resourceURL(classLoader, viewId)));
  
              return stringWriter.getBuffer().toString();
          } catch (IOException e) {
              throw new RuntimeException(e);
          } finally {
              if (originalWriter != null) {
                  facesContext.setResponseWriter(originalWriter);
              }
          }
      }
  
  
      protected URL resourceURL(ClassLoader classLoader, String viewId) {
          URL url = classLoader.getResource(viewId); 
  
          if (url == null) {
              throw new IllegalArgumentException("resource doesn't exist: " + viewId);
          }
  
          return url;
     }
  
      protected Facelet faceletForURL(URL url) 
          throws IOException
      {
          return new DefaultFaceletFactory(new SAXCompiler(), 
                                           new DefaultResourceResolver()).getFacelet(url);
      }
  
  
      protected void wrapResponseWriter(FacesContext facesContext, 
                                        Writer writer) {
          ResponseWriter responseWriter = 
              facesContext.getRenderKit().createResponseWriter(writer, null, null);
  
          facesContext.setResponseWriter(responseWriter);
      }
  
      protected void renderFacelet(FacesContext facesContext, Facelet facelet) 
          throws IOException
      {
          UIViewRoot root = facesContext.getViewRoot();
          facelet.apply(facesContext, root);
          JSF.renderChildren(facesContext, root);
      }
  
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list