ZK 2.3

Released on March 20, 2007.

Download Now

Getting Simpler and Richer

New Feature Highlight

  • ZK speaks JavaScript, Ruby and Groovy now. The choice is yours.
  • More visual effects, such as fading, dropping out and so on. In addition to focus, mouseover and other browser events, the visual effect of showing or hiding a component can be customized easily.
  • Grid supports live data (ListModel).
  • New and improved implementation of data binding. Live ListModelArray and BindingListModelArray are supported.
  • Macro components support inline expansion.
  • Fileupload support uploading multiple files at the same time.
  • Windows got a new look, scrollable and easy to customize.
  • The layout of radio buttons are free to mix with other components, such as grid and hbox.
  • Many more...

Feature Updates

  • 75 XUL and 82 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.
    • 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:
    • 1653099: JavaScript support (for zscript)
    • 1613080: Groovy support (for zscript)
    • 1656785: Ruby support (for zscript)
    • 1676244: Grid supports live data (ListModel)
    • 1636304: Add Grid footer (foot and footer)
    • 1639117: Add Tree footer (treefoot and treefooter)
    • 1666877: Support the variables element
    • 1467524: Component and Page supports getZScriptMethod
    • 1627515: A way to turn off logs completely.
    • 1628339: Make the tooltip open/close delay intravals configurable.
    • 1628452: Make the delay to prompt the Processing dialog configurable.
    • 1632869: Support messages in Bulgarian. Thank Boril Yonchev for his contribution.
    • 1641269: Supports URIInterceptor.
    • 1639628: Add afterSuspend method to EventThreadSuspend interface.
    • 1647101: Upgrade to script.aculo.us 1.7.0
    • 1636000: Remove indexOf() method from ListModel interface.
    • 1647599: Allow the page directive being placed under other elements
    • 1652091: A way to let developer create Listitem with live data
    • 1649781: DataBind support nullify default configuration
    • 1649795: DataBind support disable default configuration
    • 1639707: A way to determine whether there's any suspended thread
    • 1655219: Radiogroup's layout independent of Radio button
    • 1678817: Macro components support inline expansion
    • 1680474: Allow EL expr to reference a component in Client Side Action
    • 1683371: DataBind support Grid
    • 1658748: Prevent user from pressing ESC when loading JS
    • 1662365: Macro setMacroURI()
    • 1669824: InterruptedException shall carry the cause
    • 1669828: A way to specify URI depending on browser, but not locale
    • 1669842: A way to replace the default theme-uri rather than add-on
    • 1669849: A way to turn off the use of special CSS for Chinese
    • 1669660: A way to cease a suspended thread
    • 1669614: A way to override the impl of WebApp
    • 1669100: Support live ListModelArray
    • 1669103: Support BindingListModelArray
    • 1665332: Add Listbox binding support for enum
    • 1671646: The attribute element supports trim="true"
    • 1665366: Personalize upload dialog
    • 1672116: Personalize the message dialog
    • 1569740: Fileupload supports uploading multiple files at the same time
    • 1648100: Allow custom DSP files to access zk.jar TLD files
    • 1673292: Message translated to Romanian. Thank Calin Vaida for his contribution.
    • 1672246: Binder available on AnnotateDataBinderInit's subclasses
    • 1675446: Message translated to Japanese. Thank Poli Lee for his contribution.
    • 1673821: A way/option to allow multiple desktops at one HTML page
    • 1673842: A way to let UiFactory decides if a request is a richlet
    • 1675626: Portlet supports richlet by specifying zk_richlet
    • 1651944: Add support of tabIndex to Listbox and Checkbox
    • 1677053: New window look and easy to customize
    • 1678288: Replace onShow with onOpen with open = false
    • 1678856: Scrollable window
    • 1679024: Scrollable groupbox (mold=3d)
    • 1642895: Groupbox without a border
    • 1678796: Get value of a Decimalbox as a double
    • 1679066: Support radiogroup databind radio with radio value
    • 1677711: A way to specify the width for each column of hbox
    • 1495307: Support diff visaul effects when div (zul) becomes visible
    • 1615999: Allow a span of '0'
    • 1683390: Listfooter and Listcell support the span property
    • 1683396: Footer support the span property
    • 1683398: Treecell and treefooter support the span property
    • 1683438: ZUL's script shall accept JS codes, rather thru content
    • 1647768: A way to customize listbox's background color (onmouseover)
    • 1683466: A way to customize the error box for illegal values
    • 1683475: A way to customize the progressing popup
    • 1631231: ZK and Acegi: refresh main page after login
    • 1683500: Upgrade to JFreeChart 1.0.4
  • Bug fixes:
    • 1630359: RequestResolver's application scope was implemented wrong
    • 1636562: Include a page that include another failed if relative path is used
    • 1635685: popup menu conflict with confirmClose (IE only)
    • 1633335: usability bug on "autocomplete" of combobox
    • 1633982: Label spanning 2 colums and specified width (IE only)
    • 1633176: Hiding zhtml component with visible property is not working
    • 1638447: Modal nested window positioning problem
    • 1642270: InterPortletFilter doesn't work
    • 1642386: Output of DHtmllayoutFilter is truncated if content-length
    • 1639558: Uploaded Media cannot be processed more than once
    • 1647114: Draggable in a scrollable listbox positioned wrong (Opera)
    • 1647085: Clients.confirmClose(null) does not work with sendRedirect
    • 1647139: A JS error if user press NO for sendRedirect+confirmCllose
    • 1647572: not working
    • 1649625: listbox inserted to wrong position if refChild is wrong
    • 1649554: Listbox failed to move an item (IndexOutOfBoundsException)
    • 1641191: AnnotateDataBinder save error
    • 1643148: Bind save-when method problem
    • 1647811: Data Binding: EventListeners get lost...
    • 1647817: Data Binding: DOS with two Listboxes in same page
    • 1655128: Nested modal windows positioning problem (again)
    • 1650585: onOK event missing for combobox with autodrop="true" (IE)
    • 1657764: Combobox with autodrop won't close dropdown (FF)
    • 1657810: onOpen isn't fire when menu opens menupopup
    • 1650540: Usability bug:listbox with checkmark="true" multiple="true" (FF/Safari)
    • 1647845: Validation popups conflicts with visibility
    • 1649718: Droppable attributes suppress each other
    • 1659512: Datebox failed to init if no textbox was used
    • 1660340: addAnnotation failed if component is created programmingly
    • 1659601: 3D Groupbox and Disappearing Grid items in IE6
    • 1659972: IE Table update - COL and COLGROUP elements
    • 1660495: ZHTML: Colgroup cannot accept children
    • 1666286: the size of the vertical tabs not changeable
    • 1668708: NullPointerException in BindingRenderer
    • 1639006: Listbox col. header in IE7 renders in wrong place
    • 1638662: Bandpopup size limit on IE7
    • 1663472: references to a specific impl of EventProcessingThread
    • 1671418: CSS ID Selector and underscore issue (IE6 only)
    • 1671510: splitter resize: problem with inner Tree and Tabbox
    • 1671512: Failed to change the width of tree/grid/listbox dynamically
    • 1671549: Failed to change the width of tabbox
    • 1672747: The bin/zipjs script failed on FreeBSD
    • 1674062: tabpanel with height is not correctly shown
    • 1676393: Incorrectly override the "binder" variable
    • 1677072: (Manual) Variables defined in zscript shall be visible to EL expr
    • 1677090: EL's variable resolved not in the same order as interpreter
    • 1676629: Datebox stops working after "window.title" change
    • 1678338: Menupopup failed to send onOpen when closing up
    • 1678343: Combobox/bandbox failed to send onOpen when closing dropdown
    • 1674064: Groupbox mold=3d with height not correct shown
    • 1679054: Simple Listbox databind not work
    • 1679593: Sizable window positioned wrong if overlap -> hide -> embed
    • 1679630: Sizable window positioned wrong if overlap -> embed -> resize
    • 1678968: Problem with overlapped windows visibility in firefox
    • 1679629: Label for Caption (of groupbox) can not be changed
    • 1680490: doublebox failed to handle #,##0;(#,##0)
    • 1680482: label popup/context/draggable/droppable/style... in ZHTML
    • 1678907: Modal onClose and Messagebox
    • 1677341: Focus not bring the window to top
    • 1682266: Vertical tab display wrong if tabpanel becomes larger
    • 1673839: zkFilter doesn't handle redirect response properly
    • 1681128: Chart does not update when change width/height
    • 1683727: Progressmeter display progression
    • 1683841: Auto-gen Popup.getId() doesn't work with Label.tooltip

