ZK8 Features for MVC - Shadow Elements - Part 1
Robert Wenzel, Engineer, Potix Corporation
August 2016
ZK 8.0
Introduction
ZK 8 added several new Features mainly improving Component control when using the MVVM design pattern. The question I sometimes heard since was: (How )can we benefit from these features in our MVC application ?
To answer the question I'll start with the most prominent features which are:
- shadow elements
- form proxies
Let's have a look where they can be used in the MVC world.
If you are missing a feature let us know in the comments section below.
Shadow Elements in MVC
Some of the Shadow Elements LINK ME are more/less beneficial in MVC than others here a short summary
- <if>
- most useful when used with dynamic @load expressions in MVVM
- in MVC you can attach/detach components directly (so this is nothing new for MVC)
- used statically you can render parts of your UI based on a conditional EL expression
<if test="${some.condition}">...</if>
- <choose>, <when>, <otherwise>
- similar to <if> no real benefit for MVC
- <forEach>
- very useful see paragraph below
- <apply>
- helps to compose the UI from ZUL fragments (more efficiently than <include>)
- in java you could just call Executions.createComponents(...) LINK ME
Apply
For static UI composition an <include>
<include src="customerDetails.zul" customerId="123"/>
can be replaced by an <apply> element.
<apply templateURI="customerDetails.zul" customerId="123"/>
The difference is that an <apply> does less things "under the hood" compared to <include>:
- it does not create an additional
in the resulting DOM
- -> in fact it does not exist at the client side at all
- it does not create a new namespace (you have to take care of that yourself if you need)
- it does not have this automatic behavior of switching between "instant" and "defer" mode like an include
- it does not create a nested Page object
- it only supports zul/zhtml templates
To save memory the <apply> shadow element is even removed completely from the server side component tree if used purely statically. The shadow elements are not removed when used with dynamic parameters. E.g.:
- in MVVM using the ZKBIND expressions (@load/@init/@ref)
- in MVC by adding the special attribute
<apply dynamicValue="true">
It simply behaves like a call to Executions.createComponents(...)
ForEach
https://www.zkoss.org/wiki/ZK_Developer's_Reference/MVC/Controller/Wire_Components#Shadow_Selectors
CollectionTemplate
ZUL Template
Java Based Template
Using ZK8 Form Proxies in MVC
Creating a Simple CRUD Template
Summary
Download
- The source code for this article can be found on github.
Running the Example
Clone the repository
git clone [email protected]:zkoss-demo/mvc-shadow.git
cd mvc-shadow
git checkout master
The example war file can be built with maven:
mvn clean package
Execute using jetty:
mvn jetty:run
Then access the overview page http://localhost:8080/mvc-shadow/
Comments
Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.