Send the selection from the client to the server with RPC.
Change-Id: Ic32d869c3dc2a8806f9c7cfd1f3db8263a5379a9
if (!(newKey.equals(selectedOptionKey) || ("".equals(newKey) && selectedOptionKey == null))) {
selectedOptionKey = newKey;
- connector.sendSelection(new String[] { selectedOptionKey });
+ connector.sendSelection(selectedOptionKey);
afterUpdateClientVariables();
// currentPage = -1; // forget the page
* @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);
}
/**
* @param selection
* the current selection
*/
- public void sendSelection(String[] selection) {
- getConnection().updateVariable(getConnectorId(), "selected", selection,
- immediate);
+ public void sendSelection(String selection) {
+ rpc.setSelectedItem(selection);
}
/**
}
}
}
+
+ @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) {
boolean nullFilteredOut = isFilteringNeeded();
// null option is needed and not filtered out, even if not on
- // current
- // page
+ // current page
boolean nullOptionVisible = needNullSelectOption
&& !nullFilteredOut;
// 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
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;
@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<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);
+ }
}
}
* 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);
}