ZK 8.0.0 release notes

Released on Oct. 6, 2015


ZK 8 is aimed to provide a more powerful solution that combines the strengths of both client and server sides. New features like enhancement in MVVM, new form binding approaches, and many more make the interaction between the two sides much more easier!

ZK 8 enables developers to effortlessly integrate with any 3rd party Javascript libraries. Leveraging ZK 8, design and development teams will have a much easier job and spend less time creating applications which look great and perform better than ever.




Getting Simpler and Richer

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, CKeditor, and Timeline components.
  • Event-driven, server-centric model
    • Ajax requests, application notification, and server push are all managed as events
    • Event Queue shields developers from the complexity of Ajax and server push, such as multi-thread programming
    • 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.
    • POJO components supporting interfaces and clustering. Easy to instantiate and manipulate directly with pure Java, or injected and managed by an AOP framework, such as Spring
    • Macro components. Develope full-featured new component by using other 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
    • ZK-1717: Support dymic template
    • ZK-1972: ZK bind support access vm properties in client side
    • ZK-1983: add a "today" button to datebox's calendar popup
    • ZK-2476: Support to plug a different parser for parsing a page
    • ZK-2484: provide ListModel support for arbitrary components/elements
    • ZK-2508: Enhance ForEachStatus to be consistent with JSTL's varStatus properties.
    • ZK-2545: Children binding support ListModel
    • ZK-2546: Component EL resolver performance boost
    • ZK-2569: Provide localized message for fileupload
    • ZK-2576: Support a shadow element concept for Databinding or EL expression
    • ZK-2578: Add one more phase when initial bindings
    • ZK-2581: Add a @SmartNotifyChange annotation that triggering the notification once the value of the property is changed
    • ZK-2584: Support @command and @global-command for client side to use
    • ZK-2591: zk.loadScript() can check file existence
    • ZK-2596: Support JSR 341: Expression Language 3.0
    • ZK-2612: ZHTML support textContent attribute for dynamic data binding
    • ZK-2613: ZHTML component's src attribute support encodeURL like Image in Zul
    • ZK-2614: ZK DataBinding support client callback function after some command triggered
    • ZK-2620: Upgrade Font Awesome to 4.3 version
    • ZK-2631: Parser support another namespace for shadow element
    • ZK-2632: Parser support disorder template tag
    • ZK-2638: simplify exception handling (avoid wrapping RuntimeExceptions)
    • ZK-2641: Support custom error message for input element that has multiple constraints
    • ZK-2650: BindingParam annotation support converting from JSON to POJO automatically
    • ZK-2660: Sync grid column visible state in client/server side when show/hide column through menupopup
    • ZK-2662: Setting width on Auxheaders causes incorrect colspan
    • ZK-2668: New Build-in Converter - FormattedTimeConverter
    • ZK-2674: Add an annotation for notify command
    • ZK-2675: Add an annotation for client command
    • ZK-2698: Add a lightweight rich editor
    • ZK-2707: Add a timepicker component
    • ZK-2708: Add a rowlayout component
    • ZK-2713: Clients.java support loadScript and loadCSS API
    • ZK-2718: Forbidden to set hflex/vflex and width/height at the same time
    • ZK-2724: Add a callback mechanism for component at redraw phase
    • ZK-2725: New ZK message support - Danish translation
    • ZK-2727: Utilize Scrollview component in desktop
    • ZK-2730: Support client data attributes handler
    • ZK-2753: el3 enhancement for invoking customized static method
    • ZK-2800: replacing a listmodel item should re-renders only one item
    • ZK-2819: Provide a websocket channel to share application data between ZK and non-ZK application
    • ZK-2822: Provide a channel to communicate between client and server with ZK composer
    • ZK-2831: Support deferred evaluation like JSF #{}
    • ZK-2838: Shadow Template Support MVC
    • ZK-2876: ZK Custom Taglib should support the depends attribute to load them in order
  • Bugs fixed

      • ZK-1590: Doesn't listen to w:onShow
      • ZK-1696: Active page of tree not sync while model changed
      • ZK-1848: Form Binding doesn't update the bean field when a binding bean changed
      • ZK-1987: Combobox item selection rely items label string
      • ZK-2078: FormBinding with collections does not cache the changes
      • ZK-2083: MVVM Form Binding with References
      • ZK-2534: Listbox allows selection with checkable="false"
      • ZK-2542: @converter causes a big performance issue on the nested children binding
      • ZK-2552: Tabbox model NotifyChange problem
      • ZK-2592: @validator('formBeanValidator'... does not validate nested properties
      • ZK-2598: forward event behaves inconsistent inside an include
      • ZK-2663: Popup does not show up when its parent is native
      • ZK-2691: chosenbox rendering inconsistently and losing selections
      • ZK-2716: xhtml component dynamic updates
      • ZK-2721: sh:apply parameters leaking into templates
      • ZK-2726: Bean proxy object cannot accept a null value
      • ZK-2735: Form proxy with enum property
      • ZK-2736: Form proxy with Immutable values
      • ZK-2737: Form proxy with calculated (transient) fields
      • ZK-2738: Break line merge problem in zul file
      • ZK-2744: pause comet server push while au isn't ready
      • ZK-2758: unset parameter affects following template invocation
      • ZK-2760: Child not allowed in org.zkoss.zhtml.Input (with open & close tags)
      • ZK-2762: zk:zscript tag directly inside html or head tag no longer works
      • ZK-2763: Property 'bindingAttributes' not found on type org.zkoss.bind.BindComposer
      • ZK-2772: Misaligned Grid columns
      • ZK-2789: leaking "each" variable with nested childen/model binding
      • ZK-2792: sh:forEach insert item at wrong position
      • ZK-2799: sh:forEach with multiple inserts
      • ZK-2803: Tabbox with ListModel cannot close tab when using EL
      • ZK-2807: notifyChange on method name only in ZK 8
      • ZK-2823: forEach error when clearing ListModelList
      • ZK-2833: circular @DependsOn causes StackOverflowError
      • ZK-2837: nested foreach/if/apply problems
      • ZK-2843: MVVM does not support WireVariable rewireOnActivate
      • ZK-2845: whitespace issue with shadow element and native element
      • ZK-2855: multiple templates in the same component are ignored
      • ZK-2856: JSON output is not valid
      • ZK-2861: JSON objects in parsed with doublequotes (")
      • ZK-2865: tree with model not rendering correctly
      • ZK-2868: apply template creates unexpected empty label
      • ZK-2869: apply template in <x:div> is not working
      • ZK-2880: Comboitems outside of combobox when updating the model
      • ZK-2881: unexpected focus class location
      • ZK-2882: nested model/template binding (each-var visibility)
    • Upgrade Notes
      • Deprecated the method of getEach() in org.zkoss.zk.ui.util.ForEachStatus, use getCurrent() method instead.
      • Removed the classes of org.zkoss.bind.SimpleForm, org.zkoss.bind.impl.FormImpl and org.zkoss.bind.impl.FormExt, please use Form Proxy mechanism instead.
      • Renaming icons for upgrading Font Awesome to 4.3
        • z-icon-move to z-icon-arrows
        • z-icon-resize-full to z-icon-expand
        • z-icon-resize-small to z-icon-compress
        • z-icon-resize-vertical to z-icon-arrows-v
        • z-icon-resize-horizontal to z-icon-arrows-h
        • z-icon-fullscreen to z-icon-arrows-alt
        • z-icon-hospital to z-icon-hospital-o
        • z-icon-unlock-o to z-icon-unlock-alt
        • z-icon-ellipsis-horizontal to z-icon-ellipsis-h
        • z-icon-ellipsis-vertical to z-icon-ellipsis-v
      • Removed the icons for upgrading Font Awesome to 4.3: z-icon-expand-o, z-icon-collapse-o
      • The library property of org.zkoss.zk.ui.invokeFirstRootForAfterKeyDown.enabled is false by default.
      • Deprecated the method of setWidgetAttribute() and getWidgetAttribute() of org.zkoss.zk.ui.Component, use setClientAttribute() and getClientAttribute() method instead.
      • Add a restriction that it's forbidden to set width/height/hflex/vflex in Auxheader.
      • Deprecated the method of setCheckable() and isCheckable() for Treeitem and Listitem component, use setSelectable() and isSelectable() instead.
      • The selectAll checkmark on listhead can support on Listbox with model in paging or non-paging mold, no matter whether in ROD or non-ROD mode.
      • The Selectable interface adds two new methods, setSelectionControl(SelectionControl) and getSelectionControl(), for select all function. By default
      • For Listitem and Treeitem component, if the value of isSelectable() or isCheckable() is false, it means the item cannot be selectable or navigable.
      • AbstractListModel and AbstractTreeModel now implements Pageable interface, recommend controling paging from model directly, instead of using component. If paging information was not set on model, when setting model to a component, model will inherit paging information from component. If model has its own paging information, when setting model to a component, paging information on the model will overwrite paging information on the component.