ZK 2.4

Released on June 8, 2007.

Download Now

Getting Simpler and Richer

New Feature Highlight

  • Load on demand without writing Java codes
  • An option to disable the use of the event processing thread
  • New and simipler way to add annotations
  • Highlighted windows, embedded fileupload component, and many more...
  • See also New Features of ZK 2.4.

Feature Updates

  • 77 XUL and 83 HTML off-the-shelf components.
    • Tabbox, grid, listbox, tree, menu, combobox, bandbox, datebox, chart, hbox, vbox, window, slider, paging, audio, image, timer, include, iframe...
    • Drag-and-drop supported by all components, such that users can drag components and drop them to any other or particular set of components.
    • Context menus and customizable tooltips supported by all components, such that a menu or any popup appears when user click, right-click or move the mouse over a component.
    • Customizable sorting of listbox, grid and children of any component with 100% Java codes (java.lang.Comparator).
    • Auto-completion for combobox.
    • Load on demand with writing Java codes.
    • Live data for listbox.
    • Grids, listboxes and trees with sizable columns.
    • All components are cloneable and serializable.
    • Validation and formatting for any input components, such as regular expression and $#,##0.
    • 100% Java API of Google Maps, FCKeditor, DOJO, and Timeline components.
  • Event-driven, server-centric model
    • More than 20 events are supported: onChange, onChanging, onScroll, onSelect, onShow, onZIndex...
    • All events are processed at the server. No hurdle to communicate between clients and servers.
    • All events are synchronized. No racing condition to worry about.
  • ZK User-interface Markup Language (ZUML).
    • Rich user interface could be designed in ZUML as simple as authoring HTML pages.
    • Powerful yet intuitive control flow by the if, unless and forEach attribute.
    • Scripting in EL expressions and your favorite scripting languages, include but not limited to Java, JavaScript, Ruby and Groovy.
    • Hot changes and updates without restarting your Web applications.
    • Annotations that allow a page to acess database with zero Java codes.
  • Browser history management.
    • Add states to browser's back button history. Then, users can bookmark and use the back and forward button to navigate different states of the same ZK desktop.
  • Simple yet boundless component model.
    • Macro components. Developing a full-feature new component by using another ZUML pages.
    • Inheritable customization. Developing a new component by extending existent components.
    • Seamlessly and easily to encapsulate pure-client components as ZK components with 100% Java API.
    • Customizing components with pre-compiled Java classes, or by scripting in your favorite scripting languages, include but not limited to Java, JavaScript, Ruby and Groovy. The choice is yours.
  • Simple yet flexible threading model.
    • Thread-safe component handling.
    • True server-side Modal dialog.
    • Suspend and resume event listeners freely.
  • 100% Customizable User-Interface factory.
    • Loading ZUML pages not only from Web contents but also any repository such as database.
    • Customizing the features of sessions, desktops and pages.

