ZK 2.3.1

Released on May 2, 2007.

Download Now

Getting Simpler and Richer

New Feature Highlight

  • New (and simpler) way to customize the display of error messages.
  • Support the file download that opens a Save dialog at the client to let the user download arbitary file from the server.
  • A new component called captcha is added to simplify the use of CAPTCHA.
  • Java Interpreter (based on BeanShell) supports hierachical scopes, aka., nest scopes.
  • Many more...
  • See also New Features of ZK 2.3.1.

Feature Updates

  • 76 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:
    • 1698249: A way to customize the error box withouot writing JavaScript
    • 1690498: A way to download a file from server with save as dialog
    • 1663482: BeanShell shall support hierachical scopes like 2.2 does
    • 1688892: A way to abandom Milieu
    • 1699729: Adds the deferred option to zscript
    • 1686198: A way to specify custom attributes in lang addon
    • 1688093: Remove Component's param since it's redundant to custom-attribute
    • 1686617: generate onClientInfo when browser size changes
    • 1687371: button and checkbox suport DoubleClick
    • 1689560: Add Events.sendEvent(Event evt)
    • 1684148: support captcha component
    • 1693686: Rightclick shall select the list item if it is not selected
    • 1692783: ListModelConverter coerce empty Listmodel from null
    • 1692772: a way to limit live-threads
    • 1696799: doModal shall be allowed if not in processing an event
    • 1642306: Position overlapped/popup widows at center, left, right...
    • 1698195: Translate messages to Swedish. Thank Easit AB (http://www.easit.com) for his contribution.
    • 1699225: Translate messages to Turkish. Thank Kursat Kurt for his contribution.
    • 1699073: A way to prevent removing a desktop when user browse away
    • 1617806: A way to support custom failover mechanism
    • 1704040: Add onSelection event to InputElement
    • 1705531: Textbox supports setSelectionRange
    • 1704040: Add onSelection event to InputElement
    • 1705715: InputElement's clearErrorMessage shall be public
    • 1704194: Get value without validation -- getRawValue and getRawText
    • 1708577: A way to control default encoding of the uploaded text file
    • 1708000: ListModelXxx support Listbox and Grid sorting
    • 1708615: Upgrade to jFreechart 1.0.5
    • 1708616: Upgrade to jRuby 0.9.9
    • 1710373: ListModelConverter should accept BindingListModel
    • 1710542: Make AImage serializable
  • Bug fixes:
    • 1682844: Java 1.4.2 compatibility problem with StringBuffer.insert
    • 1685165: bundled asm.jar imcompatibility with ZK 2.3
    • 1686521: IE6 only. Opaque round corner of Window title
    • 1686278: Rightclick event request's dtid param is null (with Liferay)
    • 1687233: Grid creates blank row into wrong place when model changed
    • 1673839: zkFilter doesn't handle redirect response properly
    • 1688261: Groupbox/window caption wrong behavoir when null
    • 1688071: tabpanel incorrectly rendered in FF2.x
    • 1689346: Listbox Databind broken in 2007-03-27
    • 1688200: Variable Resolver in Macro Components broken
    • 1690524: animation onshow, onhide fail to apply on menupopup
    • 1690399: ListModel out of sync when Listbox sorted
    • 1692660: Resize the width of a child of hbox doesn't work properly
    • 1690992: Hbox doesn't render correctly if a cell is invisble
    • 1690583: popup incorrectly rendered when attached to
    • 1698190: Constraint in zscript cannot access components by name
    • 1694879: Fileupload of txt file not working
    • 1699786: Execution.isAsyncUpdate(null) shall return if in async-updat
    • 1702216: DHtmllayoutFilter cannot parsing DOCTYPE
    • 1701319: setVisible method is not working for Vbox
    • 1698981: The constraint doesn't works when assing value first
    • 1701986: The error msgbox remains even if error is corrected
    • 1697214: in TAB:slider always in left position even if curpos changed
    • 1706019: Bandbox validation on firing always
    • 1706290: Menu and comobox in popup causes unexpected dismiss
    • 1707153: Menu and comobox doesn't work properly in a context popup
    • 1707254: Menu and comobobox in bandbox causes unexpected dismiss
    • 1704072: Can not work with spring 2.0.x
    • 1692495: Invisible iframe in tab incorrectly handled on FF2.0
    • 1708752: org.zkoss.zk.ui.sys.ConfigParser Typo
    • 1684164: Readonly attribute on checkbox doesn't works
    • 1709788: databind with checkboxes
    • 1710412: Window border incorrect if height specified and shown later
    • 1710552: No need to hide iframe if it is HTML
    • 1710697: Unable to add style dynamically (IE only)
    • 1707818: Validate in onChange failed to check for 2nd onblur
    • 1710946: Comobox not allow shift+tab if autodrop (Safari only)

Upgrade Notes

  • org.zkoss.zul.Constraint is simplified while org.zkoss.zul.ClientConstraint and org.zkoss.zul.CustomConstraint are added to have better control.
  • The way to sort listbox/grid with live data is changed: implements ListModelExt instead of overriding the sort method. Refer to the dev's guide for details.
  • To embed an iframe with contents other than HTML (such as PDF), you have to specify autohide to true.
    <iframe autohide="true" src="my.pdf"/>
  • UiFactory's newComponent() adds an extra argument, clsnm.
  • Milieu and InstanceDefinition are removed. ComponentInfo is added.
    • A component has a reference to the component definition
    • ComponentInfo represents a node in a ZUML page. It is used to create a component, but the component doesn't have any reference to it once created.
  • max-event-threads is renamed to max-spare-threads
  • onModal is no longer sent to the error page. Developers have to specify mode="modal" explicity.
  • The protected getRawValue method of InputElement is renamed to getTargetValue.
  • Execution.isAsyncUpdate(null) means whether the execution is asynchronous updating a page (rather than creating a new page).
  • The readonly property for checkbox, button and listbox is removed, since it is not applicable.