diff options
author | Leif Åstrand <leif@vaadin.com> | 2016-11-22 09:33:11 +0200 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2016-11-29 10:18:54 +0000 |
commit | 0d57c15577f5d5e15453024ce90144120948eae9 (patch) | |
tree | 2c15be36daeaf87e379ac73101a2c631888a9496 /server/src/main/java | |
parent | f2d8f812efa067b4baa7e27c0ea76f7596b291e6 (diff) | |
download | vaadin-framework-0d57c15577f5d5e15453024ce90144120948eae9.tar.gz vaadin-framework-0d57c15577f5d5e15453024ce90144120948eae9.zip |
Make it possible to reset single select values
Change-Id: I60c5d9f183d1955fbbd3341e3ac9f93aae755f80
Diffstat (limited to 'server/src/main/java')
-rw-r--r-- | server/src/main/java/com/vaadin/ui/AbstractSingleSelect.java | 8 | ||||
-rw-r--r-- | server/src/main/java/com/vaadin/ui/ComboBox.java | 18 |
2 files changed, 26 insertions, 0 deletions
diff --git a/server/src/main/java/com/vaadin/ui/AbstractSingleSelect.java b/server/src/main/java/com/vaadin/ui/AbstractSingleSelect.java index 6510b5305a..81126f3189 100644 --- a/server/src/main/java/com/vaadin/ui/AbstractSingleSelect.java +++ b/server/src/main/java/com/vaadin/ui/AbstractSingleSelect.java @@ -39,6 +39,8 @@ import com.vaadin.ui.declarative.DesignContext; import com.vaadin.ui.declarative.DesignException; import com.vaadin.util.ReflectTools; +import elemental.json.Json; + /** * An abstract base class for listing components that only support single * selection and no lazy loading of data items. @@ -241,6 +243,12 @@ public abstract class AbstractSingleSelect<T> extends AbstractListing<T> } doSetSelectedKey(key); + + // Update diffstate so that a change will be sent to the client if the + // selection is changed to its original value + updateDiffstate("selectedItemKey", + key == null ? Json.createNull() : Json.create(key)); + fireEvent(new SingleSelectionEvent<>(AbstractSingleSelect.this, true)); } diff --git a/server/src/main/java/com/vaadin/ui/ComboBox.java b/server/src/main/java/com/vaadin/ui/ComboBox.java index 22e6a698eb..b958ca9c32 100644 --- a/server/src/main/java/com/vaadin/ui/ComboBox.java +++ b/server/src/main/java/com/vaadin/ui/ComboBox.java @@ -52,6 +52,7 @@ import com.vaadin.ui.declarative.DesignAttributeHandler; import com.vaadin.ui.declarative.DesignContext; import com.vaadin.ui.declarative.DesignFormatter; +import elemental.json.Json; import elemental.json.JsonObject; /** @@ -670,4 +671,21 @@ public class ComboBox<T> extends AbstractSingleSelect<T> // ComboBox. return (DataCommunicator<T, String>) super.getDataCommunicator(); } + + @Override + protected void setSelectedFromClient(String key) { + super.setSelectedFromClient(key); + + /* + * The client side for combo box always expects a state change for + * selectedItemKey after it has sent a selection change. This means that + * we must store a value in the diffstate that guarantees that a new + * value will be sent, regardless of what the value actually is at the + * time when changes are sent. + * + * Keys are always strings (or null), so using a non-string type will + * always trigger a diff mismatch and a resend. + */ + updateDiffstate("selectedItemKey", Json.create(0)); + } } |