View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.myfaces.custom.document;
20  
21  import java.io.IOException;
22  
23  import javax.faces.component.UIComponent;
24  import javax.faces.context.FacesContext;
25  import javax.faces.context.ResponseWriter;
26  
27  import org.apache.myfaces.renderkit.html.util.AddResource;
28  import org.apache.myfaces.renderkit.html.util.AddResourceFactory;
29  import org.apache.myfaces.renderkit.html.util.ExtensionsPhaseListener;
30  import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils;
31  
32  /**
33   * Document to enclose the whole document. If not otherwise possible you can use
34   * state="start|end" to demarkate the document boundaries
35   *
36   * @JSFRenderer
37   *   renderKitId = "HTML_BASIC"
38   *   family = "javax.faces.Data"
39   *   type = "org.apache.myfaces.DocumentBody"
40   *
41   * @author Mario Ivankovits (latest modification by $Author: lu4242 $)
42   * @version $Revision: 943960 $ $Date: 2010-05-13 13:10:45 -0500 (Thu, 13 May 2010) $
43   */
44  public class DocumentBodyRenderer extends AbstractDocumentRenderer
45  {
46      public static final String RENDERER_TYPE = "org.apache.myfaces.DocumentBody";
47      private String BODY_ELEM = "body";
48      private String[] ATTRS = new String[] {"onload", "onunload", "onresize", "onkeypress", "style", "styleClass", "id"};
49  
50      protected String getHtmlTag()
51      {
52          return BODY_ELEM;
53      }
54  
55      protected Class getDocumentClass()
56      {
57          return DocumentBody.class;
58      }
59  
60      protected void openTag(ResponseWriter writer, UIComponent uiComponent)
61      throws IOException
62      {
63          super.openTag(writer, uiComponent);
64          HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, ATTRS);
65      }
66  
67      protected void writeBeforeEnd(FacesContext facesContext) throws IOException
68      {
69          super.writeBeforeEnd(facesContext);
70          
71          AddResource addResource = AddResourceFactory.getInstance(facesContext);
72          if (!addResource.requiresBuffer())
73          {
74              // This code is rendered only if this request don't require
75              // buffering, because when it is buffered, the buffer is responsible
76              // of render it.
77              ExtensionsPhaseListener.writeCodeBeforeBodyEnd(facesContext);
78  
79              // fake string, so the ExtensionsPhaseListener will not create the javascript again
80              facesContext.getExternalContext().getRequestMap().put(ExtensionsPhaseListener.ORG_APACHE_MYFACES_MY_FACES_JAVASCRIPT, "");
81          }
82      }
83  }