com.vaadin.flow.component.combobox.
Class ComboBoxBase<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem,TValue>
- java.lang.Object
-
- com.vaadin.flow.component.Component
-
- com.vaadin.flow.component.AbstractField<C,T>
-
- com.vaadin.flow.component.AbstractSinglePropertyField<TComponent,TValue>
-
- com.vaadin.flow.component.combobox.ComboBoxBase<TComponent,TItem,TValue>
-
Type Parameters:
TComponent
- Type of the component that extends from this classTItem
- Type of individual items that are selectable in the combo boxTValue
- Type of the selection / value of the extending componentAll Implemented Interfaces:
AttachNotifier
,BlurNotifier<TComponent>
,DetachNotifier
,Focusable<TComponent>
,FocusNotifier<TComponent>
,HasElement
,HasEnabled
,HasHelper
,HasLabel
,HasSize
,HasStyle
,HasTheme
,HasValidation
,HasValue<AbstractField.ComponentValueChangeEvent<TComponent,TValue>,TValue>
,HasValueAndElement<AbstractField.ComponentValueChangeEvent<TComponent,TValue>,TValue>
,HasAllowedCharPattern
,HasClearButton
,HasTooltip
,HasValidator<TValue>
,HasDataView<TItem,String,ComboBoxDataView<TItem>>
,HasLazyDataView<TItem,String,ComboBoxLazyDataView<TItem>>
,HasListDataView<TItem,ComboBoxListDataView<TItem>>
,Serializable
Direct Known Subclasses:
public abstract class ComboBoxBase<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem,TValue> extends AbstractSinglePropertyField<TComponent,TValue> implements HasStyle, Focusable<TComponent>, HasSize, HasValidation, HasHelper, HasTheme, HasLabel, HasClearButton, HasAllowedCharPattern, HasDataView<TItem,String,ComboBoxDataView<TItem>>, HasListDataView<TItem,ComboBoxListDataView<TItem>>, HasLazyDataView<TItem,String,ComboBoxLazyDataView<TItem>>, HasTooltip, HasValidator<TValue>
Provides base functionality for combo box related components, such as
ComboBox
See Also:
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ComboBoxBase.CustomValueSetEvent<TComponent extends ComboBoxBase<TComponent,?,?>>
Event that is dispatched from a combo box component, if the component allows setting custom values, and the user has entered a non-empty value that does not match any of the existing items
-
Nested classes/interfaces inherited from class com.vaadin.flow.component.AbstractField
AbstractField.ComponentValueChangeEvent<C extends Component,V>
-
Nested classes/interfaces inherited from interface com.vaadin.flow.component.BlurNotifier
BlurNotifier.BlurEvent<C extends Component>
-
Nested classes/interfaces inherited from interface com.vaadin.flow.component.FocusNotifier
FocusNotifier.FocusEvent<C extends Component>
-
Nested classes/interfaces inherited from interface com.vaadin.flow.component.HasValue
HasValue.ValueChangeEvent<V>, HasValue.ValueChangeListener<E extends HasValue.ValueChangeEvent<?>>
-
-
Constructor Summary
Constructors Constructor Description ComboBoxBase(String valuePropertyName, TValue defaultValue, Class<TValueProperty> valuePropertyType, SerializableBiFunction<TComponent,TValueProperty,TValue> presentationToModel, SerializableBiFunction<TComponent,TValue,TValueProperty> modelToPresentation)
Constructs a new ComboBoxBase instance
-
Method Summary
All Methods Modifier and Type Method Description Registration
addCustomValueSetListener(ComponentEventListener<ComboBoxBase.CustomValueSetEvent<TComponent>> listener)
Adds a listener for the event which is fired when user inputs a string value that does not match any existing items and commits it eg.
protected String
generateLabel(TItem item)
Generates a string label for a data item using the current item label generator
protected ComboBoxDataCommunicator<TItem>
getDataCommunicator()
Accesses the data communicator that is managed by the data controller
protected com.vaadin.flow.component.combobox.ComboBoxDataController<TItem>
getDataController()
Accesses the data controller that is managing data communication with the web component
protected CompositeDataGenerator<TItem>
getDataGenerator()
Accesses the data generator that is managed by the data controller
DataProvider<TItem,?>
getDataProvider()
Gets the data provider used by this ComboBox.
String
getErrorMessage()
The error message that should be displayed when the component becomes invalid
protected String
getFilter()
Filtering string the user has typed into the input field.
ComboBoxDataView<TItem>
getGenericDataView()
Gets the generic data view for the ComboBox.
ItemLabelGenerator<TItem>
getItemLabelGenerator()
Gets the item label generator that is used to produce the strings shown in the combo box for each item.
protected DataKeyMapper<TItem>
getKeyMapper()
Accesses the key mapper that is managed by the data controller
ComboBoxLazyDataView<TItem>
getLazyDataView()
Gets the lazy data view for the ComboBox.
ComboBoxListDataView<TItem>
getListDataView()
Gets the list data view for the ComboBox.
int
getPageSize()
Gets the page size, which is the number of items fetched at a time from the data provider.
String
getPlaceholder()
The placeholder text that should be displayed in the input element, when the user has not entered a value
protected com.vaadin.flow.component.combobox.ComboBoxRenderManager<TItem>
getRenderManager()
Accesses the render manager that is managing the custom renderer
boolean
isAllowCustomValue()
If
true
, the user can input string values that do not match to any existing item labels, which will fire aComboBoxBase.CustomValueSetEvent
.boolean
isAutofocus()
Whether the component should automatically receive focus when the page loads.
boolean
isAutoOpen()
Gets whether dropdown will open automatically or not.
boolean
isInvalid()
Whether the component has an invalid value or not.
boolean
isOpened()
Whether the dropdown is opened or not.
boolean
isRequired()
Sets whether the component requires a value to be considered in a valid state.
protected abstract boolean
isSelected(TItem item)
Whether the item is currently selected in the combo box.
protected void
onAttach(AttachEvent attachEvent)
Called when the component is attached to a UI.
protected void
onDetach(DetachEvent detachEvent)
Called when the component is detached from a UI.
protected abstract void
refreshValue()
Refresh value / selection of the web component after changes that might affect the presentation / rendering of items
protected void
runBeforeClientResponse(SerializableConsumer<UI> command)
Helper for running a command in the before client response hook
void
setAllowCustomValue(boolean allowCustomValue)
Enables or disables the component firing events for custom string input.
void
setAutofocus(boolean autofocus)
Sets the whether the component should automatically receive focus when the page loads.
void
setAutoOpen(boolean autoOpen)
Enables or disables the dropdown opening automatically.
void
setDataProvider(ComboBox.FetchItemsCallback<TItem> fetchItems, SerializableFunction<String,Integer> sizeCallback)
Deprecated.
use insteadsetItems(CallbackDataProvider.FetchCallback, CallbackDataProvider.CountCallback)
which provide access toComboBoxLazyDataView
void
setDataProvider(ComboBox.ItemFilter<TItem> itemFilter, ListDataProvider<TItem> listDataProvider)
Deprecated.
use insteadsetItems(ComboBox.ItemFilter, ListDataProvider)
which provide access toComboBoxListDataView
<C> void
setDataProvider(DataProvider<TItem,C> dataProvider, SerializableFunction<String,C> filterConverter)
Deprecated.
use instead one of thesetItems
methods which provide access to eitherComboBoxListDataView
orComboBoxLazyDataView
void
setDataProvider(DataProvider<TItem,String> dataProvider)
Deprecated.
use instead one of thesetItems
methods which provide access to eitherComboBoxListDataView
orComboBoxLazyDataView
void
setDataProvider(ListDataProvider<TItem> listDataProvider)
Deprecated.
use instead one of thesetItems
methods which provide access toComboBoxListDataView
void
setErrorMessage(String errorMessage)
Sets the error message that should be displayed when the component becomes invalid
protected void
setFilter(String filter)
Sets the filter string for the filter input.
void
setInvalid(boolean invalid)
Sets whether the component has an invalid value or not.
void
setItemLabelGenerator(ItemLabelGenerator<TItem> itemLabelGenerator)
Sets the item label generator that is used to produce the strings shown in the combo box for each item.
ComboBoxListDataView<TItem>
setItems(ComboBox.ItemFilter<TItem> itemFilter, ListDataProvider<TItem> listDataProvider)
Sets a ListDataProvider for this combo box and a filtering function for defining which items are displayed when user types into the combo box.
ComboBoxListDataView<TItem>
setItems(ComboBox.ItemFilter<TItem> itemFilter, Collection<TItem> items)
Sets the data items of this combo box and a filtering function for defining which items are displayed when user types into the combo box.
ComboBoxListDataView<TItem>
setItems(ComboBox.ItemFilter<TItem> itemFilter, TItem... items)
Sets the data items of this combo box and a filtering function for defining which items are displayed when user types into the combo box.
ComboBoxLazyDataView<TItem>
setItems(BackEndDataProvider<TItem,String> dataProvider)
Supply items with a
BackEndDataProvider
that lazy loads items from a backend.ComboBoxLazyDataView<TItem>
setItems(CallbackDataProvider.FetchCallback<TItem,String> fetchCallback)
Supply items lazily with a callback from a backend.
ComboBoxLazyDataView<TItem>
setItems(CallbackDataProvider.FetchCallback<TItem,String> fetchCallback, CallbackDataProvider.CountCallback<TItem,String> countCallback)
Supply items lazily with callbacks: the first one fetches the items based on offset, limit and an optional filter, the second provides the exact count of items in the backend.
ComboBoxDataView<TItem>
setItems(DataProvider<TItem,String> dataProvider)
Set a generic data provider for the component to use and returns the base
DataView
that provides API to get information on the items.ComboBoxDataView<TItem>
setItems(InMemoryDataProvider<TItem> dataProvider)
Deprecated.
does not work so don't useComboBoxDataView<TItem>
setItems(InMemoryDataProvider<TItem> inMemoryDataProvider, SerializableFunction<String,SerializablePredicate<TItem>> filterConverter)
Sets an in-memory data provider for the combo box to use, taking into account both in-memory filtering from data provider and combo box's text filter.
ComboBoxListDataView<TItem>
setItems(ListDataProvider<TItem> dataProvider)
Sets a ListDataProvider for the component to use and returns a
ListDataView
that provides information and allows operations on the items.ComboBoxListDataView<TItem>
setItems(Collection<TItem> items)
Sets the items from the given Collection and returns a
ListDataView
that provides information and allows operations on the items.void
setItems(Stream<TItem> streamOfItems)
Deprecated.
Because the stream is collected to a list anyway, usesetItems(Collection)
orsetItems(CallbackDataProvider.FetchCallback)
instead.<C> ComboBoxLazyDataView<TItem>
setItemsWithFilterConverter(CallbackDataProvider.FetchCallback<TItem,C> fetchCallback, CallbackDataProvider.CountCallback<TItem,C> countCallback, SerializableFunction<String,C> filterConverter)
Supply items lazily with callbacks: the first one fetches the items based on offset, limit and an optional filter, the second provides the exact count of items in the backend.
<C> ComboBoxLazyDataView<TItem>
setItemsWithFilterConverter(CallbackDataProvider.FetchCallback<TItem,C> fetchCallback, SerializableFunction<String,C> filterConverter)
Supply items lazily with a callback from a backend, using custom filter type.
void
setOpened(boolean opened)
Sets whether the dropdown should be opened or not.
void
setPageSize(int pageSize)
Sets the page size, which is the number of items requested at a time from the data provider.
void
setPlaceholder(String placeholder)
Sets the placeholder text that should be displayed in the input element, when the user has not entered a value
void
setRenderer(Renderer<TItem> renderer)
Sets the Renderer responsible to render the individual items in the list of possible choices of the ComboBox.
void
setRequired(boolean required)
Whether the component requires a value to be considered in a valid state.
void
setRequiredIndicatorVisible(boolean requiredIndicatorVisible)
Sets the required indicator visible or not.
void
setValue(TValue value)
Sets the value of this object.
protected void
validate()
-
Methods inherited from class com.vaadin.flow.component.AbstractSinglePropertyField
getSynchronizationRegistration, hasValidValue, setPresentationValue, setSynchronizedEvent
-
Methods inherited from class com.vaadin.flow.component.AbstractField
addValueChangeListener, getEmptyValue, getValue, isEmpty, setModelValue, valueEquals
-
Methods inherited from class com.vaadin.flow.component.Component
addListener, findAncestor, fireEvent, from, get, getChildren, getElement, getEventBus, getId, getListeners, getLocale, getParent, getTranslation, getTranslation, getTranslation, getTranslation, getTranslation, getTranslation, getUI, hasListener, isAttached, isTemplateMapped, isVisible, onEnabledStateChanged, scrollIntoView, set, setElement, setId, setVisible
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.vaadin.flow.component.AttachNotifier
addAttachListener
-
Methods inherited from interface com.vaadin.flow.component.BlurNotifier
addBlurListener
-
Methods inherited from interface com.vaadin.flow.component.DetachNotifier
addDetachListener
-
Methods inherited from interface com.vaadin.flow.component.Focusable
addFocusShortcut, blur, focus, getTabIndex, setTabIndex
-
Methods inherited from interface com.vaadin.flow.component.FocusNotifier
addFocusListener
-
Methods inherited from interface com.vaadin.flow.component.shared.HasAllowedCharPattern
getAllowedCharPattern, setAllowedCharPattern
-
Methods inherited from interface com.vaadin.flow.component.shared.HasClearButton
isClearButtonVisible, setClearButtonVisible
-
Methods inherited from interface com.vaadin.flow.component.HasElement
getElement
-
Methods inherited from interface com.vaadin.flow.component.HasEnabled
isEnabled, setEnabled
-
Methods inherited from interface com.vaadin.flow.component.HasHelper
getHelperComponent, getHelperText, setHelperComponent, setHelperText
-
Methods inherited from interface com.vaadin.flow.data.provider.HasListDataView
setItems
-
Methods inherited from interface com.vaadin.flow.component.HasSize
getHeight, getHeightUnit, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getWidth, getWidthUnit, setHeight, setHeight, setHeightFull, setMaxHeight, setMaxHeight, setMaxWidth, setMaxWidth, setMinHeight, setMinHeight, setMinWidth, setMinWidth, setSizeFull, setSizeUndefined, setWidth, setWidth, setWidthFull
-
Methods inherited from interface com.vaadin.flow.component.HasStyle
addClassName, addClassNames, getClassName, getClassNames, getStyle, hasClassName, removeClassName, removeClassNames, setClassName, setClassName
-
Methods inherited from interface com.vaadin.flow.component.HasTheme
addThemeName, addThemeNames, getThemeName, getThemeNames, hasThemeName, removeThemeName, removeThemeNames, setThemeName, setThemeName
-
Methods inherited from interface com.vaadin.flow.component.shared.HasTooltip
getTooltip, setTooltipText
-
Methods inherited from interface com.vaadin.flow.data.binder.HasValidator
addValidationStatusChangeListener, getDefaultValidator
-
Methods inherited from interface com.vaadin.flow.component.HasValue
clear, getOptionalValue
-
Methods inherited from interface com.vaadin.flow.component.HasValueAndElement
isReadOnly, isRequiredIndicatorVisible, setReadOnly
-
-
-
-
Constructor Detail
-
ComboBoxBase
public ComboBoxBase(String valuePropertyName, TValue defaultValue, Class<TValueProperty> valuePropertyType, SerializableBiFunction<TComponent,TValueProperty,TValue> presentationToModel, SerializableBiFunction<TComponent,TValue,TValueProperty> modelToPresentation)
Constructs a new ComboBoxBase instance
Type Parameters:
TValueProperty
- the type of the raw value of the Flow element propertyParameters:
valuePropertyName
- name of the value property of the web component that should be used to set values, or listen to value changesdefaultValue
- the default value of the componentvaluePropertyType
- the class that represents the type of the raw value of the Flow element propertypresentationToModel
- a function to convert a raw property value into a value using the user-specified model typemodelToPresentation
- a function to convert a value using the user-specified model type into a raw property value
-
-
Method Detail
-
isAutofocus
public boolean isAutofocus()
Whether the component should automatically receive focus when the page loads.
Returns:
true
if the component should automatically receive focus
-
setAutofocus
public void setAutofocus(boolean autofocus)
Sets the whether the component should automatically receive focus when the page loads. Defaults to
false
.Parameters:
autofocus
-true
component should automatically receive focus
-
getPageSize
public int getPageSize()
Gets the page size, which is the number of items fetched at a time from the data provider.
The page size is also the largest number of items that can support client-side filtering. If you provide more items than the page size, the component has to fall back to server-side filtering.
The default page size is 50.
Returns:
the maximum number of items sent per request
See Also:
-
setPageSize
public void setPageSize(int pageSize)
Sets the page size, which is the number of items requested at a time from the data provider. This does not guarantee a maximum query size to the backend; when the overlay has room to render more new items than the page size, multiple "pages" will be requested at once.
The page size is also the largest number of items that can support client-side filtering. If you provide more items than the page size, the component has to fall back to server-side filtering.
Setting the page size after the ComboBox has been rendered effectively resets the component, and the current page(s) and sent over again.
The default page size is 50.
Parameters:
pageSize
- the maximum number of items sent per request, should be greater than zero
-
isOpened
@Synchronize(property="opened", value="opened-changed") public boolean isOpened()
Whether the dropdown is opened or not.
Returns:
true
if the drop-down is opened,false
otherwise
-
setOpened
public void setOpened(boolean opened)
Sets whether the dropdown should be opened or not.
Parameters:
opened
-true
to open the drop-down,false
to close it
-
isAllowCustomValue
public boolean isAllowCustomValue()
If
true
, the user can input string values that do not match to any existing item labels, which will fire aComboBoxBase.CustomValueSetEvent
.Returns:
true
if the component fires custom value set events,false
otherwiseSee Also:
setAllowCustomValue(boolean)
,addCustomValueSetListener(ComponentEventListener)
-
setAllowCustomValue
public void setAllowCustomValue(boolean allowCustomValue)
Enables or disables the component firing events for custom string input.
When enabled, a
ComboBoxBase.CustomValueSetEvent
will be fired when the user inputs a string value that does not match any existing items and commits it eg. by blurring or pressing the enter-key.Note that ComboBox doesn't do anything with the custom value string automatically. Use the
addCustomValueSetListener(ComponentEventListener)
method to determine how the custom value should be handled. For example, when the ComboBox hasString
as the value type, you can add a listener which sets the custom string as the value of the ComboBox withsetValue(Object)
.Setting to
true
also allows an unfocused ComboBox to display a string that doesn't match any of its items nor its current value, unless this is explicitly handled withaddCustomValueSetListener(ComponentEventListener)
. When set tofalse
, an unfocused ComboBox will always display the label of the currently selected item.Parameters:
allowCustomValue
-true
to enable custom value set events,false
to disable themSee Also:
-
getFilter
@Synchronize(property="filter", value="filter-changed") protected String getFilter()
Filtering string the user has typed into the input field.
Returns:
the filter string
-
setFilter
protected void setFilter(String filter)
Sets the filter string for the filter input.
Setter is only required to allow using @Synchronize
Parameters:
filter
- the String value to set
-
isInvalid
public boolean isInvalid()
Whether the component has an invalid value or not.
Specified by:
isInvalid
in interfaceHasValidation
Returns:
whether the component input is valid
-
setInvalid
public void setInvalid(boolean invalid)
Sets whether the component has an invalid value or not.
Specified by:
setInvalid
in interfaceHasValidation
Parameters:
invalid
- new value for component input validity
-
isRequired
public boolean isRequired()
Sets whether the component requires a value to be considered in a valid state.
Returns:
true
if the component requires a value to be valid
-
setRequired
public void setRequired(boolean required)
Whether the component requires a value to be considered in a valid state.
Parameters:
required
-true
if the component requires a value to be valid
-
getErrorMessage
public String getErrorMessage()
The error message that should be displayed when the component becomes invalid
Specified by:
getErrorMessage
in interfaceHasValidation
Returns:
current error message
-
setErrorMessage
public void setErrorMessage(String errorMessage)
Sets the error message that should be displayed when the component becomes invalid
Specified by:
setErrorMessage
in interfaceHasValidation
Parameters:
errorMessage
- a new error message
-
getPlaceholder
public String getPlaceholder()
The placeholder text that should be displayed in the input element, when the user has not entered a value
Returns:
the placeholder text
-
setPlaceholder
public void setPlaceholder(String placeholder)
Sets the placeholder text that should be displayed in the input element, when the user has not entered a value
Parameters:
placeholder
- the placeholder text
-
isAutoOpen
public boolean isAutoOpen()
Gets whether dropdown will open automatically or not.
Returns:
true
if enabled,false
otherwise
-
setAutoOpen
public void setAutoOpen(boolean autoOpen)
Enables or disables the dropdown opening automatically. If
false
the dropdown is only opened when clicking the toggle button or pressing Up or Down arrow keys.Parameters:
autoOpen
-false
to prevent the dropdown from opening automatically
-
setRequiredIndicatorVisible
public void setRequiredIndicatorVisible(boolean requiredIndicatorVisible)
Description copied from interface:
HasValue
Sets the required indicator visible or not.
If set visible, it is visually indicated in the user interface.
The method is intended to be used with
Binder
which does server-side validation. In case HTML element has its own (client-side) validation it should be disabled whensetRequiredIndicatorVisible(true)
is called and re-enabled back onsetRequiredIndicatorVisible(false)
. It's responsibility of each component implementation to follow the contract so that the method call doesn't do anything else than show/hide the "required" indication. Usually components provide their ownsetRequired
method which should be called in case the client-side validation is required.Specified by:
setRequiredIndicatorVisible
in interfaceHasValue<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem>
Specified by:
setRequiredIndicatorVisible
in interfaceHasValueAndElement<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem>
Parameters:
requiredIndicatorVisible
-true
to make the required indicator visible,false
if not
-
setItemLabelGenerator
public void setItemLabelGenerator(ItemLabelGenerator<TItem> itemLabelGenerator)
Sets the item label generator that is used to produce the strings shown in the combo box for each item. By default,
String.valueOf(Object)
is used.When the
setRenderer(Renderer)
is used, the ItemLabelGenerator is only used to show the selected item label.Parameters:
itemLabelGenerator
- the item label provider to use, not null
-
getItemLabelGenerator
public ItemLabelGenerator<TItem> getItemLabelGenerator()
Gets the item label generator that is used to produce the strings shown in the combo box for each item.
Returns:
the item label generator used, not null
-
generateLabel
protected String generateLabel(TItem item)
Generates a string label for a data item using the current item label generator
Parameters:
item
- the data itemReturns:
string label for the data item
-
setRenderer
public void setRenderer(Renderer<TItem> renderer)
Sets the Renderer responsible to render the individual items in the list of possible choices of the ComboBox. It doesn't affect how the selected item is rendered - that can be configured by using
setItemLabelGenerator(ItemLabelGenerator)
.Parameters:
renderer
- a renderer for the items in the selection list of the ComboBox, notnull
Note that filtering of the ComboBox is not affected by the renderer that is set here. Filtering is done on the original values and can be affected by
setItemLabelGenerator(ItemLabelGenerator)
.
-
setValue
public void setValue(TValue value)
Description copied from interface:
HasValue
Sets the value of this object. If the new value is not equal to
getValue()
, fires a value change event. May throwIllegalArgumentException
if the value is not acceptable.Implementation note: the implementing class should document whether null values are accepted or not, and override
HasValue.getEmptyValue()
if the empty value is notnull
.Specified by:
setValue
in interfaceHasValue<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem>
Overrides:
setValue
in classAbstractField<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TValue>
Parameters:
value
- the new value
-
onAttach
protected void onAttach(AttachEvent attachEvent)
Description copied from class:
Component
Called when the component is attached to a UI.
The default implementation does nothing.
This method is invoked before the
AttachEvent
is fired for the component.
-
onDetach
protected void onDetach(DetachEvent detachEvent)
Description copied from class:
Component
Called when the component is detached from a UI.
The default implementation does nothing.
This method is invoked before the
DetachEvent
is fired for the component.
-
addCustomValueSetListener
public Registration addCustomValueSetListener(ComponentEventListener<ComboBoxBase.CustomValueSetEvent<TComponent>> listener)
Adds a listener for the event which is fired when user inputs a string value that does not match any existing items and commits it eg. by blurring or pressing the enter-key.
Note that ComboBox doesn't do anything with the custom value string automatically. Use this method to determine how the custom value should be handled. For example, when the ComboBox has
String
as the value type, you can add a listener which sets the custom string as the value of the ComboBox withsetValue(Object)
.As a side effect, this makes the ComboBox allow custom values. If you want to disable the firing of custom value set events once the listener is added, please disable it explicitly via the
setAllowCustomValue(boolean)
method.The custom value becomes disallowed automatically once the last custom value set listener is removed.
Parameters:
listener
- the listener to be notified when a new value is filledReturns:
a
Registration
for removing the event listenerSee Also:
-
getListDataView
public ComboBoxListDataView<TItem> getListDataView()
Gets the list data view for the ComboBox. This data view should only be used when the items are in-memory set with:
setItems(Collection)
HasListDataView.setItems(Object[])
setItems(ListDataProvider)
setItems(ComboBox.ItemFilter, ListDataProvider)
setItems(ComboBox.ItemFilter, Object[])
setItems(ComboBox.ItemFilter, Collection)
getLazyDataView()
instead.Specified by:
getListDataView
in interfaceHasListDataView<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem>
Returns:
the list data view that provides access to the items in the ComboBox
-
setItems
public ComboBoxListDataView<TItem> setItems(Collection<TItem> items)
Sets the items from the given Collection and returns a
ListDataView
that provides information and allows operations on the items.Filtering will use a case insensitive match to show all items where the filter text is a substring of the label displayed for that item, which you can configure with
setItemLabelGenerator(ItemLabelGenerator)
.Filtering will be handled in the client-side if the size of the data set is less than the page size. To force client-side filtering with a larger data set (at the cost of increased network traffic), you can increase the page size with
setPageSize(int)
.Setting the items resets the combo box's value to
null
.Specified by:
setItems
in interfaceHasListDataView<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem>
Parameters:
items
- the items to display, notnull
Returns:
ListDataView providing access to the items
-
setItems
public ComboBoxListDataView<TItem> setItems(ComboBox.ItemFilter<TItem> itemFilter, Collection<TItem> items)
Sets the data items of this combo box and a filtering function for defining which items are displayed when user types into the combo box.
Note that defining a custom filter will force the component to make server roundtrips to handle the filtering. Otherwise it can handle filtering in the client-side, if the size of the data set is less than the
pageSize
.Setting the items resets the combo box's value to
null
.The returned data view object can be used for further access to combo box items, or later on fetched with
getListDataView()
. For using lazy data loading, use one of thesetItems
methods which take a fetch callback parameter instead.Parameters:
itemFilter
- filter to check if an item is shown when user typed some text into the ComboBoxitems
- the data items to displayReturns:
the in-memory data view instance that provides access to the data bound to the combo box
-
setItems
public ComboBoxListDataView<TItem> setItems(ComboBox.ItemFilter<TItem> itemFilter, TItem... items)
Sets the data items of this combo box and a filtering function for defining which items are displayed when user types into the combo box.
Note that defining a custom filter will force the component to make server roundtrips to handle the filtering. Otherwise it can handle filtering in the client-side, if the size of the data set is less than the
pageSize
.Setting the items resets the combo box's value to
null
.The returned data view object can be used for further access to combo box items, or later on fetched with
getListDataView()
. For using lazy data loading, use one of thesetItems
methods which take a fetch callback parameter instead.Parameters:
itemFilter
- filter to check if an item is shown when user typed some text into the ComboBoxitems
- the data items to displayReturns:
the in-memory data view instance that provides access to the data bound to the combo box
-
setItems
public ComboBoxListDataView<TItem> setItems(ComboBox.ItemFilter<TItem> itemFilter, ListDataProvider<TItem> listDataProvider)
Sets a ListDataProvider for this combo box and a filtering function for defining which items are displayed when user types into the combo box.
Note that defining a custom filter will force the component to make server roundtrips to handle the filtering. Otherwise it can handle filtering in the client-side, if the size of the data set is less than the
pageSize
.Setting the items resets the combo box's value to
null
.The returned data view object can be used for further access to combo box items, or later on fetched with
getListDataView()
. For using lazy data loading, use one of thesetItems
methods which take a fetch callback parameter instead.Parameters:
itemFilter
- filter to check if an item is shown when user typed some text into the ComboBox.listDataProvider
- ListDataProvider providing items to the component.Returns:
the in-memory data view instance that provides access to the data bound to the combo box
-
setItems
public ComboBoxListDataView<TItem> setItems(ListDataProvider<TItem> dataProvider)
Description copied from interface:
HasListDataView
Sets a ListDataProvider for the component to use and returns a
ListDataView
that provides information and allows operations on the items.Specified by:
setItems
in interfaceHasListDataView<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem>
Parameters:
dataProvider
- ListDataProvider providing items to the component.Returns:
ListDataView providing access to the items
-
setItems
@Deprecated public void setItems(Stream<TItem> streamOfItems)
Deprecated.Because the stream is collected to a list anyway, usesetItems(Collection)
orsetItems(CallbackDataProvider.FetchCallback)
instead.
-
getLazyDataView
public ComboBoxLazyDataView<TItem> getLazyDataView()
Gets the lazy data view for the ComboBox. This data view should only be used when the items are provided lazily from the backend with:
setItems(CallbackDataProvider.FetchCallback)
setItemsWithFilterConverter(CallbackDataProvider.FetchCallback, SerializableFunction)
setItems(CallbackDataProvider.FetchCallback, CallbackDataProvider.CountCallback)
setItemsWithFilterConverter(CallbackDataProvider.FetchCallback, CallbackDataProvider.CountCallback, SerializableFunction)
setItems(BackEndDataProvider)
getListDataView()
instead.Specified by:
getLazyDataView
in interfaceHasLazyDataView<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem,TValue>
Returns:
the lazy data view that provides access to the data bound to the ComboBox
Throws:
IllegalStateException
- if no items fetch callback(s) set
-
setItemsWithFilterConverter
public <C> ComboBoxLazyDataView<TItem> setItemsWithFilterConverter(CallbackDataProvider.FetchCallback<TItem,C> fetchCallback, SerializableFunction<String,C> filterConverter)
Supply items lazily with a callback from a backend, using custom filter type. The combo box will automatically fetch more items and adjust its size until the backend runs out of items. Usage example:
comboBox.setItemsWithFilterConverter( query -> orderService.getOrdersByCount(query.getFilter(), query.getOffset, query.getLimit()), orderCountStr -> Integer.parseInt(orderCountStr));
Note: Validations fororderCountStr
are omitted for briefness.Combo box's client-side filter typed by the user is transformed into a callback's filter through the given filter converter.
The returned data view object can be used for further configuration, or later on fetched with
getLazyDataView()
. For using in-memory data, likeCollection
, usesetItems(Collection)
instead.Type Parameters:
C
- filter type used by a callbackParameters:
fetchCallback
- function that returns a stream of items from the backend based on the offset, limit and a object filterfilterConverter
- a function which converts a combo box's filter-string typed by the user into a callback's object filterReturns:
ComboBoxLazyDataView instance for further configuration
-
setItemsWithFilterConverter
public <C> ComboBoxLazyDataView<TItem> setItemsWithFilterConverter(CallbackDataProvider.FetchCallback<TItem,C> fetchCallback, CallbackDataProvider.CountCallback<TItem,C> countCallback, SerializableFunction<String,C> filterConverter)
Supply items lazily with callbacks: the first one fetches the items based on offset, limit and an optional filter, the second provides the exact count of items in the backend. Use this only in case getting the count is cheap and the user benefits from the component showing immediately the exact size. Usage example:
comboBox.setItemsWithFilterConverter( query -> orderService.getOrdersByCount(query.getFilter(), query.getOffset, query.getLimit()), query -> orderService.getSize(query.getFilter()), orderCountStr -> Integer.parseInt(orderCountStr));
Note: Validations fororderCountStr
are omitted for briefness.Combo box's client-side filter typed by the user is transformed into a custom filter type through the given filter converter.
The returned data view object can be used for further configuration, or later on fetched with
getLazyDataView()
. For using in-memory data, likeCollection
, usesetItems(Collection)
instead.Type Parameters:
C
- filter type used by a callbacksParameters:
fetchCallback
- function that returns a stream of items from the backend based on the offset, limit and a object filtercountCallback
- function that return the number of items in the back end for a queryfilterConverter
- a function which converts a combo box's filter-string typed by the user into a callback's object filterReturns:
ComboBoxLazyDataView instance for further configuration
-
setItems
public ComboBoxLazyDataView<TItem> setItems(CallbackDataProvider.FetchCallback<TItem,String> fetchCallback)
Supply items lazily with a callback from a backend. The ComboBox will automatically fetch more items and adjust its size until the backend runs out of items. Usage example without component provided filter:
comboBox.setItems(query -> orderService.getOrders(query.getOffset(), query.getLimit());
Since ComboBox supports filtering, it can be fetched via query.getFilter():
comboBox.setItems(query -> orderService.getOrders(query.getFilter(), query.getOffset(), query.getLimit());
The returned data view object can be used for further configuration, or later on fetched with
getLazyDataView()
. For using in-memory data, likeCollection
, useHasListDataView.setItems(Collection)
instead.If item filtering by some value type other than String is preferred and backend service is able to fetch and filter items by such type, converter for client side's filter string can be set along with fetch callback. See:
setItemsWithFilterConverter(CallbackDataProvider.FetchCallback, SerializableFunction)
Specified by:
setItems
in interfaceHasLazyDataView<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem,TValue>
Parameters:
fetchCallback
- function that returns a stream of items from the backend based on the offset, limit and an optional filter provided by the query objectReturns:
ComboBoxLazyDataView instance for further configuration
-
setItems
public ComboBoxLazyDataView<TItem> setItems(CallbackDataProvider.FetchCallback<TItem,String> fetchCallback, CallbackDataProvider.CountCallback<TItem,String> countCallback)
Supply items lazily with callbacks: the first one fetches the items based on offset, limit and an optional filter, the second provides the exact count of items in the backend. Use this only in case getting the count is cheap and the user benefits from the ComboBox showing immediately the exact size. Usage example without component provided filter:
comboBox.setItems( query -> orderService.getOrders(query.getOffset, query.getLimit()), query -> orderService.getSize());
Since ComboBox supports filtering, it can be fetched via query.getFilter():
comboBox.setItems( query -> orderService.getOrders(query.getFilter(), query.getOffset, query.getLimit()), query -> orderService.getSize(query.getFilter()));
The returned data view object can be used for further configuration, or later on fetched with
getLazyDataView()
. For using in-memory data, likeCollection
, useHasListDataView.setItems(Collection)
instead.If item filtering by some value type other than String is preferred and backend service is able to fetch and filter items by such type, converter for client side's filter string can be set along with fetch callback. See:
setItemsWithFilterConverter(CallbackDataProvider.FetchCallback, CallbackDataProvider.CountCallback, SerializableFunction)
Specified by:
setItems
in interfaceHasLazyDataView<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem,TValue>
Parameters:
fetchCallback
- function that returns a stream of items from the back end for a querycountCallback
- function that return the number of items in the back end for a queryReturns:
ComboBoxLazyDataView instance for further configuration
-
setItems
public ComboBoxLazyDataView<TItem> setItems(BackEndDataProvider<TItem,String> dataProvider)
Description copied from interface:
HasLazyDataView
Supply items with a
BackEndDataProvider
that lazy loads items from a backend. Note that component will query the data provider for the item count. In case that is not desired for performance reasons, useHasLazyDataView.setItems(CallbackDataProvider.FetchCallback)
instead.The returned data view object can be used for further configuration, or later on fetched with
HasLazyDataView.getLazyDataView()
. For using in-memory data, likeCollection
, useHasListDataView.setItems(Collection)
instead.Specified by:
setItems
in interfaceHasLazyDataView<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem,TValue>
Parameters:
dataProvider
- BackEndDataProvider instanceReturns:
LazyDataView instance for further configuration
-
getGenericDataView
public ComboBoxDataView<TItem> getGenericDataView()
Gets the generic data view for the ComboBox. This data view can be used when
getListDataView()
orgetLazyDataView()
are not applicable for the underlying data provider, or you don't want to distinct between which type of data view to use.Specified by:
getGenericDataView
in interfaceHasDataView<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem,TValue>
Returns:
the generic
DataView
implementation for ComboBoxSee Also:
-
setItems
public ComboBoxDataView<TItem> setItems(DataProvider<TItem,String> dataProvider)
Description copied from interface:
HasDataView
Set a generic data provider for the component to use and returns the base
DataView
that provides API to get information on the items.This method should be used only when the data provider type is not either
ListDataProvider
orBackEndDataProvider
.Specified by:
setItems
in interfaceHasDataView<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem,TValue>
Parameters:
dataProvider
- DataProvider instance to use, notnull
Returns:
DataView providing information on the data
-
setItems
@Deprecated public ComboBoxDataView<TItem> setItems(InMemoryDataProvider<TItem> dataProvider)
Deprecated.does not work so don't useThe method is not supported for the
ComboBox
component, use another overloaded method with filter convertersetItems(InMemoryDataProvider, SerializableFunction)
Always throws an
UnsupportedOperationException
.Specified by:
setItems
in interfaceHasDataView<TComponent extends ComboBoxBase<TComponent,TItem,TValue>,TItem,TValue>
Parameters:
dataProvider
- InMemoryDataProvider to use, notnull
Returns:
DataView providing information on the data
Throws:
UnsupportedOperationException
- when using this method with anInMemoryDataProvider
See Also:
-
setItems
public ComboBoxDataView<TItem> setItems(InMemoryDataProvider<TItem> inMemoryDataProvider, SerializableFunction<String,SerializablePredicate<TItem>> filterConverter)
Sets an in-memory data provider for the combo box to use, taking into account both in-memory filtering from data provider and combo box's text filter.
Text filter is transformed into a predicate filter through the given filter converter. Example of filter converter which produces the Person's name predicate:
(String nameFilter) -> person -> person.getName().equalsIgnoreCase (nameFilter);
Filtering will be handled in the client-side if the size of the data set is less than the page size. To force client-side filtering with a larger data set (at the cost of increased network traffic), you can increase the page size with
setPageSize(int)
.Note! Using a
ListDataProvider
instead of aInMemoryDataProvider
is recommended to get access toListDataView
API by usingsetItems(ListDataProvider)
.Parameters:
inMemoryDataProvider
- InMemoryDataProvider to use, notnull
filterConverter
- a function which converts a component's internal filter into a predicate applied to the data providerReturns:
DataView providing information on the data
-
getDataProvider
public DataProvider<TItem,?> getDataProvider()
Gets the data provider used by this ComboBox.
Returns:
the data provider used by this ComboBox
-
setDataProvider
@Deprecated public void setDataProvider(DataProvider<TItem,String> dataProvider)
Deprecated.use instead one of thesetItems
methods which provide access to eitherComboBoxListDataView
orComboBoxLazyDataView
The filter-type of the given data provider must be String so that it can handle the filters typed into the ComboBox by users. If your data provider uses some other type of filter, you can provide a function which converts the ComboBox's filter-string into that type via
setDataProvider(DataProvider, SerializableFunction)
. Another way to do the same thing is to use this method with your data provider converted withDataProvider.withConvertedFilter(SerializableFunction)
.Changing the combo box's data provider resets its current value to
null
.
-
setDataProvider
@Deprecated public <C> void setDataProvider(DataProvider<TItem,C> dataProvider, SerializableFunction<String,C> filterConverter)
Deprecated.use instead one of thesetItems
methods which provide access to eitherComboBoxListDataView
orComboBoxLazyDataView
ComboBox triggers filtering queries based on the strings users type into the field. For this reason you need to provide the second parameter, a function which converts the filter-string typed by the user into filter-type used by your data provider. If your data provider already supports String as the filter-type, it can be used without a converter function via
setDataProvider(DataProvider)
.Using this method provides the same result as using a data provider wrapped with
DataProvider.withConvertedFilter(SerializableFunction)
.Changing the combo box's data provider resets its current value to
null
.
-
setDataProvider
@Deprecated public void setDataProvider(ListDataProvider<TItem> listDataProvider)
Deprecated.use instead one of thesetItems
methods which provide access toComboBoxListDataView
Sets a list data provider as the data provider of this combo box.
Filtering will use a case insensitive match to show all items where the filter text is a substring of the label displayed for that item, which you can configure with
setItemLabelGenerator(ItemLabelGenerator)
.Filtering will be handled in the client-side if the size of the data set is less than the page size. To force client-side filtering with a larger data set (at the cost of increased network traffic), you can increase the page size with
setPageSize(int)
.Changing the combo box's data provider resets its current value to
null
.Parameters:
listDataProvider
- the list data provider to use, notnull
-
setDataProvider
@Deprecated public void setDataProvider(ComboBox.FetchItemsCallback<TItem> fetchItems, SerializableFunction<String,Integer> sizeCallback)
Deprecated.use insteadsetItems(CallbackDataProvider.FetchCallback, CallbackDataProvider.CountCallback)
which provide access toComboBoxLazyDataView
Sets a CallbackDataProvider using the given fetch items callback and a size callback.
This method is a shorthand for making a
CallbackDataProvider
that handles a partialQuery
object.Changing the combo box's data provider resets its current value to
null
.Parameters:
fetchItems
- a callback for fetching items, notnull
sizeCallback
- a callback for getting the count of items, notnull
See Also:
-
setDataProvider
@Deprecated public void setDataProvider(ComboBox.ItemFilter<TItem> itemFilter, ListDataProvider<TItem> listDataProvider)
Deprecated.use insteadsetItems(ComboBox.ItemFilter, ListDataProvider)
which provide access toComboBoxListDataView
Sets a list data provider with an item filter as the data provider of this combo box. The item filter is used to compare each item to the filter text entered by the user.
Note that defining a custom filter will force the component to make server roundtrips to handle the filtering. Otherwise it can handle filtering in the client-side, if the size of the data set is less than the
pageSize
.Changing the combo box's data provider resets its current value to
null
.Parameters:
itemFilter
- filter to check if an item is shown when user typed some text into the ComboBoxlistDataProvider
- the list data provider to use, notnull
-
isSelected
protected abstract boolean isSelected(TItem item)
Whether the item is currently selected in the combo box.
Parameters:
item
- the item to checkReturns:
true
if the item is selected,false
otherwise
-
refreshValue
protected abstract void refreshValue()
Refresh value / selection of the web component after changes that might affect the presentation / rendering of items
-
getRenderManager
protected com.vaadin.flow.component.combobox.ComboBoxRenderManager<TItem> getRenderManager()
Accesses the render manager that is managing the custom renderer
Returns:
the render manager
-
getDataController
protected com.vaadin.flow.component.combobox.ComboBoxDataController<TItem> getDataController()
Accesses the data controller that is managing data communication with the web component
Can be null if the constructor has not run yet
Returns:
the data controller
-
getDataCommunicator
protected ComboBoxDataCommunicator<TItem> getDataCommunicator()
Accesses the data communicator that is managed by the data controller
Can be null if the no data source has been set yet, or if the constructor has not run yet
Returns:
the data communicator
-
getDataGenerator
protected CompositeDataGenerator<TItem> getDataGenerator()
Accesses the data generator that is managed by the data controller
Can be null if the constructor has not run yet
Returns:
the data generator
-
getKeyMapper
protected DataKeyMapper<TItem> getKeyMapper()
Accesses the key mapper that is managed by the data controller
Can be null if the no data source has been set yet, or if the constructor has not run yet
Returns:
the key mapper
-
runBeforeClientResponse
protected void runBeforeClientResponse(SerializableConsumer<UI> command)
Helper for running a command in the before client response hook
Parameters:
command
- the command to execute
-
validate
protected void validate()
-
-