ZK 5.0 RC2 release notes

Released on December 9, 2009.

Architectural Advancements

Server+Client Fusion

Since 2005 ZK has been renowned for its' server-centric approach, providing the ultimate in productivity gains. We will continue to push the server-centric envelope to make ZK even more productive. In addition to the server-centric approach, developers can now optionally leverage the full controllability of client-side programming using jQuery and GWT(available soon)!

ZK is developer-centric

It's the developer's choice whether to implement a function using either server-side or client-side development according to their requirements. In fact, now developers do not need to choose between productivity and controllability as you can use both server-centric and client-centric approaches in the same application, even in the same page! The amalgamation of these two development strategies is called Server+Client Fusion.

It is not about server-centric or client-centric, it is about developer-centric!

For more information please take a look here!

Ajax-as-a-Service

One of the main new architectural features is the ability to load client-side JavaScript packages from distributed servers. This means that a local copy of the library does not have to be kept, freeing authors from constantly updating their application to use the latest libraries. This architecture delivers EAI integration at the client-side, enabling the same close knit ease of integration of a backend system but at the client!

For more information please take a look here!

LGPL License

To extend our reach beyond what a GPL-licensed framework can achieve, ZK 5 CE[1] is now moving to LGPL (Lesser General Public License) offering more freedom and allowing ZK to be integrated with more frameworks under different licensing models.

Now, with the LGPL-licensed ZK 5 CE, you are free to use, develop and deploy your ZK powered application/framework, regardless of whether it is open source, proprietary, or commercial.

ZK 3 and older versions were licensed under the GPL and will continue to be in the future. For more information, please visit the license page.

[1] ZK is released under three editions: CE (Community Edition), PE (Professional Edition) and EE (Enterprise Edition).



Getting Simpler and Richer

New Feature Highlight

  • Server+Client Fusion technology
  • Ajax-as-a-Service
  • Enhanced layouts using vBox/hBox and vFlex/hFlex support to all components
  • Colorbox component
  • Flash charting component
  • ThemeProvider caching control
  • New file upload component
  • New Cell component
  • Inplace editing supported
  • Auto fitting column support
  • Freezing columns within Grid and Listbox supported
  • Enhanced Datebox
  • ToolbarButton & Button functionality enhanced
  • Overlapping window effects improved
  • New configuration options

  • Please see New Features for more!

  • If you would like to upgrade from an older version the upgrade notes are available here!

