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.config.MyfacesConfig;
24
25 import javax.faces.component.UIComponent;
26 import javax.faces.component.UISelectMany;
27 import javax.faces.component.UISelectOne;
28 import javax.faces.component.html.HtmlSelectManyListbox;
29 import javax.faces.component.html.HtmlSelectOneListbox;
30 import javax.faces.context.FacesContext;
31 import javax.faces.convert.ConverterException;
32 import java.io.IOException;
33
34
35
36
37
38
39
40 public class HtmlListboxRendererBase
41 extends HtmlRenderer
42 {
43 public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
44 throws IOException
45 {
46 org.apache.myfaces.shared_orchestra.renderkit.RendererUtils.checkParamValidity(facesContext, uiComponent, null);
47
48 if (uiComponent instanceof UISelectMany)
49 {
50 int size;
51 if (uiComponent instanceof HtmlSelectManyListbox)
52 {
53 size = ((HtmlSelectManyListbox)uiComponent).getSize();
54 }
55 else
56 {
57 Integer i = (Integer)uiComponent.getAttributes().get(JSFAttr.SIZE_ATTR);
58 size = i != null ? i.intValue() : 0;
59 }
60 HtmlRendererUtils.renderListbox(facesContext,
61 (UISelectMany)uiComponent,
62 isDisabled(facesContext, uiComponent),
63 size);
64 }
65 else if (uiComponent instanceof HtmlSelectOneListbox)
66 {
67 int size;
68 if (uiComponent instanceof HtmlSelectOneListbox)
69 {
70 size = ((HtmlSelectOneListbox)uiComponent).getSize();
71 }
72 else
73 {
74 Integer i = (Integer)uiComponent.getAttributes().get(JSFAttr.SIZE_ATTR);
75 size = i != null ? i.intValue() : 0;
76 }
77 HtmlRendererUtils.renderListbox(facesContext,
78 (UISelectOne)uiComponent,
79 isDisabled(facesContext, uiComponent),
80 size);
81 }
82 else
83 {
84 throw new IllegalArgumentException("Unsupported component class " + uiComponent.getClass().getName());
85 }
86 }
87
88
89 protected boolean isDisabled(FacesContext facesContext, UIComponent uiComponent)
90 {
91
92 boolean disabled;
93 boolean readonly;
94 if (uiComponent instanceof HtmlSelectManyListbox)
95 {
96 disabled = ((HtmlSelectManyListbox)uiComponent).isDisabled();
97 readonly = ((HtmlSelectManyListbox)uiComponent).isReadonly();
98 }
99 else if (uiComponent instanceof HtmlSelectOneListbox)
100 {
101 disabled = ((HtmlSelectOneListbox)uiComponent).isDisabled();
102 readonly = ((HtmlSelectOneListbox)uiComponent).isReadonly();
103 }
104 else
105 {
106 disabled = RendererUtils.getBooleanAttribute(uiComponent, HTML.DISABLED_ATTR, false);
107 readonly = RendererUtils.getBooleanAttribute(uiComponent, HTML.READONLY_ATTR, false);
108 }
109 if (!disabled && readonly) {
110 disabled = MyfacesConfig.getCurrentInstance(facesContext
111 .getExternalContext()).isReadonlyAsDisabledForSelect();
112 }
113 return disabled;
114 }
115
116
117 public void decode(FacesContext facesContext, UIComponent uiComponent)
118 {
119 RendererUtils.checkParamValidity(facesContext, uiComponent, null);
120
121 if (uiComponent instanceof UISelectMany)
122 {
123 HtmlRendererUtils.decodeUISelectMany(facesContext, uiComponent);
124 }
125 else if (uiComponent instanceof UISelectOne)
126 {
127 HtmlRendererUtils.decodeUISelectOne(facesContext, uiComponent);
128 }
129 else
130 {
131 throw new IllegalArgumentException("Unsupported component class " + uiComponent.getClass().getName());
132 }
133 }
134
135 public Object getConvertedValue(FacesContext facesContext, UIComponent uiComponent, Object submittedValue) throws ConverterException
136 {
137 org.apache.myfaces.shared_orchestra.renderkit.RendererUtils.checkParamValidity(facesContext, uiComponent, null);
138
139 if (uiComponent instanceof UISelectMany)
140 {
141 return org.apache.myfaces.shared_orchestra.renderkit.RendererUtils.getConvertedUISelectManyValue(facesContext,
142 (UISelectMany)uiComponent,
143 submittedValue);
144 }
145 else if (uiComponent instanceof UISelectOne)
146 {
147 return RendererUtils.getConvertedUIOutputValue(facesContext,
148 (UISelectOne)uiComponent,
149 submittedValue);
150 }
151 else
152 {
153 throw new IllegalArgumentException("Unsupported component class " + uiComponent.getClass().getName());
154 }
155 }
156
157 }