ZK 10.0.0-Beta release notes

Released on Oct 18, 2023


ZK Team is thrilled to introduce ZK 10 (Beta).

ZK 10 focuses on elevating user experiences and optimizing cloud-native scalability. This release showcases groundbreaking features, including stateless components, client-side Model-View-ViewModel (MVVM), and a seamless transition to TypeScript.

Our innovative stateless components bring in enhanced scalability, auto-provisioning, improved performance, and reduced memory consumption.

The introduction of client-side MVVM shifts the View and ViewModel binding to the client-side, thereby minimizing server-side memory usage and response times.

The transition from JavaScript to Typescript opens the door to smart IDE feedback, offering reliable auto-completion and a more Java-like programming experience for your front-end customization.

Learn more at ZK 10 Page Now >>


What's New

  • New Feature
    • ZK-3853 - Tree supports 3-states selection
    • ZK-4065 - ZK theme css shouldn't apply to tag directly
    • ZK-4494 - Tree's DOM structure shall provide enough information to decorate lines with CSS
    • ZK-4711 - Upgrade integrated reset.less
    • ZK-4928 - expose widget private functions and variables as public ones
    • ZK-4969 - dropupload supports accept file type
    • ZK-5018 - Enhance simplified MVVM syntax
    • ZK-5024 - Add a library property to change the default apply composer for MVVM
    • ZK-5039 - remove deprecated classicblue theme in ZK 10
    • ZK-5049 - Deprecate org.zkoss.zk.ui.uuidRecycle.disabled in ZK10
    • ZK-5075 - Provide override options for TS code
    • ZK-5091 - Move Layout.java to extend from XulElement
    • ZK-5093 - CSS variable helper support in ZK
    • ZK-5096 - Consider deprecate Anchorlayout and Anchorchildren
    • ZK-5097 - Reconsider the API of Anchornav to make Anchornav more consistent with other ZK component.
    • ZK-5119 - Integrate Font Awesome 6 free icons
    • ZK-5122 - Integrate a client-side input-masking tool for input-based components
    • ZK-5142 - Handle GET and POST requests more strictly
    • ZK-5158 - Client MVVM restriction check mechanism
    • ZK-5182 - Prevent XSS issue in component attributes
    • ZK-5215 - Support load locale-dependent resources in a relative path
    • ZK-5221 - Show websocket close reason
    • ZK-5228 - Support a IdGenerator for Application-wise, not Desktop-wise for Stateless Component
    • ZK-5265 - Add a CSP provider class, which allows the users to define CSPs and provide a nonce used for strict-dynamic support
    • ZK-5270 - Adjust ID generation mechanism in ZHTML Component
    • ZK-5271 - Client MVVM: Enhance form validation
    • ZK-5408 - Enable InaccessibleWidgetBlockService by default
    • ZK-5422 - Provide some utile APIs to update IComponent Tree
    • ZK-5437 - Upgrade WCAG with the lighthouse 10.x detection tools
    • ZK-5441 - Provide a better way to override za11y module
    • ZK-5466 - include Guava instead of closure-compiler
    • ZK-5469 - Make cloudMode true by default for ZK Stateless
    • ZK-5502 - Allow users to customize tooltip on the icon
    • ZK-5503 - Allow users to set multiple icons and tooltips on the same LabelImageElement
    • ZK-5504 - Components with Model should only update few items or changed data instead of rerendering them all
    • ZK-5527 - Upgrade WCAG with the lighthouse latest version
    • ZK-5531 - Remove Applet, Flash, and FusionChart components in ZK 10
    • ZK-5532 - Remove all unsupported HTML tags in ZK 10 ZHTML
    • ZK-5533 - Add all new HTML5 tags in ZK 10 ZHTML
    • ZK-5541 - Move widget restriction check to Client MVVM
    • ZK-5549 - tabbox provides an add new tab button
    • ZK-5550 - Calendar supports to change month and year with a keyboard

  • Bugs Fixed
    • ZK-4355 - timebox' default cols is too small
    • ZK-4861 - Inconsistent input options in Android, cause unreliable timebox input
    • ZK-4975 - nested form proxies update original object (without submit to origin)
    • ZK-4976 - nested listproxies update original object without outer submit
    • ZK-5000 - Inefficient DOM updates for link labels
    • ZK-5001 - combobox causing long UI freeze during unrelated widget updates
    • ZK-5005 - pdfviewer some fonts are not rendering
    • ZK-5017 - Listbox head flickering caused by onClientInfo
    • ZK-5025 - redundant selection highlight on a menupopup
    • ZK-5035 - listbox renders duplicates checkmark after adding 1st listheader dynamically
    • ZK-5037 - invisible first column hide checkmarks in a listbox
    • ZK-5052 - make a window's focus-grabbing behavior easy to disable
    • ZK-5086 - Should ignore source map file request when the source map is disabled
    • ZK-5089 - AfterSizeEvent doesn't return a correct size of a Window component
    • ZK-5090 - Window's content should not contain padding when no border on it
    • ZK-5092 - Mac's chrome doesn't work with ctrlKeys feature (Windows works)
    • ZK-5120 - Combobox smart update emptySearchMessage doesn't work
    • ZK-5123 - Searchbox open attribute doesn't work while initializing
    • ZK-5132 - Source mapping URL should be ignored when sourcemap is disabled
    • ZK-5138 - Grid row setAlign not work after rendered
    • ZK-5145 - Chosenbox smart update emptyMessage doesn't work
    • ZK-5151 - SelectedItem should be sync in Cascader (getter/setter)
    • ZK-5152 - Cascader should use TreeSelectableModel
    • ZK-5217 - Timepicker error in Mobile touch
    • ZK-5218 - inconsistent top position among different window modes
    • ZK-5235 - opening a menupopup moves a scrollbar of a long menu back to top
    • ZK-5257 - Ignore unused component NoClassDefFoundError such as jasperreport component
    • ZK-5261 - forEach always re-renders all items
    • ZK-5266 - Client MVVM: Using parameters in Getter
    • ZK-5267 - Client MVVM: ForEach support map iteration
    • ZK-5268 - Client MVVM: Force load binding to reload
    • ZK-5269 - Client MVVM: Processing Binding Order
    • ZK-5272 - Client MVVM: support el expression (${...})
    • ZK-5275 - Client MVVM: Support widget properties in command expression
    • ZK-5278 - Client MVVM: handling huge data
    • ZK-5280 - Client MVVM: Missing orientation when using Hbox in template
    • ZK-5281 - Client MVVM: JS error when using expression "each" in load binding with attribute "forEach"
    • ZK-5282 - Client MVVM: Selection missing in Listbox
    • ZK-5283 - Client MVVM: Listbox/Grid Rod
    • ZK-5284 - Client MVVM: converter in template
    • ZK-5287 - Client MVVM: Rerender template causing apparently flickering
    • ZK-5289 - Client MVVM: Layout/Dimension changed when Template rendering
    • ZK-5290 - Client MVVM: Multiple @init and @load
    • ZK-5292 - Client MVVM: @ScopeParam shall support custom attribute
    • ZK-5293 - Client MVVM: Remote EL should pass evaluated value
    • ZK-5294 - Client MVVM: Tree model rendering
    • ZK-5295 - Client MVVM: validation exception when validate empty string value as number
    • ZK-5297 - Client MVVM: Array/Collection/Map toString in Client side should be the same as Java
    • ZK-5298 - Client MVVM: Conditional Binding should work as original behavior
    • ZK-5299 - Client MVVM: Grid/Listbox collection model rendering
    • ZK-5300 - Client MVVM: wrapped object should display string value in label
    • ZK-5301 - Client MVVM: Form binding save and validation
    • ZK-5303 - Client MVVM: Form should call NotifyChange automatically
    • ZK-5304 - Client MVVM: Listbox/Grid model rendering by Map
    • ZK-5306 - Client MVVM: Unable to evaluate expression of validationMessages
    • ZK-5307 - Client MVVM: Wrong behavior when using SmartNotifyChange/NotifyChange on Setter
    • ZK-5309 - Client MVVM: exception when doing Jackson serialization
    • ZK-5310 - Client MVVM: Long operation with server push and Event queue does not work
    • ZK-5311 - Client MVVM: Paging does not work
    • ZK-5313 - Client MVVM: GroupsModel
    • ZK-5314 - Client MVVM: Support widget properties in property binding
    • ZK-5315 - Client MVVM: load property binding only works at the first time
    • ZK-5316 - Client MVVM: unable to evaluate nested List
    • ZK-5317 - Client MVVM: Rendering fail in shadow elements
    • ZK-5319 - Client MVVM: Displaying WrongValueException
    • ZK-5320 - Client MVVM: serialization and deserialization
    • ZK-5321 - Client MVVM: List Object with Jackson serialization
    • ZK-5323 - Client MVVM: converter and command param in Form binding
    • ZK-5328 - Client MVVM: If and Unless EL condition at client
    • ZK-5329 - Client MVVM: Event Conversion
    • ZK-5330 - Client MVVM: Processing bindings should follow widget tree
    • ZK-5334 - Client MVVM: custom attribute in template
    • ZK-5335 - Client MVVM: List data support basic API
    • ZK-5338 - Client MVVM: Missing widget string attribute information
    • ZK-5339 - Client MVVM: Bindings in zhtml
    • ZK-5344 - Client MVVM: miss client attribute w:onClick
    • ZK-5346 - Client MVVM: Linelayout
    • ZK-5352 - z-columns-bar is invisible when only columns in grid
    • ZK-5356 - Client MVVM: NotifyChange in Collection
    • ZK-5359 - Client MVVM: non-existent map key should not throw exception
    • ZK-5361 - Client MVVM: zscript in included page
    • ZK-5362 - Client MVVM: Nested ViewModel
    • ZK-5363 - Client MVVM: Native content in template
    • ZK-5365 - Client MVVM: Widget Rendering in Include
    • ZK-5367 - Client MVVM: command param in global command
    • ZK-5370 - Client MVVM: invalidate components
    • ZK-5371 - Client MVVM: onCreate event
    • ZK-5376 - Client MVVM: Proxying ViewModel Annotations
    • ZK-5383 - Client MVVM with Fulfill feature
    • ZK-5385 - Client MVVM: Tree selection status
    • ZK-5393 - Update ZK jars to jakarta-friendly uploads
    • ZK-5400 - Client MVVM: forward="onClick=another.onOK" doesn't work
    • ZK-5403 - Client MVVM: EL3 syntax
    • ZK-5411 - withAction() cannot accept anonymous class, please convert it to Lambda syntax
    • ZK-5412 - Desktop of stateless components is not cleared after reloading [CloudMode]
    • ZK-5424 - Client MVVM: Shadow Element should handle ListModel case
    • ZK-5435 - desktop timeout config doesn't work as expected
    • ZK-5450 - 2 NEXT_SIBLING for targetId don't pass the expected value
    • ZK-5454 - nextSibling locator doesn't work in smartUpdate()
    • ZK-5468 - Components with Model only renders one item with wrong result if the EL contains forEachStatus.index
    • ZK-5476 - client mvvm failed for a tree
    • ZK-5488 - Biglistbox's Elements with an ARIA [role] that require children to contain a specific [role] are missing some or all of those required children
    • ZK-5489 - Linelayout's Elements with an ARIA [role] that require children to contain a specific [role] are missing some or all of those required children
    • ZK-5490 - Grid's [aria-*] attributes do not match their roles
    • ZK-5491 - Multislider and Rangeslider's [aria-*] attributes do not match their roles
    • ZK-5492 - The elements with an id of 'tpad-tbl' and 'bpad-tbl' do not have the correct role
    • ZK-5493 - [user-scalable='no'] is used in the <meta name='viewport'> element or the [maximum-scale] attribute is less than 5
    • ZK-5494 - Background and foreground colors do not have a sufficient contrast ratio
    • ZK-5498 - Some checkboxes do not have [aria-checked] attribute, and they do not have accessible names
    • ZK-5521 - navbar has no focus indicator
    • ZK-5523 - chosenbox loses its selection in a model after invalidate()
    • ZK-5525 - Checkbox tristate [aria-checked] attribute missing "mixed" state
    • ZK-5530 - users cannot focus on the icons on the Calendar header
    • ZK-5534 - calling the function before overridden in typescript produces a compiler error
    • ZK-5537 - Client MVVM: Open state in TreeModel
    • ZK-5539 - $init() will call twice on Keikai component
    • ZK-5540 - zk.wpd with browser condition won't work with ZK 10

  • Upgrade Notes
    • The Java binary-compatible level is Java 11 since ZK 10. Please use Java 11 or a higher version.
    • ZK 10 is compatible with modern browsers; IE11 (and lower IE versions) are no longer supported
    • Enable InaccessibleWidgetBlockService by default in EE version. Note that it will block Echo Event if the component is disabled or invisible. You can configure it using the library-property org.zkoss.zkmax.au.IWBS.disable.
    • Upgrade 3rd party optional dependencies: closure-compiler(v20230802), groovy(5.0.0-alpha-1), gson(2.10.1), jackson-databind(2.15.2), rhino(1.7.14), jasperreports(6.20.5). Drop the itext dependency.
    • Refine ZK-3277 to enable multipart file uploads into AUEngine and removed AuUploader.java and AuDropUploader.
    • Support ZK-3277 into CE version, and drop the support of IE9 browser for file upload feature, due to it cannot support HTML FormData.
    • Some z-class names are changed, z-combobox-emptySearchMessage becomes z-combobox-empty-search-message and z-combobox-emptySearchMessage-hidden becomes z-combobox-empty-search-message-hidden
    • Disable UUID recycle mechanism by default.
    • With the fixed of ZK-5435, the desktop timeout mechanism will clean all expired desktop instances by a timer per session if the setting is enabled. (By default, it's enabled with 1 hour).To disable the cleaner timer per session, you can specify -1 to the desktop timeout value to disable the mechanism.
    • Remove outdated Acronym, Big, Center, Dir, Font, isindex, Nobr, Param, Rtc, and Tt in ZHTML module
    • Remove Applet, Flash, and FusionChart components
    • Deprecated org.zkoss.zk.ui.uuidRecycle.disabled
    • Remove Acegi and Hibernate integration utiles in zkplus module
    • Upgrade Font Awesome version from 4.7.0 to 6.4.2, previous iconSclass syntax will continue to be supported
    • ZSciprt using python and the corresponding jython dependency are now optional.