1 33 34 package com.icesoft.faces.renderkit.dom_html_basic; 35 36 import com.icesoft.faces.context.DOMContext; 37 import org.w3c.dom.Element ; 38 import org.w3c.dom.Text ; 39 40 import javax.faces.component.UIComponent; 41 import javax.faces.component.UIInput; 42 import javax.faces.context.FacesContext; 43 import javax.faces.context.ResponseWriter; 44 import javax.faces.model.SelectItem; 45 import javax.faces.model.SelectItemGroup; 46 import java.io.IOException ; 47 import java.util.HashSet ; 48 import java.util.Iterator ; 49 import java.util.Set ; 50 51 52 public class SelectManyCheckboxListRenderer extends MenuRenderer { 53 54 public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) 55 throws IOException { 56 57 validateParameters(facesContext, uiComponent, null); 58 59 int counter = 0; 60 61 boolean renderVertically = false; 62 String layout = (String ) uiComponent.getAttributes().get("layout"); 63 if (layout != null) { 64 renderVertically = 65 layout.equalsIgnoreCase("pageDirection") ? true : false; 66 } 67 68 int border = getBorderSize(uiComponent); 69 70 DOMContext domContext = 71 DOMContext.attachDOMContext(facesContext, uiComponent); 72 73 Element rootTR = null; 74 75 if (domContext.isInitialized()) { 77 DOMContext.removeChildrenByTagName( 78 (Element ) domContext.getRootNode(), "tr"); 79 } else { 80 Element root = domContext.createElement("table"); 81 domContext.setRootNode(root); 82 if (idNotNull(uiComponent)) { 83 setRootElementId(facesContext, root, uiComponent); 84 } 85 } 86 87 Element rootTable = (Element ) domContext.getRootNode(); 88 String styleClass = 89 (String ) uiComponent.getAttributes().get("styleClass"); 90 if (styleClass != null) { 91 rootTable.setAttribute("class", styleClass); 92 } 93 String style = (String ) uiComponent.getAttributes().get("style"); 94 if (style != null && style.length() > 0) { 95 rootTable.setAttribute("style", style); 96 } 97 else { 98 rootTable.removeAttribute("style"); 99 } 100 rootTable.setAttribute("border", new Integer (border).toString()); 101 102 if (!renderVertically) { 103 rootTR = domContext.createElement("tr"); 104 rootTable.appendChild(rootTR); 105 } 106 107 Iterator options = getSelectItems(uiComponent); 108 109 Object componentValue = ((UIInput) uiComponent).getValue(); 112 113 while (options.hasNext()) { 114 SelectItem nextSelectItem = (SelectItem) options.next(); 115 116 counter++; 117 118 if (nextSelectItem instanceof SelectItemGroup) { 120 121 Element nextTR = null; 122 Element nextTD = null; 123 124 if (nextSelectItem.getLabel() != null) { 125 if (renderVertically) { 126 nextTR = domContext.createElement("tr"); 127 rootTable.appendChild(nextTR); 128 } 129 nextTD = domContext.createElement("td"); 130 nextTR.appendChild(nextTD); 131 Text label = domContext.getDocument() 132 .createTextNode(nextSelectItem.getLabel()); 133 nextTD.appendChild(label); 134 } 135 if (renderVertically) { 136 nextTR = domContext.createElement("tr"); 137 rootTable.appendChild(nextTR); 138 } 139 nextTD = domContext.createElement("td"); 140 nextTR.appendChild(nextTD); 141 142 SelectItem[] selectItemsArray = 143 ((SelectItemGroup) nextSelectItem).getSelectItems(); 144 for (int i = 0; i < selectItemsArray.length; ++i) { 145 renderOption(facesContext, uiComponent, selectItemsArray[i], 146 renderVertically, nextTR, counter, 147 componentValue); 148 } 149 } else { 150 renderOption(facesContext, uiComponent, nextSelectItem, 151 renderVertically, rootTR, counter, 152 componentValue); 153 } 154 } 155 156 domContext.stepOver(); 157 domContext.streamWrite(facesContext, uiComponent); 158 } 159 160 private int getBorderSize(UIComponent uiComponent) { 161 int border = 0; 162 Object borderAttribute = uiComponent.getAttributes().get("border"); 163 if (borderAttribute instanceof Integer ) { 164 if (((Integer ) borderAttribute).intValue() != Integer.MIN_VALUE) { 165 border = ((Integer ) borderAttribute).intValue(); 166 } 167 } else { 168 try { 169 border = Integer.valueOf(borderAttribute.toString()).intValue(); 170 } catch (NumberFormatException nfe) { 171 } 173 } 174 return border; 175 } 176 177 protected void renderOption(FacesContext facesContext, 178 UIComponent uiComponent, 179 SelectItem selectItem, boolean renderVertically, 180 Element rootTR, int counter, 181 Object componentValue) 182 throws IOException { 183 184 DOMContext domContext = 185 DOMContext.attachDOMContext(facesContext, uiComponent); 186 Element rootTable = (Element ) domContext.getRootNode(); 187 188 boolean disabled = false; 189 if (uiComponent.getAttributes().get("disabled") != null) { 190 if ((uiComponent.getAttributes().get("disabled")) 191 .equals(Boolean.TRUE)) { 192 disabled = true; 193 } 194 } 195 if (selectItem.isDisabled()) { 196 disabled = true; 197 } 198 199 if (renderVertically) { 200 rootTR = domContext.createElement("tr"); 201 rootTable.appendChild(rootTR); 202 } 203 Element td = domContext.createElement("td"); 204 rootTR.appendChild(td); 205 206 Element label = domContext.createElement("label"); 207 td.appendChild(label); 208 209 Element inputElement = domContext.createElement("input"); 210 inputElement 211 .setAttribute("name", uiComponent.getClientId(facesContext)); 212 inputElement.setAttribute("id", 213 uiComponent.getClientId(facesContext) + ":_" + 214 counter); 215 label.appendChild(inputElement); 216 HashSet excludes = new HashSet (); 217 String accesskey = 218 (String ) uiComponent.getAttributes().get("accesskey"); 219 if (accesskey != null) { 220 inputElement.setAttribute("accesskey", accesskey); 221 excludes.add("accesskey"); 222 } 223 224 String formattedOptionValue = formatComponentValue( 225 facesContext, 226 uiComponent, 227 selectItem.getValue()); 228 inputElement.setAttribute("value", formattedOptionValue); 229 inputElement.setAttribute("type", "checkbox"); 230 231 boolean isSelected; 232 Object submittedValues[] = 233 getSubmittedSelectedValues(uiComponent); 234 if (submittedValues != null) { 235 isSelected = isSelected(formattedOptionValue, submittedValues); 236 } else { 237 Object selectedValues = 238 getCurrentSelectedValues(uiComponent); 239 isSelected = isSelected(selectItem.getValue(), selectedValues); 240 } 241 242 if (isSelected) { 243 inputElement.setAttribute("checked", Boolean.TRUE.toString()); 244 } 245 if (disabled) { 246 inputElement.setAttribute("disabled", "disabled"); 247 } 248 249 250 String selectItemLabel = selectItem.getLabel(); 251 if (selectItemLabel != null) { 252 Text textNode = 253 domContext.getDocument().createTextNode(selectItemLabel); 254 inputElement.appendChild(textNode); 255 } 256 addJavaScript(facesContext, uiComponent, inputElement, excludes); 257 excludes.add("style"); 258 excludes.add("border"); 259 excludes.add("readonly"); 260 String [] excludesStringArray = new String [excludes.size()]; 261 excludesStringArray = (String []) excludes.toArray(excludesStringArray); 262 PassThruAttributeRenderer.renderAttributes( 263 facesContext, uiComponent, 264 inputElement, rootTable, 265 excludesStringArray); 266 } 267 268 protected void addJavaScript(FacesContext facesContext, 269 UIComponent uiComponent, Element root, 270 Set excludes) { 271 } 272 } | Popular Tags |