Author: ivaynberg
Date: Tue Jul 24 15:03:40 2007
New Revision: 559236
URL: http://svn.apache.org/viewvc?view=rev&rev=559236
Log:
more tweaks for processing submitting input
Modified:
incubator/wicket/trunk/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/Select.java
Modified:
incubator/wicket/trunk/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/Select.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/Select.java?view=diff&rev=559236&r1=559235&r2=559236
==============================================================================
---
incubator/wicket/trunk/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/Select.java
(original)
+++
incubator/wicket/trunk/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/select/Select.java
Tue Jul 24 15:03:40 2007
@@ -25,6 +25,7 @@
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.lang.Objects;
+import org.apache.wicket.util.string.Strings;
/**
@@ -69,6 +70,8 @@
protected void convertInput()
{
+ boolean supportsMultiple = getModelObject() instanceof
Collection;
+
/*
* the input contains an array of full path of the selected
option
* components unless nothing was selected in which case the
input
@@ -82,6 +85,14 @@
return;
}
+ if (!supportsMultiple && paths.length > 1)
+ {
+ throw new WicketRuntimeException(
+ "The model of Select component ["
+ + getPath()
+ + "] is not of type
java.util.Collection, but more then one SelectOption component has been
selected. Either remove the multiple attribute from the select tag or make the
model of the Select component a collection");
+ }
+
List converted = new ArrayList(paths.length);
/*
@@ -91,32 +102,46 @@
for (int i = 0; i < paths.length; i++)
{
String path = paths[i];
-
- /*
- * option component path sans select component path =
relative path
- * from group to option since we know the option is
child of select
- */
- path = path.substring(getPath().length() + 1);
-
- // retrieve the selected option component
- SelectOption option = (SelectOption)get(path);
-
- if (option == null)
+ if (!Strings.isEmpty(path))
{
- throw new WicketRuntimeException(
- "submitted http post value ["
- +
paths.toString()
- + "] for
SelectOption component ["
- + getPath()
- + "] contains
an illegal relative path element ["
- + path
- + "] which does
not point to an SelectOption component. Due to this the Select component cannot
resolve the selected SelectOption component pointed to by the illegal value. A
possible reason is that component hierarchy changed between rendering and form
submission.");
+ /*
+ * option component path sans select component
path = relative
+ * path from group to option since we know the
option is child
+ * of select
+ */
+ path = path.substring(getPath().length() + 1);
+
+ // retrieve the selected option component
+ SelectOption option = (SelectOption)get(path);
+
+ if (option == null)
+ {
+ throw new WicketRuntimeException(
+ "submitted http post
value ["
+ +
paths.toString()
+ + "]
for SelectOption component ["
+ +
getPath()
+ + "]
contains an illegal relative path element ["
+ + path
+ + "]
which does not point to an SelectOption component. Due to this the Select
component cannot resolve the selected SelectOption component pointed to by the
illegal value. A possible reason is that component hierarchy changed between
rendering and form submission.");
+ }
+ converted.add(option.getModelObject());
}
- converted.add(option.getModelObject());
}
- setConvertedInput(converted);
+ if (converted.isEmpty())
+ {
+ setConvertedInput(null);
+ }
+ else if (!supportsMultiple)
+ {
+ setConvertedInput(converted.get(0));
+ }
+ else
+ {
+ setConvertedInput(converted);
+ }
}
@@ -126,28 +151,20 @@
public void updateModel()
{
Object object = getModelObject();
- boolean isModelCollection = object instanceof Collection;
-
- List converted = (List)getConvertedInput();
- if (!isModelCollection && converted.size() > 1)
- {
- throw new WicketRuntimeException(
- "The model of Select component ["
- + getPath()
- + "] is not of type
java.util.Collection, but more then one SelectOption component has been
selected. Either remove the multiple attribute from the select tag or make the
model of the Select component a collection");
- }
+ boolean supportsMultiple = object instanceof Collection;
+ Object converted = getConvertedInput();
/*
* update the model
*/
- if (isModelCollection)
+ if (supportsMultiple)
{
Collection modelCollection = (Collection)object;
modelChanging();
modelCollection.clear();
if (converted != null)
{
- modelCollection.addAll(converted);
+ modelCollection.addAll((Collection)converted);
}
modelChanged();
// force notify of model update via setObject()
@@ -155,12 +172,7 @@
}
else
{
- object = null;
- if (converted != null)
- {
- object = converted.get(0);
- }
- setModelObject(object);
+ setModelObject(converted);
}
}