[richfaces-svn-commits] JBoss Rich Faces SVN: r5066 - trunk/sandbox/ui/pickList/src/main/java/org/richfaces/renderkit.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Fri Dec 28 08:57:16 EST 2007
Author: abelevich
Date: 2007-12-28 08:57:16 -0500 (Fri, 28 Dec 2007)
New Revision: 5066
Modified:
trunk/sandbox/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java
Log:
add decode method
Modified: trunk/sandbox/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java
===================================================================
--- trunk/sandbox/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java 2007-12-28 13:01:15 UTC (rev 5065)
+++ trunk/sandbox/ui/pickList/src/main/java/org/richfaces/renderkit/PickListRenderer.java 2007-12-28 13:57:16 UTC (rev 5066)
@@ -6,12 +6,17 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectMany;
+import javax.faces.component.UISelectOne;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
import javax.faces.model.SelectItem;
import javax.faces.model.SelectItemGroup;
@@ -60,87 +65,59 @@
return SelectUtils.getSelectItems(context, component);
}
- private void encodeSelect(FacesContext facesContext, UIComponent uiComponent, String clientId, boolean disabled,
- int size, List selectItemsToDisplay, Converter converter, ResponseWriter writer) throws IOException {
+ public void decode(FacesContext context, UIComponent component) {
+
+ UIPickList picklist = (UIPickList)component;
+
+ if (!(picklist instanceof EditableValueHolder)) {
+ throw new IllegalArgumentException("Component " + picklist.getClientId(context) + " is not an EditableValueHolder");
+ }
+
+ String hiddenClientId = picklist.getClientId(context) + HIDDEN_SUFFIX;
+ Map paramValuesMap = context.getExternalContext().getRequestParameterValuesMap();
+
+ if (isDisabledOrReadOnly(picklist)) {
+ return;
+ }
+
+ if (paramValuesMap.containsKey(hiddenClientId)) {
+ String[] valuesInline = (String[]) paramValuesMap.get(hiddenClientId);
+
+ if (valuesInline[0].trim().equals("")) {
+ ((EditableValueHolder) picklist).setSubmittedValue(new String[] {});
+ } else {
+ String[] reqValues = valuesInline[0].split(",");
+ ((EditableValueHolder) picklist).setSubmittedValue(reqValues);
+ }
+ } else {
+ ((EditableValueHolder) picklist).setSubmittedValue(new String[] {});
+ }
+ }
- writer.startElement("select", uiComponent);
- writer.writeAttribute("id", clientId, "id");
- writer.writeAttribute("name", clientId, null);
- writer.writeAttribute("multiple", "true", null);
+ private boolean isDisabledOrReadOnly(UIPickList picklist) {
+ return picklist.isDisplayValueOnly() || isTrue(picklist.getAttributes().get("disabled"));
+ }
- if (size == 0) {
- writer.writeAttribute("size", Integer.toString(selectItemsToDisplay.size()), null);
+ private static boolean isTrue(Object obj) {
+ if (!(obj instanceof Boolean)) {
+ return false;
+ }
+ return ((Boolean) obj).booleanValue();
+ }
+
+ @Override
+ public Object getConvertedValue(FacesContext context, UIComponent component, Object submittedValue)
+ throws ConverterException {
+
+ if ((component instanceof UISelectMany) && (submittedValue instanceof String[])) {
+ return SelectUtils.getConvertedUISelectManyValue(context,(UISelectMany)component, (String [])submittedValue);
+ } else if ((component instanceof UISelectOne) && (submittedValue instanceof String)) {
+ return SelectUtils.getConvertedUIInputValue(context, (UISelectOne)component, (String)submittedValue);
} else {
- writer.writeAttribute("size", Integer.toString(size), null);
- }
- if (disabled) {
- writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
- }
+ throw new IllegalArgumentException("Unsupported component class " + component.getClass().getName());
+ }
- renderSelectOptions(facesContext, uiComponent, converter, Collections.EMPTY_SET, selectItemsToDisplay);
- writer.writeText("", null);
- writer.endElement("select");
}
-
- public void renderSelectOptions(FacesContext context, UIComponent component, Converter converter, Set lookupSet,
- List selectItemList) throws IOException {
- ResponseWriter writer = context.getResponseWriter();
-
- for (Iterator it = selectItemList.iterator(); it.hasNext();) {
- SelectItem selectItem = (SelectItem) it.next();
-
- if (selectItem instanceof SelectItemGroup) {
- writer.startElement("optgroup", component);
- writer.writeAttribute("label", selectItem.getLabel(), null);
- SelectItem[] selectItems = ((SelectItemGroup) selectItem).getSelectItems();
- renderSelectOptions(context, component, converter, lookupSet, Arrays.asList(selectItems));
- writer.endElement("optgroup");
- } else {
- String itemStrValue = PickListUtils.getConvertedStringValue(context, component, converter, selectItem.getValue());
- writer.write('\t');
- writer.startElement("option", component);
-
- if (itemStrValue != null) {
- writer.writeAttribute(HTML.value_ATTRIBUTE, itemStrValue, null);
- }
-
- if (lookupSet.contains(itemStrValue))
- { //TODO/FIX: we always compare the String vales, better fill lookupSet with Strings only when useSubmittedValue==true, else use the real item value Objects
- writer.writeAttribute("selected", "selected", null);
- }
-
- boolean disabled = selectItem.isDisabled();
- if (disabled) {
- writer.writeAttribute(HTML.DISABLED_ATTR, HTML.DISABLED_ATTR, null);
- }
-
- String labelClass;
- boolean componentDisabled = ((Boolean)component.getAttributes().get("disabled")).booleanValue();
-
- if (componentDisabled || disabled) {
- labelClass = (String) component.getAttributes().get("disabledClass");
- } else {
- labelClass = (String) component.getAttributes().get("enabled");
- }
-
- if (labelClass != null) {
- writer.writeAttribute("class", labelClass, "labelClass");
- }
-
- Boolean booleanValue = (Boolean)component.getAttributes().get("escape");
- boolean escape = booleanValue != null ? booleanValue.booleanValue():true; //default is to escape
-
- if (escape) {
- writer.writeText(selectItem.getLabel(), null);
- } else {
- writer.write(selectItem.getLabel());
- }
-
- writer.endElement("option");
- }
- }
- }
-
@Override
protected void doEncodeEnd(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException {
@@ -196,6 +173,84 @@
writer.endElement(HTML.TR_ELEMENT);
writer.endElement("table");
}
+
+ private void encodeSelect(FacesContext facesContext, UIComponent uiComponent, String clientId, boolean disabled,
+ int size, List selectItemsToDisplay, Converter converter, ResponseWriter writer) throws IOException {
+
+ writer.startElement("select", uiComponent);
+ writer.writeAttribute("id", clientId, "id");
+ writer.writeAttribute("name", clientId, null);
+ writer.writeAttribute("multiple", "true", null);
+
+ if (size == 0) {
+ writer.writeAttribute("size", Integer.toString(selectItemsToDisplay.size()), null);
+ } else {
+ writer.writeAttribute("size", Integer.toString(size), null);
+ }
+ if (disabled) {
+ writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
+ }
+
+ renderSelectOptions(facesContext, uiComponent, converter, Collections.EMPTY_SET, selectItemsToDisplay);
+ writer.writeText("", null);
+ writer.endElement("select");
+ }
+
+ public void renderSelectOptions(FacesContext context, UIComponent component, Converter converter, Set lookupSet,
+ List selectItemList) throws IOException {
+ ResponseWriter writer = context.getResponseWriter();
+
+ for (Iterator it = selectItemList.iterator(); it.hasNext();) {
+ SelectItem selectItem = (SelectItem) it.next();
+
+ if (selectItem instanceof SelectItemGroup) {
+ writer.startElement("optgroup", component);
+ writer.writeAttribute("label", selectItem.getLabel(), null);
+ SelectItem[] selectItems = ((SelectItemGroup) selectItem).getSelectItems();
+ renderSelectOptions(context, component, converter, lookupSet, Arrays.asList(selectItems));
+ writer.endElement("optgroup");
+ } else {
+ String itemStrValue = PickListUtils.getConvertedStringValue(context, component, converter, selectItem.getValue());
+ writer.write('\t');
+ writer.startElement("option", component);
+
+ if (itemStrValue != null) {
+ writer.writeAttribute(HTML.value_ATTRIBUTE, itemStrValue, null);
+ }
+
+ if (lookupSet.contains(itemStrValue)) { //TODO/FIX: we always compare the String vales, better fill lookupSet with Strings only when useSubmittedValue==true, else use the real item value Objects
+ writer.writeAttribute("selected", "selected", null);
+ }
+
+ boolean disabled = selectItem.isDisabled();
+ if (disabled) {
+ writer.writeAttribute(HTML.DISABLED_ATTR, HTML.DISABLED_ATTR, null);
+ }
+
+ boolean componentDisabled = isTrue(component.getAttributes().get("disabled"));
+ String labelClass = null;
+ if (componentDisabled || disabled) {
+ labelClass = (String) component.getAttributes().get("disabledClass");
+ } else {
+ labelClass = (String) component.getAttributes().get("enabled");
+ }
+
+ if (labelClass != null) {
+ writer.writeAttribute("class", labelClass, "labelClass");
+ }
+
+ boolean escape = isTrue(component.getAttributes().get("escape"));
+
+ if (escape) {
+ writer.writeText(selectItem.getLabel(), null);
+ } else {
+ writer.write(selectItem.getLabel());
+ }
+
+ writer.endElement("option");
+ }
+ }
+ }
private void encodeSwapButton(FacesContext facesContext, UIComponent uiComponent, String javaScriptFunction,
String text,ResponseWriter writer) throws IOException {
@@ -230,7 +285,7 @@
writer.endElement(HTML.INPUT_ELEM);
}
-
+
protected Class<? extends UIComponent> getComponentClass() {
return UIPickList.class;
}
More information about the richfaces-svn-commits
mailing list