From e5c267110192441f92849d06cc83ebafd3c03f02 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 17 Sep 2012 09:09:16 +0200
Subject: [PATCH] OO-342: fix the tag (TextListCompenent) component which
 doesn't work with multipart/form

---
 .../impl/elements/TextBoxListElementImpl.java     | 14 +++++++++++++-
 .../textboxlist/TextBoxListComponent.java         | 15 ++++++++++++---
 2 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java
index 4fc80a8a0c8..37f05d78545 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java
@@ -28,7 +28,9 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.form.flexible.elements.TextBoxListElement;
 import org.olat.core.gui.components.textboxlist.ResultMapProvider;
+import org.olat.core.gui.components.textboxlist.TextBoxListComponent;
 import org.olat.core.gui.translator.Translator;
+import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 
 /**
@@ -63,7 +65,17 @@ public class TextBoxListElementImpl extends AbstractTextElement implements TextB
 
 	@Override
 	public void evalFormRequest(UserRequest ureq) {
-		component.dispatchRequest(ureq);		
+		String inputId = TextBoxListComponent.INPUT_SUFFIX + getFormDispatchId();
+		String cmd = ureq.getParameter(inputId);
+		if(StringHelper.containsNonWhitespace(cmd)) {
+			component.dispatchRequest(ureq);
+		} else {
+			//this one handle multipart/form too
+			String submitValue = getRootForm().getRequestParameter(inputId);
+			if(StringHelper.containsNonWhitespace(submitValue)) {
+				((TextBoxListElementComponent)component).setCmd(ureq, submitValue);
+			}	
+		}			
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java
index 12759094308..23431e8290b 100644
--- a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java
+++ b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java
@@ -45,6 +45,7 @@ import org.olat.core.gui.translator.Translator;
 import org.olat.core.logging.OLATRuntimeException;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.StringHelper;
 
 /**
  * Description:<br>
@@ -68,6 +69,7 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl {
 
 	// if changed, do so also in multiselect.js!
 	public static final String MORE_RESULTS_INDICATOR = ".....";
+	public static final String INPUT_SUFFIX = "textboxlistinput";
 
 	private String inputHint;
 
@@ -147,14 +149,21 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl {
 	 */
 	@Override
 	protected void doDispatchRequest(UserRequest ureq) {
-
 		String inputId = "textboxlistinput" + getFormDispatchId();
 		String cmd = ureq.getParameter(inputId);
 		if(cmd == null){
 			return;
 		}
+		setCmd(ureq, cmd);
+	}
+	
+	public void setCmd(UserRequest ureq, String cmd) {
+		if(!StringHelper.containsNonWhitespace(cmd)) {
+			return;
+		}
+		
 		String[] splitted = cmd.split(",");
-		ArrayList<String> cleanedItemValues = new ArrayList<String>();
+		List<String> cleanedItemValues = new ArrayList<String>();
 		for (String item : splitted) {
 			if (!StringUtils.isBlank(item))
 				cleanedItemValues.add(item.trim());
@@ -176,7 +185,7 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl {
 
 		if (logger.isDebug())
 			logger.debug("doDispatchRequest --> firing textBoxListEvent with current items: " + cleanedItemValues);
-		fireEvent(ureq, new TextBoxListEvent(cleanedItemValues));
+		fireEvent(ureq, new TextBoxListEvent(cleanedItemValues));	
 	}
 
 	/**
-- 
GitLab