Kaynağa Gözat

Send ComboBox selection with RPC (#19929)

Send the selection from the client to the server with RPC.

Change-Id: Ic32d869c3dc2a8806f9c7cfd1f3db8263a5379a9
feature/databinding
Henri Sara 8 yıl önce
ebeveyn
işleme
733a33ab8d

+ 1
- 1
client/src/com/vaadin/client/ui/VFilterSelect.java Dosyayı Görüntüle

@@ -1631,7 +1631,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

+ 4
- 6
client/src/com/vaadin/client/ui/combobox/ComboBoxConnector.java Dosyayı Görüntüle

@@ -396,10 +396,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);
}

/**
@@ -432,9 +431,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);
}

/**

+ 15
- 25
server/src/com/vaadin/ui/ComboBox.java Dosyayı Görüntüle

@@ -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) {
@@ -253,8 +267,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;

@@ -721,29 +734,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

+ 19
- 7
server/tests/src/com/vaadin/tests/server/components/ComboBoxValueChangeTest.java Dosyayı Görüntüle

@@ -1,8 +1,8 @@
package com.vaadin.tests.server.components;

import java.util.HashMap;
import java.util.Map;
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;

@@ -16,16 +16,28 @@ public class ComboBoxValueChangeTest extends
AbstractFieldValueChangeTestBase<Object> {
@Override
protected void setUp() throws Exception {
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);
}
}

}

+ 8
- 0
shared/src/com/vaadin/shared/ui/combobox/ComboBoxServerRpc.java Dosyayı Görüntüle

@@ -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);
}

Loading…
İptal
Kaydet