1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.custom.selectOneCountry;
20
21 import java.io.IOException;
22 import java.util.List;
23 import java.util.Locale;
24 import java.util.Map;
25 import java.util.Set;
26
27 import javax.faces.component.UIComponent;
28 import javax.faces.component.behavior.ClientBehavior;
29 import javax.faces.context.FacesContext;
30 import javax.faces.context.ResponseWriter;
31 import javax.faces.convert.Converter;
32
33 import org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils;
34 import org.apache.myfaces.shared_tomahawk.renderkit.html.HTML;
35 import org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils;
36 import org.apache.myfaces.shared_tomahawk.renderkit.html.util.ResourceUtils;
37 import org.apache.myfaces.renderkit.html.ext.HtmlMenuRenderer;
38
39
40
41
42
43
44
45
46
47
48 public class SelectOneCountryRenderer extends HtmlMenuRenderer {
49
50 public void encodeEnd(FacesContext facesContext, UIComponent component)
51 throws IOException
52 {
53 RendererUtils.checkParamValidity(facesContext, component, null);
54
55 SelectOneCountry selectOneCountry = (SelectOneCountry) component;
56 ResponseWriter writer = facesContext.getResponseWriter();
57
58 Map<String, List<ClientBehavior>> behaviors = null;
59 behaviors = selectOneCountry.getClientBehaviors();
60 if (!behaviors.isEmpty())
61 {
62 ResourceUtils.renderDefaultJsfJsInlineIfNecessary(
63 facesContext, facesContext.getResponseWriter());
64 }
65
66 if(HtmlRendererUtils.isDisplayValueOnly(component))
67 {
68
69 writer.startElement(HTML.SPAN_ELEM, selectOneCountry);
70 if (!behaviors.isEmpty())
71 {
72 writer.writeAttribute(HTML.ID_ATTR, component.getClientId(facesContext),null);
73 }
74 else
75 {
76 HtmlRendererUtils.writeIdIfNecessary(writer, selectOneCountry, facesContext);
77 }
78
79 String[] supportedAttributes = {HTML.STYLE_CLASS_ATTR, HTML.STYLE_ATTR};
80 HtmlRendererUtils.renderHTMLAttributes(writer, selectOneCountry, supportedAttributes);
81
82 String countryCode = selectOneCountry.getValue().toString();
83 String countryName = new Locale(countryCode, countryCode).getDisplayCountry( facesContext.getViewRoot().getLocale() );
84
85 writer.write( countryName );
86
87 writer.endElement(HTML.SPAN_ELEM);
88 return;
89 }
90
91 writer.startElement(HTML.SELECT_ELEM, selectOneCountry);
92 if (!behaviors.isEmpty())
93 {
94 writer.writeAttribute(HTML.ID_ATTR, component.getClientId(facesContext),null);
95 }
96 else
97 {
98 HtmlRendererUtils.writeIdIfNecessary(writer, selectOneCountry, facesContext);
99 }
100 writer.writeAttribute(HTML.NAME_ATTR, component.getClientId(facesContext), null);
101
102 List selectItemList = selectOneCountry.getCountriesChoicesAsSelectItemList();
103 Converter converter = HtmlRendererUtils.findUIOutputConverterFailSafe(facesContext, selectOneCountry);
104
105 writer.writeAttribute(HTML.SIZE_ATTR, "1", null);
106
107 if (!behaviors.isEmpty())
108 {
109 HtmlRendererUtils.renderBehaviorizedOnchangeEventHandler(facesContext, writer, selectOneCountry, behaviors);
110 HtmlRendererUtils.renderBehaviorizedEventHandlers(facesContext, writer, selectOneCountry, behaviors);
111 HtmlRendererUtils.renderBehaviorizedFieldEventHandlersWithoutOnchange(facesContext, writer, selectOneCountry, behaviors);
112 HtmlRendererUtils.renderHTMLAttributes(writer, selectOneCountry, HTML.SELECT_PASSTHROUGH_ATTRIBUTES_WITHOUT_DISABLED_AND_EVENTS);
113 }
114 else
115 {
116 HtmlRendererUtils.renderHTMLAttributes(writer, selectOneCountry, HTML.SELECT_PASSTHROUGH_ATTRIBUTES_WITHOUT_DISABLED);
117 }
118 if ( isDisabled(facesContext, selectOneCountry) ) {
119 writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
120 }
121
122 Set lookupSet = HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet(false, selectOneCountry, facesContext, converter);
123
124 HtmlRendererUtils.renderSelectOptions(facesContext, selectOneCountry, converter, lookupSet, selectItemList);
125
126 writer.writeText("", null);
127 writer.endElement(HTML.SELECT_ELEM);
128 }
129 }