1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.shared_orchestra.renderkit.html;
20
21 import org.apache.myfaces.shared_orchestra.renderkit.JSFAttr;
22 import org.apache.myfaces.shared_orchestra.renderkit.RendererUtils;
23 import org.apache.myfaces.shared_orchestra.renderkit.html.HTML;
24 import org.apache.myfaces.shared_orchestra.renderkit.html.HtmlRenderer;
25 import org.apache.myfaces.shared_orchestra.renderkit.html.HtmlRendererUtils;
26 import org.apache.myfaces.shared_orchestra.component.EscapeCapable;
27
28 import javax.faces.component.*;
29 import javax.faces.component.html.HtmlInputText;
30 import javax.faces.component.html.HtmlOutputText;
31 import javax.faces.context.FacesContext;
32 import javax.faces.context.ResponseWriter;
33 import javax.faces.convert.ConverterException;
34 import java.io.IOException;
35
36
37
38
39
40
41 public class HtmlTextRendererBase
42 extends HtmlRenderer
43 {
44
45
46 public void encodeEnd(FacesContext facesContext, UIComponent component)
47 throws IOException
48 {
49 org.apache.myfaces.shared_orchestra.renderkit.RendererUtils.checkParamValidity(facesContext,component,null);
50
51 if (component instanceof EditableValueHolder)
52 {
53 renderInput(facesContext, component);
54 }
55 else if (component instanceof ValueHolder)
56 {
57 renderOutput(facesContext, component);
58 }
59 else
60 {
61 throw new IllegalArgumentException("Unsupported component class " + component.getClass().getName());
62 }
63 }
64
65
66 protected static void renderOutput(FacesContext facesContext, UIComponent component)
67 throws IOException
68 {
69 String text = org.apache.myfaces.shared_orchestra.renderkit.RendererUtils.getStringValue(facesContext, component);
70 boolean escape;
71 if (component instanceof HtmlOutputText || component instanceof EscapeCapable)
72 {
73 escape = ((HtmlOutputText)component).isEscape();
74 }
75 else
76 {
77 escape = RendererUtils.getBooleanAttribute(component, org.apache.myfaces.shared_orchestra.renderkit.JSFAttr.ESCAPE_ATTR,
78 true);
79 }
80 renderOutputText(facesContext, component, text, escape);
81 }
82
83
84 public static void renderOutputText(FacesContext facesContext,
85 UIComponent component,
86 String text,
87 boolean escape)
88 throws IOException
89 {
90 if (text != null)
91 {
92 ResponseWriter writer = facesContext.getResponseWriter();
93 boolean span = false;
94
95 if(component.getId()!=null && !component.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX))
96 {
97 span = true;
98
99 writer.startElement(HTML.SPAN_ELEM, component);
100
101 HtmlRendererUtils.writeIdIfNecessary(writer, component, facesContext);
102
103 HtmlRendererUtils.renderHTMLAttributes(writer, component, HTML.COMMON_PASSTROUGH_ATTRIBUTES);
104
105 }
106 else
107 {
108 span = HtmlRendererUtils.renderHTMLAttributesWithOptionalStartElement(writer,component,
109 HTML.SPAN_ELEM,HTML.COMMON_PASSTROUGH_ATTRIBUTES);
110 }
111
112 if (escape)
113 {
114 writer.writeText(text, org.apache.myfaces.shared_orchestra.renderkit.JSFAttr.VALUE_ATTR);
115 }
116 else
117 {
118 writer.write(text);
119 }
120
121 if(span)
122 {
123 writer.endElement(org.apache.myfaces.shared_orchestra.renderkit.html.HTML.SPAN_ELEM);
124 }
125 }
126 }
127
128
129 protected void renderInput(FacesContext facesContext, UIComponent component)
130 throws IOException
131 {
132 ResponseWriter writer = facesContext.getResponseWriter();
133
134 String clientId = component.getClientId(facesContext);
135 String value = org.apache.myfaces.shared_orchestra.renderkit.RendererUtils.getStringValue(facesContext, component);
136
137 writer.startElement(HTML.INPUT_ELEM, component);
138 writer.writeAttribute(HTML.ID_ATTR, clientId, null);
139 writer.writeAttribute(HTML.NAME_ATTR, clientId, null);
140 writer.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_TEXT, null);
141 if (value != null)
142 {
143 writer.writeAttribute(HTML.VALUE_ATTR, value, JSFAttr.VALUE_ATTR);
144 }
145
146 HtmlRendererUtils.renderHTMLAttributes(writer, component, HTML.INPUT_PASSTHROUGH_ATTRIBUTES_WITHOUT_DISABLED);
147 if (isDisabled(facesContext, component))
148 {
149 writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
150 }
151
152 writer.endElement(HTML.INPUT_ELEM);
153 }
154
155 protected boolean isDisabled(FacesContext facesContext, UIComponent component)
156 {
157
158 if (component instanceof HtmlInputText)
159 {
160 return ((HtmlInputText)component).isDisabled();
161 }
162 else
163 {
164 return org.apache.myfaces.shared_orchestra.renderkit.RendererUtils.getBooleanAttribute(component, HTML.DISABLED_ATTR, false);
165 }
166 }
167
168
169 public void decode(FacesContext facesContext, UIComponent component)
170 {
171 RendererUtils.checkParamValidity(facesContext,component,null);
172
173 if (component instanceof EditableValueHolder)
174 {
175 HtmlRendererUtils.decodeUIInput(facesContext, component);
176 }
177 else if (component instanceof ValueHolder)
178 {
179
180 }
181 else
182 {
183 throw new IllegalArgumentException("Unsupported component class " + component.getClass().getName());
184 }
185 }
186
187
188 public Object getConvertedValue(FacesContext facesContext, UIComponent component, Object submittedValue) throws ConverterException
189 {
190 org.apache.myfaces.shared_orchestra.renderkit.RendererUtils.checkParamValidity(facesContext, component, UIOutput.class);
191 return RendererUtils.getConvertedUIOutputValue(facesContext,
192 (UIOutput)component,
193 submittedValue);
194 }
195
196 }