1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.renderkit.html;
20
21 import java.io.IOException;
22 import java.util.List;
23
24 import javax.faces.component.UIComponent;
25 import javax.faces.component.UIViewRoot;
26 import javax.faces.context.FacesContext;
27 import javax.faces.context.ResponseWriter;
28 import javax.faces.render.Renderer;
29
30 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFRenderer;
31 import org.apache.myfaces.shared.renderkit.html.HTML;
32 import org.apache.myfaces.shared.renderkit.html.HtmlRendererUtils;
33
34
35
36
37
38
39
40
41 @JSFRenderer(renderKitId = "HTML_BASIC", family = "javax.faces.Output", type = "javax.faces.Head")
42 public class HtmlHeadRenderer extends Renderer
43 {
44
45 private final static String HEAD_ELEM = "head";
46 private final static String HEAD_TARGET = HEAD_ELEM;
47
48 private final static String PROFILE_ATTR = "profile";
49
50 private final static String[] HEAD_PASSTHROUGH_ATTRIBUTES = { HTML.DIR_ATTR,
51 HTML.LANG_ATTR, PROFILE_ATTR};
52
53 @Override
54 public void encodeBegin(FacesContext facesContext, UIComponent component)
55 throws IOException
56 {
57 super.encodeBegin(facesContext, component);
58
59 ResponseWriter writer = facesContext.getResponseWriter();
60 writer.startElement(HEAD_ELEM, component);
61 HtmlRendererUtils.writeIdIfNecessary(writer, component, facesContext);
62 HtmlRendererUtils.renderHTMLAttributes(writer, component,
63 HEAD_PASSTHROUGH_ATTRIBUTES);
64 }
65
66 @Override
67 public void encodeEnd(FacesContext facesContext, UIComponent component)
68 throws IOException
69 {
70 super.encodeEnd(facesContext, component);
71
72 ResponseWriter writer = facesContext.getResponseWriter();
73 UIViewRoot root = facesContext.getViewRoot();
74 List<UIComponent> componentResources = root.getComponentResources(facesContext,
75 HEAD_TARGET);
76
77 for (int i = 0, childCount = componentResources.size(); i < childCount; i++)
78 {
79 UIComponent child = componentResources.get(i);
80 child.encodeAll(facesContext);
81 }
82 writer.endElement(HEAD_ELEM);
83 }
84 }