Feature Updates

  • 120+ off-the-shelf Ajax 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 access 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 Tracker:
    • 2889241:Message translated to Korean. Thank Deok-su Lee for his contribution
    • 2825713:EventQueue support application-level publish (by sever-push)
    • 2822395:Adds component for HTML A, rather than overuse toolbarbutton
    • 2787713:Button automatically disable itself after clicked
    • 2866325:A simple way to change the default mold
    • 2815551:Include supports non-HTML content (by use of comment)
    • 2491275:ZHTML checkbox fire onCheck (in addition to onClick)
    • 2794752:Fisheye supports dynamic images
    • 2794753:An option to specify whether the content can be crawled
    • 2831852:Allow developer to specify directory to load JavaScript file
    • 2834187:A way to load client (JavaScript) packages from diff servers
    • 2831854:A way to run certain JavaScript codes w/o load it explicitly
    • 2816588:A way to parse app-specific configuration in zk.xml
    • 2817315:Support client-centric programming model
    • 2832982:Button supports Ctrl+Click if href is specified
    • 2822834:Button supports toolbar mold and toolbarbutton d. from it
    • 2841695:Enhance Datebox and Calendar layout
    • 1832887:InputElement support in-place editing
    • 2121859:New component: Cell
    • 2845947:vflex/hflex supported in every component
    • 2845956:vflex/hfex supports proportion and min
    • 2849793:Replace fixedLayout with sizedByContent in Gird/Listbox/Tree
    • 2853314:ZK Client Engine support canvas
    • 2858441:Merge attributes of ID space and component for space owner
    • 2859159:A way to listen changes of attribute in session/execution/appplication
    • 2859867:forward="onX=" shall be shortcut of forward="onX=onX"
    • 2861283:hbox/vbox pack attribute supports stretch option
    • 2855116:add data binding support for custom attribute tag
    • 2879519:More control of ThemeProvider against widget's CSS
    • 2887668:Ignore client command if component is invisible/disabled
    • 2893117:The include comp's default width/height 100% if the only child
    • 2867437:Borderlayout shows a collapse button on splitter
    • 2898291:a way to maximize the panel according to portal layout
    • 2187771:Panel re-sizeable
    • 1831148:Support of ColorChooser
    • 2926746:Variable Resolver that resolve CDI(JaveEE 6) managed bean
    • 2927319:EventQueue supports asynchronous listener
    • 2932595:New mold for combobox, datebox, timebox, spinner, bandbox
    • 2889241:Message translated to Korean. Thank Deok-su Lee for his contribution
    • 2821761:Tabbox support extra tabs to display other cmps on the bar
    • 2813737:Support new "dial" chart
    • 2874457:A way to automatic timeout at client without user's activity
    • 2811973:Log the event thread that takes too long to execute
    • 2813778:Upgrade to jython 2.5
    • 2817733:doModal degenerate to doHilighted if event thread disabled
    • 2836829:A way to disable the compress of DHtmlUpdateServlet
    • 2873957:menubar in horizontal support scrollable functionality
    • 2873954:menu support onClick
    • 2857412:Feedback on server push error
    • 2878584:A plugin to customize the encoding of filename
    • 2882221:Long word in Messagebox can be broken correctly
    • 2882272:Datebox support set timezone list
    • 2787715:Messagebox shall recognize linebreak
    • 2789884:Include supports macro (page-less) mode
    • 2788162:Support the script directive ( )
    • 2788752:Introduce beforeParentChanged, beforeChildAdded...
    • 2787711:Hope paging setTotalSize() won't affect inputing active page
    • 2677655:A way to use ID as UUID for unit test purpose
    • 2724923:Support scrollIntoView to scroll an element to become visible
    • 2779199:A way to let composer monitor the composing of all children
    • 2778513:Add "xxx$composer" as a variable of applied GenericXxxComposer
    • 2666743:Support component-apply in lang-addon
    • 2666812:Log ZK version number at server bootup
    • 2677873:A way to always get full stacktrace
    • 2681333:Resumable filedownload limit to allowed period and number
    • 2681775:Resumable filedownload supports relative path
    • 2689696:Native namespace supports zkhead
    • 2713463:Audio supports the loop attribute
    • 2718665:Flash supports the dynamic content (setContent)
    • 2314215:A way to specify the position of the popup component
    • 2779281:Add save-after descriptive to DataBinder
    • 2783319:Datebox support hour format
    • 2276253:Allow Tab key in textbox
    • 2285243:SelectEvent getKeys()
    • 2314655:Apply composers on custom components
    • 2433264:Able to access the URI of the error page
    • 2437121:Make DHtmlLayoutServlet as optional
    • 2448278:Chart could provide default model
    • 2493161:A way to instantiate a macro programmingly w/o macro declaration
    • 2512695:Able to change UiFactory, IdGenerator.. in WebAppInit
    • 2512555:Converter convert date to String with annotated format
    • 2559476:A way to turn off the filtering of clicks
    • 1733461:throw new WrongValuesException(WrongValueException[])
    • 1874325:Listbox add a setSelectedItems(Set)
    • 2495414:Config to disable shadow for Window
    • 2295541:Listhead/listheader/column/columns support set/getValue method
    • 2191823:Localize loading message
    • 2313219:Support GenericForwardComposer in groovy
    • 2173627:A way to specify where to gen ZK tags in JSP (incl zul)
    • 2173943:Enhance the generation of noscript (unavailable message)
    • 2188951:Provide layout(template)-injection page composition
    • 2354769:Add the ZK 3.0.x button mold for ZK 3.5.x
    • 2354768:Add the ZK 3.0.x paging mold for ZK 3.5.x
    • 2368975:Data binder provide getAllBindings() to ease getting all
    • 2117539:Support Session Fixation Protection
    • 2125862:Extendlet supports filters
    • 2127848:New Tree style
    • 2139857:Components.addForward shall handle cascade $ name pattern
    • 1973888:Listbox support Listgroupfoot in Group
    • 1972591:Grid support Groupfoot in Group
    • 1997391:Provide a new component, Panel, like Window but more richer
    • 1959952:Support Comet-based Server Push
    • 1951422:Grid: support grouping
    • 1962747:Allow to specify a XML fragment as component's content
    • 1845373:Support switch/case and choose/when
    • 1925928:Add Spinner Component
    • 1937237:Grid support vflex like Listbox and Tree
    • 1957737:Support the function-mapper directive
    • 1955562:For theme: menuitem unchecked not visible
    • 1895872:Keyboard support for menues
    • 1977343:The booting progress bar covers only ZK page if included
    • 1981878:Groupbox's default mold support open/close effect as 3d mold
    • 1997383:Provide a panel mold for Toolbar as Panel's foot toolbar
    • 1997384:Toolbar support alignment control
    • 1444991:Minimize / Maximize window decorations
    • 1953842:Make Slider support vertical mold and scale style
    • 1968749:A way to pass object in forward attribute
    • 1978624:Keyevent support for every ZUL component
    • 1978636:Keyevent support getReference() to get the causing component
    • 1982861:variables and custom-attributes support List and Map
    • 1959959:An option to allow user to refresh if an error
    • 1966723:A way to customize confirm upon retry (resend mechanism)
    • 1873553:Integration with JSP and CSS problems
    • 1883237:A way to register listeners for particular desktop
    • 1966839:Able to listen when a component is attached, detached...
    • 1968393:A way to run JavaScript after certain module is loaded
    • 1964646:[patch] Don't detach item children in ListitemRenderer
    • 1886786:Listbox SelectAll Checkbox should consist with all the items
    • 1936936:Improve error messages for invalid properties and expression
    • 1864622:progress loading gif using CSS
    • 1978632:A ZK page being included shall inherit width and height
    • 1997525:Support autowire variable object utility
    • 1951358:A way to have component-specific Command
    • 1951286:JavaScript utils: comm.sendClick and comm.sendUser
    • 1936373:Translate messages to Arabic. Thank Ayman Ahmed Elgharabawy for his contribution.
    • 1944512:HtmlBasedComponent supports setFocus(boolean)
    • 1947534:A way to specify the session cache
    • 1948462:AuResponse supports DeferredValue
    • 1953246:Smart update supports an array of values
    • 1949336:Component supports isInvalidated
    • 1914491:BindingListModel subclasses are not accessible.
    • 1894194:Window.setMode("modal") shall not suspend even in listener
    • 1898211:An option to use uncompress javascript codes
    • 1912487:A way to set system properties in zk.xml
    • 1886684:Translate messages to Czech. Thank Pavel Mica for his contribution.
    • 1892573:Add Jython Interpreter
    • 1896737:An easy way to let user know include a long operation page
    • 1911773:Grid/Listbox support scrollbar in Paging Mold
    • 1919456:Change the active page when setSelectedIndex called
    • 1883329:Translate messages to Ukrainian. Thank Denis Yarkovoy for his contribution.
    • 1883328:Translate messages to Russian. Thank Denis Yarkovoy for his contribution.
    • 1878682:Able to turn off the Ajax resend mechanism
    • 1878785:Able to retrieve URL that a component is declared
    • 1879464:Use div instead of table as the outer tag of groupbox 3d
    • 1879495:Use div instead of table to implement tabpanel
    • 1764967:Combobox to support List binding
    • 1392551:Add filter for combobox
    • 1867539:Combobox to support type-ahead
    • 1796281:Improve Working with Combobox
    • 1598234:strict autocomplete in comboboxes
    • 1867638:The fulfill attribute support multiple component
    • 1854894:Allow EL expression in the use attr (consistent with apply)
    • 1874335:Support the forward directive to forward to another page
    • 1854857:A way to specify a range for datebox's constraint
    • 1482341:Datebox supports a valid range of days
    • 1485247:Datebox supports a valid range
    • 1855653:Optimize Live Data with Listbox and Grid
    • 1853745:A way to customize input&textarea's invalid look with CSS
    • 1857363:A way to invoke event listener after updating client
    • 1853791:JpaUtil and OpenEntityManagerInView
    • 1858762:A way to show the busy message from server
    • 1859533:Prevent the same button clicked twice for long operation
    • 1873426:Don't stop loading lang.xml if class not found
    • 1836198:A generic event listener which invokes corresponding method
    • 1835773:Support longbox
    • 1838456:A way to customize progressmeter's look with CSS
    • 1845942:JndiVariableResolver to Get Variable from JNDI Binding
    • 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
    • 1814621:JFreeChartEngine - rendering customization
    • 1836417:HibernateSessionFactoryListener use different config name
    • 1642242:Display certain treeitem on screen (Autoscroll)
    • 1842533:Add default-bind to Radio.selected
    • 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
    • 1849768:Desktop shall not removed if zuml page included by, say, JSP
    • 1849884:A way to retrieve the build identifier
    • 1852144:A way to delay eval of a property value to rendering phase
    • 1819982:Support the apply attribute to separate view and controller
    • 1817685:A way to use CSS to customize tree's icons
    • 1823856:A way to change theme uri dynamically
    • 1823965:A better way to do disable-default-theme
    • 1732886:Scroll Listbox on Selection
    • 1817456:Full Support ZK Layout Theme
    • 1765212:Annoying sellection during drag-drop
    • 1755433:Complex column heading
    • 1819879:Windows allows developers to change the style class
    • 1823553:Groupbox allows developers to change the style class
    • 1739579:Tabbox supports disabled tabs
    • 1822158:Add getParentItem to replace deprecated getTreeitem
    • 1823959:Grid failed to re-sync model (Opera/IE/IE7)
    • 1811241:A way to access Execution in DesktopInit
    • 1811274:A way to access Execution in IdGenerate.newDesktopId
    • 1811281:A way to access Execution in IdGenerator.newPage
    • 1796284:MVEL easy way to access Resource Labels
    • 1487212:A way to intercept events
    • 1733589:get uploaded Media as InputStream regardless of its MIMEtype
    • 1815594:A way to plugin a class to determine the encoding of upload
    • 1815523:A way to show Popup manually
    • 1779346:Messagebox : change default focus
    • 1736341:A way to define the layout of Tab on the Tabbox
    • 1787513:Translate messages to Hungarian. Thank Andreas Klein (andiklein@idatso.com) for his contribution.
    • 1579332:Server Push
    • 1776116:A way to forward event to another component w/o programming
    • 1774559:Introduce the native namespace to speed up the handling HTML
    • 1765987:Add timebox (by merge timebox from zkforge to zul)
    • 1758837:Zk Flash Component
    • 1537229:Treemodel with Tree
    • 1786163:A way to make EL evaluator pluggable
    • 1786165:Provide MVEL plugin
    • 1788194:A way to specify a class mold for rendering a component
    • 1776269:Comboitem supports description in HTML raw content
    • 1638395:Timer component and Session timeout
    • 1771412:DSP TLD shall support tag uri
    • 1765119:Authentication & AU Http Status Code Handling
    • 1753222:A way to assign text with element to a property than child
    • 1758761:A way to attach a root component before another root
    • 1751674:WebApp retrieves the major/minor version from getVersion
    • 1752559:The script component shall support the content property
    • 1752569:The style component shall support the content property
    • 1752431:Change the modifier of addMoved in AbstractComponent
    • 1753168:nextComponentUuid shall be called as late as possible
    • 1759278:A way to get the request path of desktop
    • 1766667:DataBinder support multiple save-when events
    • 1769792:Component add onPageAttached and onPageDetached
    • 1767347:DesktopCleanup shall called before UiEngine.desktopDestroyed
    • 1771384:a way to add xmlns on generated tag
    • 1772915:Desktop supports getPageIfAny
    • 1775445:DSP Loader supports the compress option (like ZK Loader)
    • 1765212:Annoying selection during drag-drop
    • 1789258:A way to configure the cache of the event methods
    • 1791353:Tabbox adds a simpler look
    • 1441351:zebra colors for listbox
    • 1792877:Tab and gbox's default height shall be configurable with CSS
    • 1744123:Improve the way the performance of handling a huge tree
    • 1746896:Support gzip to send back JS, CSS and AU responses
    • 1747429:Interpret .ZUL loaded from classpath
    • 1736861: should be device dependant (ZK Mobile)
    • 1738246:Improve multiline textbox with maxlength
    • 1743271:Generic way to handle ThreadLocal variables issue
    • 1743288:Make button icon of comobox/bandbox configurable
    • 1736887:Unnecessary .js files and reducing zk pages loading time
    • 1727154:Support the fulfill attribute to defer creation of children
    • 1728718:A simple way to annotate properties
    • 1715542:Window supports the highlighted mode
    • 1733166:A way to provide more sophisticated JS for ClientConstraint
    • 1712518:Decimalbox supports different round mode (Java 6 is required)
    • 1715649:A way to create inline macro manually
    • 1712548:isAsap shall not be part of EventListener
    • 1721123:Improve performance if DOCTYPE is specified in zhtml
    • 1719781:Allow component itself to arg0 AnnotateDataBinderInit
    • 1721126:Configurable Tab Height
    • 1725484:Prevent the 2nd onOK and onClick if the prev is processing
    • 1728196:Interpreter supports containsVariable
    • 1728157:getProperties() for class ComponentInfo
    • 1727687:add Component[] constructor to Box, Hbox and Vbox
    • 1731138:AnnotateDataBinder should allow relative path
    • 1715546:Messagebox supports the native (Servlet) thread mode
    • 1731126:timout redirect should be device aware
    • 1732614:Support ComponentCloneListener
    • 1698249:A way to customize the error box without writing JavaScript
    • 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
    • 1686617:generate onClientInfo when browser size changes
    • 1687371:button and checkbox suport DoubleClick
    • 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
    • 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.
    • 1666877:Support the variables element
    • 1655219:Radiogroup's layout independent of Radio button
    • 1676244:Grid supports live data (ListModel)
    • 1678817:Macro components support inline expansion
    • 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
    • 1669614:A way to override the impl of WebApp
    • 1665332:Add Listbox binding support for enum
    • 1671646:The attribute element supports trim="true"
    • 1665366:Personalize upload dialog
    • 1672116:Personalize the message dialog
    • 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
    • 1678288:Replace onShow with onOpen with open = false
    • 1678856:Scrollable window
    • 1642895:Groupbox without a border
    • 1678796:Get value of a Decimalbox as a double
    • 1677711:A way to specify the width for each column of hbox
    • 1615999:Allow a span of '0'
    • 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
    • 1683464:Upgrade to JRuby 0.9.8
    • 1656785:Ruby support (for zscript)
    • 1639117:Add Tree footer (treefoot and treefooter)
    • 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.
    • 1647599:Allow the page directive being placed under other elements
    • 1649781:DataBind support nullify default configuration
    • 1649795:DataBind support disable default configuration