Author: abelevich
Date: 2008-01-04 13:16:08 -0500 (Fri, 04 Jan 2008)
New Revision: 5147
Modified:
trunk/sandbox/ui/combobox/src/main/java/org/richfaces/renderkit/ComboBoxBaseRenderer.java
Log:
add SelectItem, SelectItems support
Modified:
trunk/sandbox/ui/combobox/src/main/java/org/richfaces/renderkit/ComboBoxBaseRenderer.java
===================================================================
---
trunk/sandbox/ui/combobox/src/main/java/org/richfaces/renderkit/ComboBoxBaseRenderer.java 2008-01-04
18:15:04 UTC (rev 5146)
+++
trunk/sandbox/ui/combobox/src/main/java/org/richfaces/renderkit/ComboBoxBaseRenderer.java 2008-01-04
18:16:08 UTC (rev 5147)
@@ -1,11 +1,16 @@
package org.richfaces.renderkit;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
+import javax.faces.convert.Converter;
+import javax.faces.model.SelectItem;
import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.javascript.JSReference;
@@ -13,6 +18,7 @@
import org.ajax4jsf.javascript.ScriptUtils;
import org.ajax4jsf.renderkit.HeaderResourcesRendererBase;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
+import org.ajax4jsf.util.SelectUtils;
import org.richfaces.component.UIComboBox;
/**
@@ -23,6 +29,8 @@
*/
public class ComboBoxBaseRenderer extends HeaderResourcesRendererBase {
+ private ArrayList <String> valuesList = null;
+
protected Class<UIComboBox> getComponentClass() {
return UIComboBox.class;
}
@@ -32,27 +40,58 @@
Object suggestionValues = comboBox.getSuggestionValues();
ResponseWriter writer = context.getResponseWriter();
+ valuesList = new ArrayList<String>();
+
if (suggestionValues != null) {
- Object [] items = null;
-
if (suggestionValues instanceof Collection) {
- Collection <String> itemsCollection =
(Collection<String>)suggestionValues;
- items = itemsCollection.toArray();
+ for (Iterator iterator = ((Collection)suggestionValues).iterator();
iterator.hasNext();) {
+ String value = getConvertedStringValue(context, comboBox, iterator.next()) ;
+ valuesList.add(value);
+ encodeSuggestion(writer, comboBox, value);
+ }
} else if (suggestionValues.getClass().isArray()) {
- items = (Object []) suggestionValues;
+ Object [] suggestions = (Object [])suggestionValues;
+ for (int i = 0; i < suggestions.length; i++) {
+ String value = getConvertedStringValue(context, comboBox, suggestions[i]);
+ valuesList.add(value);
+ encodeSuggestion(writer, comboBox, value );
+ }
} else {
- throw new IllegalArgumentException("suggestionValues should be Collection of
objects or array");
+ throw new IllegalArgumentException("suggestionValues should be Collection or
array");
}
-
- for (int i = 0; i < items.length; i++) {
- String suggestion = (String)items[i];
- encodeSuggestion(writer, comboBox, suggestion);
+
+ }
+
+ List <SelectItem> selectItems = SelectUtils.getSelectItems(context, component);
+ if(!selectItems.isEmpty()) {
+ for (Iterator <SelectItem> iterator = selectItems.iterator();
iterator.hasNext();) {
+ SelectItem selectItem = iterator.next();
+ String value = getConvertedStringValue(context, comboBox, selectItem.getValue());
+ valuesList.add(value);
+ encodeSuggestion(writer, comboBox, value);
}
}
+
+ }
+
+ protected String getConvertedStringValue(FacesContext context, UIComboBox comboBox,
Object value) {
+ Converter converter = comboBox.getConverter();
+ if (converter == null) {
+ if (value == null) {
+ return "";
+ } else if (value instanceof String) {
+ return (String) value;
+ } else {
+ String message = "Value is not String (class=" + value.getClass().getName()
+ ", value=" + value
+ + ") and component " + comboBox.getClientId(context) + " does not
have a Converter";
+ throw new IllegalArgumentException(message);
+ }
+ }
+ return converter.getAsString(context, comboBox, value);
}
- protected void encodeSuggestion(ResponseWriter writer, UIComboBox comboBox, String
value) throws IOException{
+ public void encodeSuggestion(ResponseWriter writer, UIComboBox comboBox, String value)
throws IOException{
writer.startElement(HTML.DIV_ELEM, comboBox);
writer.writeAttribute(HTML.class_ATTRIBUTE, "rich-combobox-item
rich-combobox-item-normal", null);
writer.write(value);
@@ -60,9 +99,11 @@
}
public String getItemsTextAsJSArray(FacesContext context, UIComponent component) {
- UIComboBox comboBox = (UIComboBox)component;
- Object suggestionValues = comboBox.getSuggestionValues();
- return ScriptUtils.toScript(suggestionValues);
+ String script = "";
+ if (valuesList != null) {
+ script = ScriptUtils.toScript(valuesList);
+ }
+ return script;
}
public String getAsEventHandler(FacesContext context, UIComponent component, String
attributeName) {
@@ -83,4 +124,9 @@
return ScriptUtils.toScript(result);
}
+
+ @Override
+ public boolean getRendersChildren() {
+ return super.getRendersChildren();
+ }
}