New Features of ZK 5.0.6

From Documentation
DocumentationSmall Talks2011FebruaryNew Features of ZK 5.0.6
New Features of ZK 5.0.6

Timothy Clare, Technology Evangelist, Potix Corporation
February 24, 2011
ZK 5.0.6

ZK 5.0.6 is a maintenance release focusing on fixing bugs and releasing new improved features for ZK components.

Enhanced layouts using hflex and span

There are two methods of controlling the width of a column, width and hflex. Both these options are specified in the column or listheader definition. The width attribute takes a precise number such as 100px whereas hflex is used to specify a proportional width such as hflex="1". If the total width of all columns is smaller than the Grid then whitespace will be shown on the far right of the grid. To counteract this one can use the span attribute which when set to true will make every column's width a bit larger to cover the whole grid.

ZK 5.0.6 has enhanced hflex and span to give the developer more power when controlling the size of the grid, listbox and tree columns. Firstly let's take a look at the hflex enhancement.

The min value

As developers we may wish for the width of a column to be dictated by the size of the content. This requirement is satisfied by the min option, which when used let's hflex know to size the component dependent upon its content. For example.

 	String[] msgs2 = {
  			"Application Developer's Perspective",
  			"Very Short Text",
 			"Server+client Fusion architecture",
 			"Execution Flow of Serving an Ajax Request",
 			"Very Short Text",
 			"When to Send an Ajax Request (Addition Text )"
    <listbox width="800px">
 			<listheader label="Product" hflex="min"/>
 			<listheader label="Description" hflex="min"/>
 			<listheader label="Comment" hflex="min" />

ZK5DevRef GridColumn nospan.png

For more information please see the ZK Developer's Reference.

The span attribute

Sometimes it is preferred for the contents to fill the entire grid in a proportional manner. This can be achieved using the attribute span.

For example:

    <listbox width="800px" span='true'>
 			<listheader label="Product" hflex="min"/>
 			<listheader label="Description" hflex="min"/>
 			<listheader label="Comment" hflex="min" />

ZK5DevRef GridColumn span.png

It now possible using the span to designate a column which will cover the extra space. This is done by providing span with a column number where the first column is numbered 0. For example if span="2" is used this will expand the third column.

For more information please see the ZK Developer's Reference.

Generating custom SEO content

SEO using ZK has just got more powerful. Originally SEO was implemented by enabling the crawlable option, however, a new feature has been introduced to supplement this. It is now possible to implement an application-specific SEO renderer which will output generated content which will be indexed by search engines but not visible to end users.

To make use of this feature a rendering class needs to be implemented, for example:

package foo;
import org.zkoss.zk.ui.sys.SEORenderer;
import org.zkoss.zk.ui.Page;
public class MySEORenderer implements SEORenderer {
    public void render(Page page, out)
    throws {
        out.write("<a href=\"whatever\">whatever</a>");

Then the class needs to be specified in the zk.xml file, for example:

<!-- in WEB-INF/zk.xml -->

Note that this class will be instantiated and invoked even if the crawlable option is not enabled. For more information please see the ZK Configuration Reference.

Simplified Tree Model

The TreeModel has been simplified with the introduction of the DefaultTreeModel which provides an mutable and sortable tree model for tree data which are small enough to be completely loaded into memory. It is then possible to manipulate the tree dynamically, such as adding a node using DefaultTreeNode.add(TreeNode).

For more information please visit ZK Developer's Reference, Tree Model.

Customize effects when showing and hiding a widget

Using ZK 5.0.6 it is now possible to apply client-side actions to widgets which descend from the class HtmlBasedComponent using the action property. This feature enables developers to control actions without the need for JavaScript.

The syntax for actions is as follows:

action="action-name1: effect1; action-name2: effect2"

The following example demonstrates how to set the action of a window to slide down.

	<button label="Show a modal window" onClick="wnd.doModal()"/>
	<window id="wnd" title="Modal" border="normal" window="300px"
	 action="show: slideDown" visible="false">
		This is a modal window.

For more information please refer to the ZK Developer’s Reference, Actions and Effects.

Specify the application's name in zk.xml

ZK 5.0.6 introduces an easier way to specify the name of the application. Previously ZK developers used the method WebApp.setAppName(String). However, it is now possible to set the application’s name in the zk.xml, for example:

<!-- in WEB-INF/zk.xml -->
	<value>My Killer Application</value>

For more information please refer to the ZK Configuration Reference,

The Doublespinner component

A new component name Doublespinner has been introduced in ZK 5.0.6. This component is very similar to the normal spinner component except instead of handing an integer value it will handle a double.

The following is a basic example.

ZKComRef Doublespinner.png

 <window title="Double Spinner" border="normal" width="150px">
     <doublespinner />

For more information please look at the ZK Component Reference.

Intercepting document-level key events

a keystroke event is forwarded to the first root component if no widgets are made to respond to it. In the following example the div component will receive the onOK event.

<div onOK="doSomething()">

For more information please click here.

Round mold for Doublespinner, Intbox, Longbox, Doublebox, Decimalbox and Textbox

A new rounded mold has been introduced for the Doublespinner, Intbox, Longbox, Doublebox, Decimalbox and Textbox. To use this mold please just set the attribute mold to the value rounded. For example:

<textbox mold="rounded" />

The rounded mold for the above components is demonstrated in the image below.


Databinding supports GroupsModel with Listbox/Grid

ZK 5.0.6 now provides the ability to data bind a GroupsModel to the UI. The following is an example of said data binding:

<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?>

<window width="500px">
     //prepare the example group model
		Object[][] data = {
				{"cell 1-0", "cell 1-1"}, //group 1
				{"cell 2-0", "cell 2-1", "cell 2-2"}, //group 2
				{"cell 3-0", "cell 3-1", "cell 3-2", "cell 3-3"} //group 3
		Object[] heads = { "group 1", "group 2", "group 3"};
		GroupsModel groupsmodel = new SimpleGroupsModel(data, heads);
		String selected = "cell 1-0";
	<listbox height="300px" model="@{groupsmodel}" selectedItem="@{selected}">
	<label value="@{selected}"/>

For more information please consult the ZK Developer's Reference.

Enable ignoring of wiring for zscript and xel

ZK 5.0.6 now provides more control over the wiring of zscript variables and XEL. It is now possible to turn this wiring off which can improve the performance of applications which rely heavily on zscript. It should be noted that using zscript in a production application is not best practice, for more information please consult the performance tips.

To disable autowiring one is required to specify the following options within zk.xml.

For Zscript

<!-- in WEB-INF/zk.xml -->


<!-- in WEB-INF/zk.xml -->

For more information please refer here for zscript and here for XEL.


Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.