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
23 import javax.faces.component.UIComponent;
24 import javax.faces.component.ValueHolder;
25 import javax.faces.component.html.HtmlOutputLabel;
26 import javax.faces.context.FacesContext;
27 import javax.faces.context.ResponseWriter;
28
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFRenderer;
32 import org.apache.myfaces.shared_impl.component.EscapeCapable;
33 import org.apache.myfaces.shared_impl.renderkit.JSFAttr;
34 import org.apache.myfaces.shared_impl.renderkit.RendererUtils;
35 import org.apache.myfaces.shared_impl.renderkit.html.HTML;
36 import org.apache.myfaces.shared_impl.renderkit.html.HtmlRenderer;
37 import org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils;
38
39
40
41
42
43
44
45
46
47 @JSFRenderer(
48 renderKitId="HTML_BASIC",
49 family="javax.faces.Output",
50 type="javax.faces.Label")
51 public class HtmlLabelRenderer
52 extends HtmlRenderer
53 {
54 private static final Log log = LogFactory.getLog(HtmlLabelRenderer.class);
55
56 public void encodeBegin(FacesContext facesContext, UIComponent uiComponent)
57 throws IOException
58 {
59 super.encodeBegin(facesContext, uiComponent);
60
61 ResponseWriter writer = facesContext.getResponseWriter();
62
63 encodeBefore(facesContext, writer, uiComponent);
64
65 writer.startElement(HTML.LABEL_ELEM, uiComponent);
66 HtmlRendererUtils.writeIdIfNecessary(writer, uiComponent, facesContext);
67 HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, HTML.LABEL_PASSTHROUGH_ATTRIBUTES);
68
69 String forAttr = getFor(uiComponent);
70
71 if (forAttr != null)
72 {
73 writer.writeAttribute(HTML.FOR_ATTR,
74 getClientId(facesContext, uiComponent, forAttr), JSFAttr.FOR_ATTR);
75 }
76 else
77 {
78 if (log.isWarnEnabled()) {
79 log.warn("Attribute 'for' of label component with id " + uiComponent.getClientId(facesContext)+" is not defined");
80 }
81 }
82
83
84
85
86 if (uiComponent instanceof ValueHolder)
87 {
88 String text = RendererUtils.getStringValue(facesContext, uiComponent);
89 if (text != null)
90 {
91 boolean escape;
92 if (uiComponent instanceof HtmlOutputLabel || uiComponent instanceof EscapeCapable)
93 {
94 escape = ((HtmlOutputLabel)uiComponent).isEscape();
95 }
96 else
97 {
98 escape = RendererUtils.getBooleanAttribute(uiComponent, org.apache.myfaces.shared_impl.renderkit.JSFAttr.ESCAPE_ATTR,
99 true);
100 }
101 if (escape)
102 {
103 writer.writeText(text, org.apache.myfaces.shared_impl.renderkit.JSFAttr.VALUE_ATTR);
104 }
105 else
106 {
107 writer.write(text);
108 }
109 }
110 }
111
112 writer.flush();
113
114 encodeAfterStart(facesContext,writer,uiComponent);
115 }
116
117 protected void encodeAfterStart(FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent)
118 throws IOException
119 {
120 }
121
122 protected void encodeBefore(FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent)
123 throws IOException
124 {
125 }
126
127
128 protected String getFor(UIComponent component)
129 {
130 if (component instanceof HtmlOutputLabel)
131 {
132 return ((HtmlOutputLabel)component).getFor();
133 }
134
135 return (String) component.getAttributes().get(JSFAttr.FOR_ATTR);
136
137 }
138
139 protected String getClientId(FacesContext facesContext,
140 UIComponent uiComponent, String forAttr)
141 {
142 return RendererUtils.getClientId(facesContext, uiComponent, forAttr);
143 }
144
145
146 public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
147 throws IOException
148 {
149 super.encodeEnd(facesContext, uiComponent);
150
151 ResponseWriter writer = facesContext.getResponseWriter();
152
153 encodeBeforeEnd(facesContext, writer, uiComponent);
154
155 writer.endElement(HTML.LABEL_ELEM);
156
157 encodeAfter(facesContext, writer, uiComponent);
158 }
159
160 protected void encodeBeforeEnd(FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent)
161 throws IOException
162 {
163 }
164
165 protected void encodeAfter(FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent)
166 throws IOException
167 {
168 }
169 }