ZK 3.0
Released on November 6, 2007.
Download Now
Getting Simpler and Richer
New Feature Highlight
- The performance of ZK is much improved - four ~ five times faster than ever!
- Server push is enabled which allows you to update client’s information actively and the usage is simple and intuitive.
- The ZK layout component which simplifies the job of UI designer.
- Customize layout of ZK components using CSS definitions.
- Add
forward and apply properties to realize MVC approach more easily.
SimpleListModelSharer - integrates server push and ListModel allows you to update data of clients based on the same data automatically.
- New expression of annotation is ease of use, and easy-to-read.
TreeModel is introduced which simplifies the job of Tree rendering.
- Flash components allow you to play audio and video files. (including youtube clip)
- Native namespace is implemented to speed up the performance while integration with HTML.
- To speed up the performance of ZK, EL evaluator is pluggable, and a new way to render ZK components is introduced.
- More integration with other frameworks, ZK has integrated with JSF, JSP, and Ext-JS.
- See also New Features of ZK 3.0.
Feature Updates
-
87 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:
- 1819982: Support the apply attribute to seperate view and controller
- 1820406: Support the xel-method directive to load method dynamically
- 1820771: Make ZK independent of JSP
- 1817685: A way to use CSS to customize tree's icons
- 1823850: A way to use CSS to customize focused listitem/treeitem
- 1824507: A way to customize the slider's look with CSS
- 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
- 1707513: Provide Complex Header in Grid/Listbox/Tree
- 1819879: Windows allows developers to change the style class
- 1823553: Groupbox allows developers to change the style class
- 1820434: A way to use CSS to customize splitter's icons
- 1820463: A way to ignore exception in Initiator's doCatch
- 1820519: A way to stop the processing an event in EventThreadInit
- 1739579: Tabbox supports disabled tabs
- 1823206: Menuitem's checked icon/separator customizable by CSS
- 1822158: Add getParentItem to replace deprecated getTreeitem
- 1823959: Grid failed to re-sync model (Opera/IE/IE7)
- 1824402: A way to close popup manually
- 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 of HTML
- 1780018: A way to specify the namespace of native components
- 1780020: Support to generate XML output directly
- 1765987: Add timebox (by merge timebox from zkforge to zul)
- 1758837: ZK Flash Component
- 1537229: Treemodel for Tree
- 1786163: A way to make EL evaluator pluggable
- 1786165: Provide MVEL plug-in
- 1788194: A way to specify a class mold for rendering a component
- 1787604: A way to import classes for EL evaluator, such as MVEL, OGNL
- 1760212: A simpler way to annotation a component
- 1760689: Data Binding using new simpler annotation to component
- 1760691: DataBinder support validation phase
- 1776269: Comboitem supports description in HTML raw content
- 1638395: Timer component and Session timeout
- 1771412: DSP TLD shall support tag uri
- 1780301: Performance measurement of ZK applications
- 1765119: Authentication & AU Http Status Code Handling
- 1753222: A way to assign text to a property instead of child component
- 1758761: A way to attach a root component before another one
- 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
- 1766020: Icon of datebox shall be configurable (like combobox)
- 1760850: DHtmllayoutServlet.process() as protected
- 1766667: DataBinder support multiple save-when events
- 1769025: Move isAsapRequired from HtmlBasedComponent to AbstractComponent
- 1769792: Component add onPageAttached and onPageDetached
- 1767347: DesktopCleanup shall called before UiEngine.desktopDestroyed
- 1770594: Tab: use class instead of hardcode background in style
- 1770613: Groupbox: use class instead of hardcode background in style
- 1770614: Slider: use class instead of hardcode background in style
- 1771384: a way to add xmlns on generated tag
- 1772915: Desktop supports getPageIfAny
- 1775445: DSP Loader supports the compress option (like ZK Loader)
- 1760203: expiration time of events execution in UiEngineImpl
- 1776006: Slider supports value submitting in form
- 1776007: Calendar supports value submitting in form
- 1780078: A way to map an extension to a language
- 1780128: shall support contentType
- 1780111: A way to specify DOCTYPE that will be generated to the client
- 1780804: A way to allow the client to cache the output
- 1782250: Performance improve: don't go thru Web container if incl ~./
- 1765212: Avoid annoying selection during drag-drop
- 1789258: A way to configure the cache of the event methods
- 1789830: A way to decouple Caption assumes LEGENG if default mold
- 1791353: Tabbox adds a simpler look
- 1441351: zebra colors for listbox
- 1792877: Tab and gbox's default height shall be configurable with CSS
- 1777430: Add getNextSibling/getPreviousSibling to Component Interface
- 1678806: Allow comboitems to carry a value payload
- 1800058: Provide align property for Box component
- 1802860: New improved translation to the the Catalan language
- 1803181: Change the modifier of org.zkoss.zul.Utils
- 1803253: Provide a simply layout component for ZK
- 1803964: Label's hyphen shall apply maxlength to each line
- 1806058: Listbox.selectedIndex should be setup default databinding
- 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
- 1811700: XUL box model: align and pack
- 1796284: MVEL easy way to access Resource Labels
- 1813503: A way to acess component being created in doAfterCompose
- 1803419: Providing schema definitions of 3rd-party components
- 1794409: Treerow need add onMouseover event
- 1487212: A way to intercept events
- 1773607: Provide pluggable OGNL expression evaluator
- 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
- Bug fixes:
- 1814702: ZK layout Fails to Resize
- 1816970: Splitter bar shall extends when size change
- 1816982: IE6 only. Splitter in 3d groupbox. Close then Open.
- 1816976: The contents shall resize when splitter collapse
- 1536301: Combobox bugged when in position:fixed container in IE
- 1817636: hbox overlaps the adjacent cells
- 1817627: Pageable sortable Listbox hides content when sorted
- 1818331: No zebra color in paging mold.
- 1818382: Vbox and Hbox isn't padding between its neighbor.
- 1818500: IE Cache Problem.
- 1818804: FF Only. ZK layout OnMouseOver Efect
- 1819037: Grid & Tree columns in ZK RC2
- 1819174: Listceel no more consider style
- 1820433: The selection is disabled wrongly.
- 1821912: Close Btn of Tab doesn't highlight when mouse over it
- 1819220: IE 6 SP 2 Only. ZK layout
- 1822517: FF only. Listbox syncModel not working correctly
- 1818985: Treerow doesn't fire onDoubleClick
- 1821517: Nested components and children setVisible method
- 1822720: Menu highlight doesn't disappear after clikc (IE only)
- 1823190: The zebra color of listbox show up very show in IE
- 1822564: Column can not resize by drag correctly
- 1822566: Column set Width doesn't work correctly
- 1822585: Grid:onColSize event.getColIndex() alwyas return 1
- 1823240: Location of tree's paging icons is wrong (RC2 only)
- 1822643: Tree setPageSize causes wrong active page of treechildren
- 1819318: ListModelSet not work when use SortedSet as its inner Set
- 1823207: ListModelMap not works when use SortedMap as its inner map
- 1727873: Grids with width="100%" inside a vbox have artifacts
- 1822727: Listbox/tree selection bug when toggle multiple
- 1822655: Gird: column and row doesn't align when set spans
- 1823510: If loading a page when the server starts, it sometime NPE
- 1823229: Splitter- The image of bar isn't updated
- 1823226: Splitter- The bar can be dragged over hbox
- 1823213: Listbox in hbox
- 1823832: Mask show up slowly when doModel in FF Linux
- 1823354: Listbox's content is fixed while vflex = true
- 1823802: Scroll-bar show up when click the last item in Listboxes
- 1823805: Button in a info window is incomplete.(IE7)
- 1823218: Tree with vflex, body grows over boarder.
- 1823858: Splitter- hbox in vbox
- 1823815: Can't add items in Mixed with HTML elements(Safari)
- 1823814: Listbox cannot display normally (Safari)
- 1823812: Side-menu will always jump to the top(Safari)
- 1823810: Borderlayout: "25%" areas are not displayed in Safari
- 1823809: Splittered areas are not normally displayed (Safari)
- 1823807: File Download doesn't work in Safari.
- 1823278: Listbox selection upper bound index is -1
- 1823213: Listbox in hbox right side bound is gone
- 1823236: Listhead gone when add Listitem via ListModel
- 1823946: Listbox update make IE6 freezed
- 1823921: Listbox crashed with complex Header
- 1823357: auxHeader(IE)- Can not change rowspan dynamically
- 1824832: Errors in zul.xsd
- 1825812: Tab of Tabbox is shrunk after operations, FF only
- 1825821: layoutRegion.setOpen(boolean); is failed on ZK layout
- 1718572: Popup windows alignment problems with table inside
- 1822575: Change window's height, component won't resize
- 1824580: Listbox flickers when sorting with paging mold
- 1820180: problem with resizing
- 1826517: A wrong calculation width when listhead is invisible
- 1826606: A wrong calculation width when listheader is invisible
- 1826101: Listbox size problem with paging mold
- 1797527: malformed zul.xsd
- 1801028: Failed to include ZUL located in classpath
- 1798123: DHtmllayoutPortlet.handleError throws exception in Pluto
- 1802187: zcommons-el 3.0.0-RC missing from Maven repo
- 1802487: Custom error page not loaded if failed to load classpath URL
- 1804356: NullPointerException in databinder using access load
- 1806741: Log does not work correctly
- 1806831: Resizing header is wrong for Gird, Tree, and Listbox
- 1487289: Menubar in a grid is covered by another grid (FF only)
- 1676365: Drag'n'Drop Problem on Opera
- 1577997: tabbox overflow error
- 1807361: Problem with slider in a scrolled grid
- 1806152: listbox fail to update when model's size is zero (IE only)
- 1808433: ZK layout with center always loads twice on FF
- 1799602: The popup of combox/datebox out of position in IE
- 1810142: Component.containsVariable failed if used in nest windows
- 1808035: ZK layout vs Modal Windows
- 1794296: fckeditor: onchange event issue
- 1804858: Toolbarbuttons in window caption without separating space
- 1811352: slider/calendar/tree doesn't post value if form.submit()
- 1812001: A scrollbar shows wrong in IE6&7
- 1692556: IE6 &7 drag performance becomes slower with Tree&ListBox
- 1807414: listbox/grid: setModel shall clean the current content
- 1797140: OnClick+OnDoubleClick on the same comp onDoubleClick ignored
- 1664661: Popups rendering behind portlet windows in IE
- 1812154: A wrong drag-position when the cursor moves on the header
- 1813055: Multiple listboxes with same selectedItem causes NPE
- 1813060: AbstractTag.clone() causes NPE
- 1813271: Data binding generates duplicate ids in grids/listboxes
- 1813278: Annotations do not work with xhtml tags
- 1814259: Failed to include a classpath-based resource with param
- 1814298: Memory Leak in EventThread
- 1814819: Variable instance doesn't be gc in first zscript(bean shell)
- 1814838: The last desktop of a zul,with EL in it, will not be gc.
- 1815074: Server Push stoped after reload by F5 twice in IE6
- 1814931: Media get wrong result when uploaded a big text file.
- 1815480: Session timeout with server push causing NPE
- 1815513: Paging should not post a onPaging event when setPageSize
- 1656101: Resizing listview columns doesn't work properly with opera
- 1711480: resizable columns causes grid/listbox display error
- 1712708: Grid column size
- 1726038: Grid sizable bug
- 1813722: Wrong grid column width
- 1815482: Problem With Hidden Listbox and Rows
- 1815633: Desktop doesn't be expunged when # of desktop > max desktop per session.
- 1755342: Defining Meta Tags with keywords
- 1815882: Tree vflex is broken without treecol
- 1605061: alert freeze only half page
- 1816205: setVParent bug in modal window
- 1816372: Messagebox depends on BeanShell
- 1816666: ZK layout splitter disappears in its nightbor width
- 1816451: In ZK Popup window demo, popuped window cann't move outside
- 1816436: The scroll bar is disappear in ZK demo, IE 6
- 1816892: If popup the same menu twice, the second time's offset wrong
- 1751603: zk.renType in common.js not handling sessionid
- 1752477: combobox in groupbox and vbox failed to pos button (IE only)
- 1753712: Detaching component in DesktopCleanup causing IllegalStateException
- 1753216: ZUL Tree onOpen vs Page Size
- 1753269: Inproper deleting rows from grid with live data
- 1755235: zkplus doesn't work with Java 1.4
- 1755843: if/unless not working for onClick events
- 1757607: Failed to open two or more treeitem of the same tree
- 1759419: Path.getRequestPath returns "" if generated by zkFilter
- 1761686: Failed to reposition grid foot
- 1769047: Fail to data binding listbox with nested attributes
- 1765819: Combobox.setReadonly(boolean) doesn't work
- 1766244: IE only (6.0, 7.0): Combobox arrows render outside grid
- 1773652: Error message for non-existent zs fie is wrong
- 1773575: button href attribute with "#" character leads to js-loop
- 1768343: zk-2.4.1 - annotations not available at constructor
- 1773902: OpenSessionInViewListener not properly close Hibern. Session
- 1774432: Bug in adding treeitem to tree's first-level treechildren
- 1775339: getWriter() has already been called while use forward
- 1775051: Listbox multiple select and databinding issue
- 1778258: EL cause nullpoint when createComponent or fulfill
- 1778320: Grid/listbox/tree don't support scrollTop well
- 1777696: Richlet served error page fails
- 1770144: Memory Leak in AImage
- 1783363: Unable to drag a listitem out of the box (IE only)
- 1786348: Failed to include two ZUL files
- 1789211: French translation errors
- 1786154: forEachStatus.previous.index fail to set inner forEachBegin
- 1786082: tab - onClick not fired
- 1780044: Dynamically created tab box not shown properly in Firefox
- 1785457: SpringTransactionSynchronizationListener requires Hibernate3
- 1771810: Incorret display of a datebox calendar inside a popup
- 1760140: Comboitem error in overlapped windows
- 1789428: ON_DROP event not fired on imagemap (FF and Safari only)
- 1757257: Bandbox dtid is null in Firefox with Liferay
- 1791498: Visual effect of tab's width incorrect if select large panel
- 1758638: Trunked filename when Filedownload
- 1792403: Listbox/combobox use class instead of style to style onmouseove
- 1756589: Updated Listitem cannot be select in IE after a few seconds
- 1719826: Listbox componet disapear
- 1760929: Overlapped windows can't be created in not visible container
- 1793044: Returns wrong value from Utils.intsToString()
- 1775014: Grid Size Growing After SetModel
- 1755847: Overlapped window owned by popup closes both when closed
- 1756559: Listbox ("select" mold) mouseless selection (FF only)
- 1731646: error-popup not visible
- 1694095: Combobox list vertical position
- 1765047: tabbox not rendering well with percent width
Upgrade Notes
- The
pageContext variable in EL expressions becomes an instance of
org.zkoss.web.servlet.xel.PageContext
Initiator 's doCatch() now returns a boolean to indicate whether to ignore
the exception.
Note: it is backward compatible that you don't need to re-compile your codes-
- In zk.xml,
disable-default-theme is replaced with disable-theme-uri .
EventThreadInit 's init() now returns a boolean to indicate whether
to continue the processing of the event.
- Throws an exception in
EventThreadResume 's afterResume() will stop
the execution.
- The look of a tree is now customizable by use of CSS. Refer to Java API.
The icon-uri , icon-width and icon-height attributes are no longer used
- The way to customize the zebra color (striping) of
grid is changed.
ZK 3.0 uses dual class names, grid and odd , to provide the style
instead of renaming the class name to grid-od . Note: odd is the
default value returned by getOddRowSclass() , which is customizable.
Example,
tr.odd td.gc {
background: yellow;
}
- The way to customize a
grid not to stripe rows is changed:
<grid oddRowSclass="none">
-
el-config (of zk.xml) is replaced with xel-config , and the class
must implement org.zkoss.xel.ExpressionFactory instead of
javax.servlet.jsp.el.ExpressionEvaluator .
-
org.zkoss.zk.scripting.VariableResolver is removed.
Use org.zkoss.xel.VariableResolver instead.
- EL expressions specified in
lang.xml and lang-addon.xml need to
specify self to access a property.
-
org.zkoss.zk.scripting.Method is deprecated
Use org.zkoss.xel.Function instead.
-
Page.getZScriptMethod() is deprecated.
Use Page.getZScriptFunction() instead.
- The
onTimer event won't keep the session alive.
To make it behave the same way as old versions, you can specify
<session-config>
<timer-keep-alive>false</timer-keep-alive>
</sesion-config>
- The signature of
PageCtrl 's init method is changed.
- The signagure of
ComponentInfo 's applyProperties is changed
- Utilities of JSP, such as JspLoaderServlet, are removed, since they are
nothing to do with ZK
- The signature of
LanguageDefinition 's contructor is changed.
- About directives:
New name are introduced though it is backward compatible with old versions:
The component directive
mold-name is renamed to moldName
mold-uri is renamed to moldURI
macro-uri is renamed to macroURI
The page directive:
script-language is renamed to scriptLanguage
- About
zk.xml :
The disable-behind-modal , keep-across-visits , processing-prompt-delay
and tooltip-delay elements are moved to the client-config element,
though you still can specify them under the desktop-config element
(because of the backward compatibility)
- Device is shared by all desktops. The
init method is changed.
It is better to derive from org.zkoss.zk.device.GenericDevice .
If the hyphen property of label is true, it means the maximal allowed
length of each line, rather than each word.
|