diff options
Diffstat (limited to 'src/com/itmill/toolkit/ui/AbstractSelect.java')
-rw-r--r-- | src/com/itmill/toolkit/ui/AbstractSelect.java | 25 |
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); |