What's New

  • New Features:
    • 1727154: Support the fulfill attribute to defer creation of children
    • 1711860: An option to use native thread instead of event thread
    • 1728718: A simple way to annotate properties
    • 1715542: Window supports the highlighted mode
    • 1701213: Support embedded fileupload component
    • 1733166: A way to provide more sophisticated JS for ClientConstraint
    • 1719075: Support the onPiggyback event at the root component level
    • 1712518: Decimalbox supports different round mode (Java 6 is required)
    • 1715649: A way to create inline macro manually
    • 1731302: Use the syntax similar to servlet to configure richlet
    • 1712548: isAsap shall not be part of EventListener
    • 1719140: A way to show custom message when javascript is disabled
    • 1721123: Improve performance if DOCTYPE is specified in zhtml
    • 1719781: Allow component itself to arg0 AnnotateDataBinderInit
    • 1721126: Configurable Tab Height
    • 1726708: A more generic way to intercept the request for Locale etc.
    • 1725484: Prevent the 2nd onOK and onClick if the prev is processing
    • 1728196: Interpreter supports containsVariable
    • 1728157: getProperties() for class ComponentInfo
    • 1728220: Make NodeInfo.appendChild(ComponentInfo) public
    • 1727687: add Component[] constructor to Box, Hbox and Vbox
    • 1730438: AnnotateDataBinder support new simpler property annotation
    • 1730457: Tab shall receive onSelect in additon to Tabbox
    • 1731138: AnnotateDataBinder should allow relative path
    • 1715546: Messagebox supports the native (Servlet) thread mode
    • 1731126: timout redirect should be device aware
    • 1732570: Add serialization listener for component, page, desktop, session
    • 1732614: Support ComponentCloneListener
    • 1729210: Combox suport Object like Listbox
  • Bug fixes:
    • 1728010: Inconsistent behavior when dragging multiple selected item
    • 1711769: Grid on Vbox visibility bug
    • 1712063: Vbox visibility bug with CSA action.show
    • 1711127: Messagebox INFO ICON
    • 1711117: Listbox with ListModel rendered empty when attached later
    • 1714094: Failed to show the custom error page if failed to include
    • 1716526: Failed to serialize radiogroup
    • 1719101: Prevent detaching component belonging to other desktop
    • 1720869: onClientInfo no longer firing
    • 1720620: zkFilter shall not filter DOCTYPE with DTD XHTML
    • 1721158: Modal window as child of another cause mask pos wrong
    • 1716442: Window.onClick disable toolbarbutton.onclick
    • 1722888: forEach failed with Groovy
    • 1721859: width attribute broken when percent is used
    • 1719851: Captcha doesn't Support clustering Environment
    • 1719854: Chart is not Serializable
    • 1723570: Datebox databind strange behaviour
    • 1712483: Data Binding error
    • 1724609: Listbox.focus failed to focus correctly if change selection
    • 1724938: XHTML center tag failed
    • 1724571: getErrorMessage of textboxis not working if validate by Java
    • 1728807: getErrorMessage of textboxis not working if validate by Java
    • 1725709: ExecutionCleanup.cleanup() is called too early in execUpdate
    • 1725604: Drag&Drop: Missing drop target gesture (FF)
    • 1726783: getSelectedTab is wrong if tabs is attached a tabbox later
    • 1727225: Failed if adding 2nd tab with selected
    • 1727352: Live data listbox loads too many item at the beginning
    • 1725299: BindingListModelSet doesn't support Serialization
    • 1728692: Interpreter failed to handle a variable with null value
    • 1729253: Can not forward page
    • 1729343: Failed to change focus after a modal dialog
    • 1725304: BindingListitemRenderer is NOT Serializable
    • 1730454: BindingRowRenderer is NOT Serializable
    • 1730532: Event listener didn't iterate correct if some is removed dyn
    • 1729523: Combobox didn't adjust width right if item added onOpen
    • 1729739: Grid footer produces <td width = "0px">

Upgrade Notes

  • The isAsap method of org.zkoss.zk.ui.event.EventListener is abandoned. By default, EventListener is ASAP (i.e., non-deferrable). To have a deferrable event listener, you have to implement org.zkoss.zk.ui.event.Deferrable. In other words, any event listener that returns false in the isAsap method shall implements Deferrable and returns true in the isDeferrable method.
  • The org.zkoss.zk.ui.sys.UiFactory interface adds a new method:
    public Component newComponent(Page page, Component parent, ComponentInfo compInfo);
  • LocaleProvider and TimeZoneProvider are removed. Use RequestIntercepter instead.
  • GenericInterpreter.getFromNamespace() returns UNDEFINED to denote a variable is not defined, while null is a valid value.
  • The timeout-uri element under the session-config element is deprecated. Riather, put it under the device-config element.
  • The 2.3 syntax for defining richlets is deprecated. Rather, use the richlet and richlet-mapping elements.
  • org.zkoss.zk.ui.http.ActivationListener is renamed to WebManagerActivationListener.