ZK 3.0.8

Released on October 8, 2008.

Download Now

Getting Simpler and Richer

New Feature Highlight

  • PerformanceMeter enables client-side monitoring.
  • onFulfill event supported.
  • Support Session Fixation Protection.
  • A way to Proxy ComponentInfo with ComposerExt

Feature Updates

  • 89 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.

New Features

  • 2045837: PerformanceMeter adds the time after updating all components
  • 2052603: A way to proxy ComponentInfo with ComposerExt
  • 2045810: AnnotatedDataBinderInit accept relative path in arg0
  • 2060367: More neat startup log for ignorable errors
  • 2066299: fulfill: fire onFulfill after fulfilling the children
  • 2092356: Unwrap ForwardEvent automatically in GenericEventListener
  • 2094526: Components.wireVariables() shall wire implicit objects
  • 2117539: Support Session Fixation Protection
  • 2114380: Filedownload bug with WebSphere 5.1.1
  • 2099562: [Opera] progressbar flattened when value = zero
  • 2139857: Components.addForward shall handle cascade $ name pattern

Bug Fixes

  • 2051014: NPE error with ZK + Tomcat Clusteriing
  • 2056760: Fail to change the width of Listbox
  • 2051639: Data binding longbox does not work
  • 2037288: Clustering failed with AnnotateDataBinder
  • 2041347: F1 key not overridden correctly in IE
  • 2071996: Selection on a paged Listbox doesn't work an last page
  • 2077739: Events.addEventListeners() cause Exception in onEvent()
  • 2077792: GenericAutowireComposer shall support implicit objects "arg"
  • 2041674: Menubar popup disappears with disabled menuitem
  • 2080237: A disabled Menuitem with href can link to the href location
  • 2080346: Onchaning evt of combobox wrongly includes type-ahead string
  • 2075332: Paginated listbox doesn't expand properly inside a BL(IE)
  • 2079837: Timebox behaves wrongly if there is scrollbar
  • 2081560: Unresponsive script warning when changing big ListModel
  • 2086020: onchanging event of combobox didn't fired properly
  • 2086350: Select a nested listbox that should not throw a exception
  • 2072856: Error scroll bar is shown on the validation message(IE 7)
  • 2088269: radiogroup wouldn't work before ZK finish loading
  • 2090731: Button... unable to setImage if setImageContent was called
  • 2092632: Session.invalidate causes an exception in Jetty
  • 2092716: Desktop.isAlive always true
  • 2080346: onchaning evt of combox wrongly includes type-ahead string
  • 2079837: Timebox behaves wrongly if there is scrollbar
  • 2082896: ZK conflicts with Liferay 5.1.1
  • 2088712: separator with bar & spacing=1px not show in IE
  • 2094523: Components.wireFellows() shall wire fellows then ancentors
  • 2111320: Borderlayout in tabpanel invisible
  • 2105802: Treechildren image problem
  • 2116547: The Slider image problem in listbox
  • 2125788: Hilighted window covered by mask when change title
  • 2124391: Tree, attribute sequence cause wrong result
  • 2128058: Fails to change the visibility of Border Region dynamically
  • 2129730: databinding fails to process access='none'
  • 2129992: TypeConverter cannot be found by databind if in zscript
  • 2138131: GenericForwardComposer throw Exception if component inexist
  • 2140491: Set "save-when" in Listbox selectedItem does not trigger
  • 2143479: Failed to invoke sendRedirect or forward in DesktopInit

Upgrade Notes

  • onBookmarkChanged is renamed to onBookmarkChange
  • org.zkoss.zkplus.databind.AnnotateDataBinderInit now implements both org.zkoss.zk.ui.util.Initiator and org.zkoss.zk.ui.util.InitiatorExt interfaces. That is, the original interface method doAfterCompose(Page page) of Initiator won't be called any more. Rather, the doAfterCompose(Page page, Component[] comps) of InitiatorExt is called. If you have written own class that extends AnnotateDataBinderInit and overrides doAfterCompose(Page page) method of Initiator, you probably have to do some modification accordingly.