aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit/ui/AbstractSelect.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/itmill/toolkit/ui/AbstractSelect.java')
-rw-r--r--src/com/itmill/toolkit/ui/AbstractSelect.java25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/com/itmill/toolkit/ui/AbstractSelect.java b/src/com/itmill/toolkit/ui/AbstractSelect.java
index 939cdd248d..aa928548d7 100644
--- a/src/com/itmill/toolkit/ui/AbstractSelect.java
+++ b/src/com/itmill/toolkit/ui/AbstractSelect.java
@@ -407,7 +407,11 @@ public abstract class AbstractSelect extends AbstractField implements
LinkedList s = new LinkedList();
for (int i = 0; i < ka.length; i++) {
Object id = this.itemIdMapper.get(ka[i]);
- if (id != null && containsId(id)) {
+ if (!isNullSelectionAllowed()
+ && (id == null || id == getNullSelectionItemId())) {
+ // skip empty selection if nullselection is not allowed
+ requestRepaint();
+ } else if (id != null && containsId(id)) {
s.add(id);
} else if (this.itemIdMapper.isNewIdKey(ka[i])
&& newitem != null && newitem.length() > 0) {
@@ -415,6 +419,12 @@ public abstract class AbstractSelect extends AbstractField implements
}
}
+ if (!isNullSelectionAllowed() && s.size() < 1) {
+ // empty selection not allowed, keep old value
+ requestRepaint();
+ return;
+ }
+
// Limits the deselection to the set of visible items
// (non-visible items can not be deselected)
Collection visible = getVisibleItemIds();
@@ -431,8 +441,14 @@ public abstract class AbstractSelect extends AbstractField implements
}
} else {
// Single select mode
+ if (!isNullSelectionAllowed()
+ && (ka.length == 0 || ka[0] == null || ka[0] == getNullSelectionItemId())) {
+ requestRepaint();
+ return;
+ }
if (ka.length == 0) {
- // Allows deselection only if the deselected item is visible
+ // Allows deselection only if the deselected item is
+ // visible
Object current = getValue();
Collection visible = getVisibleItemIds();
if (visible != null && visible.contains(current)) {
@@ -440,7 +456,10 @@ public abstract class AbstractSelect extends AbstractField implements
}
} else {
Object id = this.itemIdMapper.get(ka[0]);
- if (id != null && id.equals(getNullSelectionItemId())) {
+ if (!isNullSelectionAllowed() && id == null) {
+ requestRepaint();
+ } else if (id != null
+ && id.equals(getNullSelectionItemId())) {
setValue(null, true);
} else if (this.itemIdMapper.isNewIdKey(ka[0])) {
setValue(newitem);