Upgrade Notes

  • The concept of variables and methods defined in zscript are changed. Each interpreter now supports only one logical scope. Variables and methods defined in zscript are visible for the same interpreter. Refer to the Developer's Guide for details.
  • Page
    • The signature of getInterpreter and interpret are changed. You have to specify a language now.
    • getClass is renamed to getZScriptClass.
    • getVariable returns variables defined in namespace, excluding those defined in the interpreters.
      To retrieve variables defined in the interpreter, use getZScriptVariable.
  • Component
    • getVariable returns variables defined in namespace, excluding those defined in the interpreters. To retrieve variables defined in the interpreter, use getZScriptVariable.
  • Client Side Action now use EL expressions (#{}) to reference a component or any object.
    <textbox
      action="onfocus: action.show(#{help1}); onblur: action.hide(#{help1})"/>
  • The way to customize window's look and feel is changed. Refer to the Developer's Guide for details.
  • Use the following pattern to specify the style of a row of a grid.
    tr.grid-od td.gc {
      background: gray;
    }
  • Removed InterPortletFilter from web.xml since it is no longer required.
  • Implements the getRichlet and isRichlet method for your UiFactory class, if you doesn't extend it from AbstractUiFactory.
  • Implements the getControls method of the LisitemRendererExt interface instead of the shallDetachOnRender method.
  • script: Use child (label) to specify the embedded JavaScript codes instead of the content property.
  • Use onOpen instead of onShow to be notified when a popup is closed.
  • EventThreadSuspend adds a new method called afterSuspend
  • ListModel removes indexOf() method
  • Interpreter, Namespace, Namespaces, VariableResolver and Method are moved from org.zkoss.zk.ui.util to org.zkoss.zk.scripting
  • Evaluator is moved from org.zkoss.zk.ui.util to org.zkoss.zk.el
  • Richlet adds the getZScriptLanguage method.