From: Henri Sara Date: Fri, 6 Nov 2015 08:54:10 +0000 (+0200) Subject: Send ComboBox selection with RPC (#19929) X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b4ffb1100e7a8982025031babe64b58651896a67;p=vaadin-framework.git Send ComboBox selection with RPC (#19929) Send the selection from the client to the server with RPC. Change-Id: Ic32d869c3dc2a8806f9c7cfd1f3db8263a5379a9 --- 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 1bca00f6a7..5e1ee61642 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 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 6c42f4e27c..702afe5c90 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 @@ -404,10 +404,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); } /** @@ -440,9 +439,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 2caa95fa61..597410bd48 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 8bc1eb87df..415bd11cf6 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,10 +1,10 @@ package com.vaadin.tests.server.components; -import java.util.HashMap; -import java.util.Map; - import org.junit.Before; +import com.vaadin.server.ServerRpcManager; +import com.vaadin.server.ServerRpcMethodInvocation; +import com.vaadin.shared.ui.combobox.ComboBoxServerRpc; import com.vaadin.ui.AbstractField; 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(AbstractField field) { - Map variables = new HashMap(); - 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); }