条件式流程

If 和Unless

创建一个元素的流程可以条件式的。通过只指定if或unless属性,或都指定,开发人员可以控制是否创建相关的元素。

在下面的例子中,如果a为1,且b不为2 window 组件就会被创建。如果一个元素被忽略,那么它所有的组件都会忽略。

<window if="${a==1}" unless="${b==2}">
   ...
</window>

下面的例子控制什么时候解释Java代码。

<textbox id="contributor"/>
<zscript if="${param.contributor}">
   contributor.label = Executions.getCurrent().getParameter("contributor");
</zscript>

Switch和Case

使用zk元素的switchcase属性,你可以控制ZK页面在一个变量等于某个特定值时才会被执行。

<zk switch="${fruit}">
   <zk case="apple">
   Evaluated only if ${fruit} is apple
   </zk>
   <zk case="${special}">
   Evaluated only if ${fruit} equals ${special}
   </zk>
   <zk>
   Evaluated only if none of the above cases matches.
   </zk>
</zk>

ZK加载器会从第一个case执行到最后一个case,直到匹配switch的条件,即switch属性指定的值。语句是互相排斥的条件(The evaluation is mutually exclusive conditional.),只有第一个匹配的case才会被执行。

zk元素没有任何case匹配,则为default-即,当前面所有的case都不匹配时则执行default

复合Case

你可以为case属性指定一个case列表,这样当其中一个匹配时,此部分的ZK页面会被执行。

<zk switch="${fruit}">
   <zk case="apple, ${special}">
   Evaluated if ${fruit} is either apple or ${special}
   </zk>
</zk>

正则表达式

<zk switch="${fruit}">
   <zk case="/ap*.e/">
   Evaluate if the regular expression, ap*.e"., matches the switch condition.
   </zk>
</zk>

forEach一起使用

就像其他元素,你可以和forEach(同样ifunless也可以)属性一起使用case,forEach条件会首先被执行,就像复合case一样。

<zk case="${each}" forEach="apple, orange">

等价于,

<zk case="apple, orange">

Choose 和 When

choose和when为相互排斥条件语句提供了一种可选的方式。

<zk choose="">
   <zk when="${fruit == 'apple'}">
   Evaluated if the when condition is true.
   </zk>
   <zk>
   Evaluated if none of above cases matches.
   </zk>
</zk>

你不必为choose指定任何值,它只是被用来标识相互排斥条件语句的范围。