summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/src/main/java/com/vaadin/client/ui/VFilterSelect.java4
-rw-r--r--client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java10
-rw-r--r--server/src/main/java/com/vaadin/ui/ComboBox.java40
-rw-r--r--server/src/test/java/com/vaadin/tests/server/components/ComboBoxValueChangeTest.java26
-rw-r--r--shared/src/main/java/com/vaadin/shared/ui/combobox/ComboBoxServerRpc.java8
5 files changed, 48 insertions, 40 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/VFilterSelect.java b/client/src/main/java/com/vaadin/client/ui/VFilterSelect.java
index 677e6f846e..066c70fbcf 100644
--- a/client/src/main/java/com/vaadin/client/ui/VFilterSelect.java
+++ b/client/src/main/java/com/vaadin/client/ui/VFilterSelect.java
@@ -1858,7 +1858,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
if (!(newKey.equals(selectedOptionKey) || ("".equals(newKey) && selectedOptionKey == null))) {
selectedOptionKey = newKey;
- connector.sendSelection(new String[] { selectedOptionKey });
+ connector.sendSelection(selectedOptionKey);
afterUpdateClientVariables();
// currentPage = -1; // forget the page
@@ -1870,7 +1870,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
// hard to interpret that new clause added here :-(
selectedOptionKey = newKey;
explicitSelectedCaption = null;
- connector.sendSelection(new String[] { selectedOptionKey });
+ connector.sendSelection(selectedOptionKey);
afterUpdateClientVariables();
}
diff --git a/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java b/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java
index c4a9856311..2b02b0dfca 100644
--- a/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java
+++ b/client/src/main/java/com/vaadin/client/ui/combobox/ComboBoxConnector.java
@@ -417,10 +417,9 @@ public class ComboBoxConnector extends AbstractFieldConnector implements
* @since
*/
public void requestFirstPage() {
+ sendSelection(null);
getConnection().updateVariable(getConnectorId(), "filter", "", false);
- getConnection().updateVariable(getConnectorId(), "page", 0, false);
- getConnection().updateVariable(getConnectorId(), "selected",
- new String[] {}, immediate);
+ getConnection().updateVariable(getConnectorId(), "page", 0, true);
}
/**
@@ -453,9 +452,8 @@ public class ComboBoxConnector extends AbstractFieldConnector implements
* @param selection
* the current selection
*/
- public void sendSelection(String[] selection) {
- getConnection().updateVariable(getConnectorId(), "selected", selection,
- immediate);
+ public void sendSelection(String selection) {
+ rpc.setSelectedItem(selection);
}
/**
diff --git a/server/src/main/java/com/vaadin/ui/ComboBox.java b/server/src/main/java/com/vaadin/ui/ComboBox.java
index e6b7b2be94..56fb649715 100644
--- a/server/src/main/java/com/vaadin/ui/ComboBox.java
+++ b/server/src/main/java/com/vaadin/ui/ComboBox.java
@@ -89,6 +89,20 @@ public class ComboBox extends AbstractSelect implements
}
}
}
+
+ @Override
+ public void setSelectedItem(String item) {
+ if (item == null) {
+ setValue(null, true);
+ } else {
+ final Object id = itemIdMapper.get(item);
+ if (id != null && id.equals(getNullSelectionItemId())) {
+ setValue(null, true);
+ } else {
+ setValue(id, true);
+ }
+ }
+ }
};
FocusAndBlurServerRpcImpl focusBlurRpc = new FocusAndBlurServerRpcImpl(this) {
@@ -267,8 +281,7 @@ public class ComboBox extends AbstractSelect implements
boolean nullFilteredOut = isFilteringNeeded();
// null option is needed and not filtered out, even if not on
- // current
- // page
+ // current page
boolean nullOptionVisible = needNullSelectOption
&& !nullFilteredOut;
@@ -735,29 +748,6 @@ public class ComboBox extends AbstractSelect implements
// Not calling super.changeVariables due the history of select
// component hierarchy
- // Selection change
- if (variables.containsKey("selected")) {
- final String[] ka = (String[]) variables.get("selected");
-
- // Single select mode
- if (ka.length == 0) {
-
- // Allows deselection only if the deselected item is visible
- final Object current = getValue();
- final Collection<?> visible = getVisibleItemIds();
- if (visible != null && visible.contains(current)) {
- setValue(null, true);
- }
- } else {
- final Object id = itemIdMapper.get(ka[0]);
- if (id != null && id.equals(getNullSelectionItemId())) {
- setValue(null, true);
- } else {
- setValue(id, true);
- }
- }
- }
-
String newFilter;
if ((newFilter = (String) variables.get("filter")) != null) {
// this is a filter request
diff --git a/server/src/test/java/com/vaadin/tests/server/components/ComboBoxValueChangeTest.java b/server/src/test/java/com/vaadin/tests/server/components/ComboBoxValueChangeTest.java
index 9d8901e129..887cc5fe48 100644
--- a/server/src/test/java/com/vaadin/tests/server/components/ComboBoxValueChangeTest.java
+++ b/server/src/test/java/com/vaadin/tests/server/components/ComboBoxValueChangeTest.java
@@ -1,11 +1,11 @@
package com.vaadin.tests.server.components;
-import java.util.HashMap;
-import java.util.Map;
-
import org.junit.Before;
import com.vaadin.legacy.ui.LegacyAbstractField;
+import com.vaadin.server.ServerRpcManager;
+import com.vaadin.server.ServerRpcMethodInvocation;
+import com.vaadin.shared.ui.combobox.ComboBoxServerRpc;
import com.vaadin.ui.ComboBox;
/**
@@ -19,16 +19,28 @@ public class ComboBoxValueChangeTest extends
@Before
public void setUp() {
- ComboBox combo = new ComboBox();
+ ComboBox combo = new ComboBox() {
+ @Override
+ public String getConnectorId() {
+ return "id";
+ }
+ };
combo.addItem("myvalue");
super.setUp(combo);
}
@Override
protected void setValue(LegacyAbstractField<Object> field) {
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("selected", new String[] { "myvalue" });
- ((ComboBox) field).changeVariables(field, variables);
+ ComboBox combo = (ComboBox) field;
+ ServerRpcMethodInvocation invocation = new ServerRpcMethodInvocation(
+ combo.getConnectorId(), ComboBoxServerRpc.class,
+ "setSelectedItem", 1);
+ invocation.setParameters(new Object[] { "myvalue" });
+ try {
+ ServerRpcManager.applyInvocation(combo, invocation);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
}
diff --git a/shared/src/main/java/com/vaadin/shared/ui/combobox/ComboBoxServerRpc.java b/shared/src/main/java/com/vaadin/shared/ui/combobox/ComboBoxServerRpc.java
index 04d93c9062..38704b5169 100644
--- a/shared/src/main/java/com/vaadin/shared/ui/combobox/ComboBoxServerRpc.java
+++ b/shared/src/main/java/com/vaadin/shared/ui/combobox/ComboBoxServerRpc.java
@@ -31,4 +31,12 @@ public interface ComboBoxServerRpc extends ServerRpc {
* user entered string value for the new item
*/
public void createNewItem(String itemValue);
+
+ /**
+ * Set the current selection.
+ *
+ * @param item
+ * the id of a single item or null to deselect the current value
+ */
+ public void setSelectedItem(String item);
}