Basic Rules"

From Documentation
Line 49: Line 49:
 
=A XML Attribute Assigns a Value to a Component's Property or Event Listener=
 
=A XML Attribute Assigns a Value to a Component's Property or Event Listener=
  
Each attribute, except for special attributes like <code>if</code> and <code>forEach</code>, represents a value that shall be assigned to a property of a component after it is created. The attribute name is the property name, while the attribute value is the value to assign. For example, the following example assigns <code>"Hello"</code> to window's title property. More precisely, <javadoc method="setTitle(java.lang.String)">org.zkoss.zul.Window</javadoc> will be called <code>"Hello"</code>.
+
Each attribute, except for special attributes like <code>if</code> and <code>forEach</code>, represents a value that should be assigned to a property of a component after it is created. The attribute name is the property name, while the attribute value is the value to assign. For example, the following example assigns <code>"Hello"</code> to window's title property. More precisely, <javadoc method="setTitle(java.lang.String)">org.zkoss.zul.Window</javadoc> will be called <code>"Hello"</code>.
  
 
<source lang="xml">
 
<source lang="xml">

Revision as of 06:35, 16 September 2011

If you are not familiar with XML, please take a look at XML Background first.

An XML Element Represents a Component

Each XML element represents a component, except for special elements like <zk> and <attribute>. Thus, the following example will cause three components (window, textbox and button) being created when the ZK Loader processes it.

<window>
  <textbox/>
  <button/>
</window>

In addition, the parent-child relationship of the created components will follow the same hierarchical structure of the XML document. In the previous example, window will be the parent of textbox and button, while textbox is the first child and button is the second.

Special XML Elements

There are a few elements dedicated to special functionality rather than a component. For example,

 <zk>...</zk>

The zk element is a special element used to aggregate other components. Unlike a real component (say, hbox or div), it is not part of the component tree being created. In other words, it does not represent any components. For example,

 <window>
     <zk if="${whatever}">
         <textbox/>
         <textbox/>
     </zk>
 </window>

is equivalent to

 <window>
     <textbox if="${whatever}"/>
     <textbox if="${whatever}"/>
 </window>

For more information about special elements, please refer to ZUML Reference.

A XML Attribute Assigns a Value to a Component's Property or Event Listener

Each attribute, except for special attributes like if and forEach, represents a value that should be assigned to a property of a component after it is created. The attribute name is the property name, while the attribute value is the value to assign. For example, the following example assigns "Hello" to window's title property. More precisely, Window.setTitle(String) will be called "Hello".

<window title="Hello"/>

Like JSP, you could use EL for the value of any attributes. For example, the following assigns the value of the request parameter called name to window's title.

<window title="${param.name}"/>

For more information about EL expressions, please refer to ZUML Reference.

Assign Event Listener if Name Starts With on

If the attribute name starts with on and the third letter is uppercase, an event listener is assigned. For example, we can register an event listener to handle the onClick event as follows.

<button onClick="do_something_in_Java())"/>

The attribute value must be a valid Java code, and it will be interpreted[1] when the event is received. You could specify different languages by prefixing the language name. For example, we could write the event listener in Groovy as follows.

<vlayout onClick="groovy:self.appendChild(new Label('New'));">
Click me!
</vlayout>

  1. ZK uses BeanShell to interpret it at run time

Special Attributes

There are a few special attributes dedicated to special functionality rather than assigning properties or handling events. For example, the forEach attribute is used to specify a collection of object such that the XML element it belongs will be evaluated repeatedly for each object of the collection.

<listbox>
    <listitem forEach="${customers}" label="${each.name}"/>
</listbox>

For more information about special attributes, please refer to the Iterative Evaluation section, and ZUML Reference

A XML Text Represents Label Component or Property's Value

In general, a XML text is interpreted as a label component. For example,

<window>
  Begin ${foo.whatever}
</window>

is equivalent to

<window>
  <label value="Begin ${foo.whatever}"/>
</window>

A XML Text as Property's Value

Depending on the component's implementation, the text nested in a XML element could be interpreted as the value of a component's particular property. For example, Html is one of this kind of components, and

<html>Begin ${foo.whatever}</html>

is equivalent to

<html content="Begin ${foo.whatever}"/>

It is designed to make it easy to specify multiple-line value, so it is usually used by particular components that requires the multiple-lines value. For a complete list of components that interprets the XML text as a property's value, please refer to ZUML Reference.

A XML Processing Instruction Specifies the Page-wide Information

Each XML processing instruction specifies the instruction on how to process the XML document. It is called directives in ZK. For example, the following specifies the page title and style.

<?page title="Grey background" style="background: grey"?>

Notice that there shall be no whitespace between the question mark and the processing instruction's name (i.e., page in the above example).

The other directives include the declaration of components, the class to initialize a page, the variable resolver for EL expressions, and so on. For more information about directives, please refer to ZUML Reference.

Version History

Last Update : 2011/09/16


Version Date Content
     



Last Update : 2011/09/16

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