ZK 3.0.1

Released on December 17, 2007.

Download Now

Getting Simpler and Richer

New Feature Highlight

  • A GenericComposer allows you to realize MVC approach more easily.
  • A GenericEventListener helps you to handle all kinds of events using one single file.
  • HeaderElement supports versatile ZK components. You could put an image or a button in headers.
  • All InputElement supports onKeyDown, onKeyUp, and onOK events.
  • Data-binding supports Map.
  • Provide a JNDI variable resolver to get EJB3 objects.
  • See also New Features of ZK 3.0.1.

Feature Updates

  • 88 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:
    • 1836202: A generic composer to realize MVC approach more easily
    • 1836198: A generic event listener which invokes corresponding method
    • 1835773: Support longbox
    • 1838456: A way to customize progressmeter's look with CSS
    • 1797701: Slider tooltip text customization
    • 1766905: DataBinder support binding to Map
    • 1845942: JndiVariableResolver to Get Variable from JNDI Binding
    • 1840081: A way to restrict max concurrent request per-session
    • 1830278: HeaderElement with children
    • 1797807: Listbox add Select All
    • 1839256: A way to control the timeout of the Ajax resend mechanism
    • 1843863: Able to Pass Arguments to Variable-Resolver Directive
    • 1829124: configure prefix to the URI on zkau browser resources
    • 1831559: A way to set a wrong value for textbox/Intbox...
    • 1832165: Borderlayout support onSize event
    • 1830924: A way to specify label's width easily
    • 1814621: JFreeChartEngine - rendering customization
    • 1830886: A way to make the listbox change its model less "drastic"
    • 1836417: HibernateSessionFactoryListener use different config name
    • 1642242: Display certain treeitem on screen (Autoscroll)
    • 1601002: Added onSelect event to the Combobox component
    • 1841480: HibernateSessionFactoryListner for web.xml
    • 1842533: Add default-bind to Radio.selected
    • 1796049: Like Timebox, Intbox must support only integer
    • 1780792: Disable checkmarks on some node of a tree
    • 1474209: Listbox supports the disabled property
    • 1843802: Comboitem supports the disabled property
    • 1656278: Menuitem enabled/disabled support
    • 1735287: Disable Toolbarbutton
    • 1721273: Event Enachment
    • 1632243: Add a getLine() function to textboxes
    • 1845283: A way to customize the writer for the update engine
    • 1828245: Add function to drop combobox/bandbox progammatically
    • 1846042: AbstractChartModel shall be serializable
    • 1849768: Desktop shall not removed if zuml page included by, say, JSP
    • 1849884: A way to retrieve the build identifier
    • 1850585: Pass request to DesktopInit
    • 1850584: Pass request to SessionInit
    • 1852144: A way to delay eval of a property value to rendering phase
  • Bug fixes:
    • 1844609: Failed if an event is processed too long
    • 1841816: Some error of Developer's Guide
    • 1839246: More reliable handling of Ajax requests
    • 1828044: When header is invisible, whole column should be disappeared
    • 1826938: Listbox Live Data
    • 1828702: InternalError when moving box's children
    • 1826872: IE6 100% CPU on Tree and Listbox
    • 1830311: Cannot display Japanese messages
    • 1827727: multiple disable-theme-uri discarded
    • 1831131: maven version of zcommons-el has issues
    • 1830668: Nested Windows Do Not Display Properly in FF
    • 1829811: data bind fails with radiogroup
    • 1830960: data bind does not work with Tabbox
    • 1826971: Console output 'experiment: creating class manager'
    • 1831534: Popup not working if poup window nested in vbox
    • 1832214: Borderlayout : isOpen return true while collapse region
    • 1831540: Tabbox setSelectedIndex() should not fire onSelect event
    • 1832359: A wrong height of grid&listbox when add header dynamically
    • 1826753: Bandbox.setButtonVisible does not always work
    • 1836257: A wrong stripe when listitem is invisible
    • 1829640: drag-n-drop does not work in Firefox
    • 1826808: Drag and Drop performance
    • 1826736: First column disappear when sort Listbox
    • 1835878: select / colapse of a Treeitem scrolls tree to right.
    • 1834900: Tree paging on Tree's Treechildren
    • 1835369: [IE Only] Grid floats outside Groupbox
    • 1838397: OutOfMemoryError if sendEvent called many times
    • 1838852: exception reattaching window in new desktop
    • 1828404: Treeitem setOpen doesn't load children
    • 1826700: Update content of treeitem from treemodel
    • 1839376: Composer cannot be defined using zscript
    • 1839959: Borderlayout should resize when onVisi is triggered
    • 1839634: ListModelSet not work well with HashSet
    • 1840101: Exception when sendRediect from a modal dialog
    • 1840003: Window's sclass property cannot be changed dynamically
    • 1840024: Component always returns the same id automatically
    • 1839960: Listbox rendering problems if wrapping occurs
    • 1843032: Infinite "Processing..." message during PRINT
    • 1844076: InputElement events not saving value
    • 1845904: fileupload is not specified in zul.xsd
    • 1840866: Modal windows jumping
    • 1834891: IE does not fire the onCtrlKey event correctly
    • 1843038: Fulfill doesn't support EL in apply property
    • 1833252: transient listeners in serializable result in NPE
    • 1845026: adding draggable to tree breaks event processing order
    • 1847708: OnBookmarkChanged doesn't send
    • 1848307: Minor component resize issue
    • 1848377: (Accordion) NullPointerException when tab/tabpanels mismatch
    • 1849076: NoSuchElementException in UiVisualizer
    • 1849088: New session is extra created when invalidate the session
    • 1848492: align and pack not work when VBOX in HOBX in FF
    • 1826606: A wrong calculation width when listheader is invisible
    • 1823947: Listbox Up & Down Btn faild in Opera
    • 1823278: Listbox selection upper bound index is -1
    • 1848501: Splitter fail to go back to right position
    • 1849239: Listbox.InsertBefore() not correct if with listhead
    • 1849838: Components with fulfill failed to serialize
    • 1850550: Popup doesn't work in Toolbarbutton
    • 1850895: encodeURL causes IllegalStateException with Websphere 5.1.1

Upgrade Notes

  • The signatures of the init methods of org.zkoss.zk.ui.util.DesktopInit and SessionInit are changed. However, it is backward compatible if you prefer not to re-compile your codes.
  • The signatures of the newSession method of org.zkoss.zk.ui.sys.UiFactory is changed. However, it is backward compatible if you prefer not to re-compile your codes.
  • The constructors of org.zkoss.zk.ui.http.SimpleSession, SerializableSession and org.zkoss.zk.ui.impl.DesktopImpl are changed.
  • The response methods of the org.zkoss.zk.ui.sys.UiEngine are removed. Use org.zkoss.zk.au.http.AuWriter instead.
  • The execUpdate methods of the org.zkoss.zk.ui.sys.UiEngine are changed. Use org.zkoss.zk.au.http.AuWriter instead.
  • The self variable in EL expressions of the apply attribute references to the parent component, if any.