Chosenbox
since 6.0.1
- Demonstration
- Java API: org.zkoss.zkmax.zul.Chosenbox
-
JavaScript API: zkmax.inp.Chosenbox
Employment/Purpose
A component similar to Combobox but handles the multi-selection and the select order.
Example
Typical Usage
- creatable attribute denotes whether or not to display createMessage when a user inputs a value that is non-existing in the model, and sends it back to the server along with an onSearch event when user clicks the ENTER key or separator.
- emptyMessage will be displayed as a placeholder if nothing is selected or focused.
- noResultText will be displayed if nothing matches the input value and it cannot be created either; syntax “{0}” will be replaced with the input value at client side.
- createMessage will be displayed in popup if nothing matches the input value but can be created as new label; syntax “{0}” will be replaced with the input value at the client-side.
When no item is selected or focused, emptyMessage is visible.

When there is no data to be shown in the model and data 0 already selected, noResultText appears.

When there is no item in the model but it is creatable, createMessage appears.

<zscript>
ListModelList model = new ListModelList(Locale.getAvailableLocales());
</zscript>
<chosenbox width="400px"
model="${model}" creatable="true"
emptyMessage=" Please select some items."
noResultsText=" No such item - {0} - and it is already in the model."
createMessage=" No such item -{0} - but it is not in model either, you can try to create it.">
<attribute name="onSearch">
Object obj = event.getValue();
((ListModelList)model).add(obj);
self.addItemToSelection(obj);
</attribute>
</chosenbox>
Rendering All
Here, all the content will be sent to and processed at the client side. The rendering process is pretty fast with a few items but may cause performance issue when the model exceeds 40,000 items and rendering them all at once.

<zscript>
ListModelList model = new ListModelList(Locale.getAvailableLocales());
</zscript>
<chosenbox width="400px" model="${model}"/>
Lazy Rendering
With ListSubModel, Chosenbox doesn’t render any DOM elements in the
drop-down list at first. Until a user enters a character, it retrieves
‘matched’ items from the server-side and renders them in the drop-down
list. This might produce some delay at the client side because of server
processing time and network latency.
See also: Combobox#Autocomplete_by_ListSubModel
<zscript><![CDATA[
ListModelList model = new ListModelList(Locale.getAvailableLocales());
ListSubModel subModel = ListModels.toListSubModel(model);
]]></zscript>
<chosenbox width="400px" model="${subModel}"/>
Custom Item Rendering
Since this component has no child component like Listbox, if you want
to render its items differently, there are 2 ways:
Change text
If you just want to change the text e.g. enclosing it with brackets, just put as its child and add characters with `${each}`:
<cascader>
<template name="model">[${each}]</template>
</cascader>
- The template only allows text that can be converted into a ZK
Label. - could be
<cascader>,<chosenbox>,<selectbox>,<searchbox>
Change HTML Structure
If you want to make more changes e.g. adding tooltips by setting title
attributes, you need to create your own ItemRenderer. See
zk_dev_ref/mvc/View/Renderer/Item_Renderer.
Keyboard Navigation Chosenbox
- Press
UPandDOWNto move the focus up and down by one option. - Press
LEFTandRIGHTto move focus between selected item(s) and the input field. - Press
ESCto clear input and close drop-down list. - Press
DELETEto delete the focused item and move focus to next item if any or input field. - Press
BACKSPACEto delete the focused item and move focus to previous item if any or input field. - Press
ENTERorspecified separatorto select the focused option.
Attributes
creatable
Default: false
specify whether to send an event to a server when user inputs a non-existing value by clicking ENTER or separator.
createMessage
displayed a popup if nothing matches the input value and creatable is true; syntax “{0}” will be replaced with the input value at the client side
disabled
Default: false
specify whether or not it is disabled.
emptyMessage
displayed as placeholder in input if nothing is selected or focused
model
specify the ListModel of this chosenbox
If you set ListModelList to the model of chosenbox, all the content will be sent to and processed at the client-side, The rendering process is pretty fast with a few items but may cause performance issue when the model exceeds 40,000 items and rendering them all at once
If you set ListSubModel to the chosenbox model, the content of the drop-down list will not be rendered to the client-side,and will remain blank until user enters an input. The server will then provide a ‘matched’ content for the input. This will cause some delay at the client side because of server processing time and network transfer time. See Lazy Rendering
name
specify the name of the input element of this component
noResultsText
displayed a popup window if nothing matches the input value and creatable is false; syntax “{0}” will be replaced with the input value at client-side
open
Default: false
specify whether or not to open the drop-down list.
tabindex
Default: 0
specify the tab order of the input node of this component.
separator
the separate characters will work as ‘Enter’ key when clicked on; it will not be considered as an input value. Upon releasing
the key, it will an send onSearch or onSelect event depending on the situation. Supports: 0-9, A-Z (case insensitive), and ,.;'[]/\-=
Supported Events
| Name | Event Type |
|---|---|
onSelect |
Event: org.zkoss.zk.ui.event.SelectEvent Represents an event caused by user’s the selection changed at the client. |
onOpen |
Event: org.zkoss.zk.ui.event.OpenEvent Represents an event that indicates an open state that is changed at the client. |
onSearch |
Event: org.zkoss.zk.ui.event.InputEvent Represents an event that indicates users inputting an non-existing value by clicking ENTER or separator. |
onSearching |
Event: org.zkoss.zk.ui.event.InputEvent Represents an event sent back to the server caused by user’s input text. |
onItemClick |
Event: org.zkoss.zk.ui.event.Event Represents an event sent back to the server caused by clicking a selected tag. |
onItemClick: since 8.0.2
Also inherit Supported Events from HtmlBasedComponent.
Supported Molds
- The default mold
Supported Children
None
Use Cases
| Version | Description | Example Location |
|---|---|---|
| 6.0.1+ | Creatable Chosenbox | Chosenbox – A beautiful and powerful multiple combobox |
Version History
| Version | Date | Content |
|---|---|---|
| 6.0.1 | April 3, 2012 | Add the new Chosenbox component |
| 8.0.2 | May 24, 2016 | Add the new Event - onItemClick |