[richfaces-svn-commits] JBoss Rich Faces SVN: r5147 - trunk/sandbox/ui/combobox/src/main/java/org/richfaces/renderkit.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Fri Jan 4 13:16:08 EST 2008


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();
+	}
 }




More information about the richfaces-svn-commits mailing list