ZHTML中表达式是从EL修改而来,主要增加了对ZCF中常用的数据对象的支持,用法和EL相似。

1. 表达式的语法结构

  ${expression}:expression里可以包含常量、变量名和运算符,其中常量主要有null、true、false、数值和字符串,字符串既可以用双引号也可以用单引号。

 

2. 表达式中的运算符

  包括五个算术运算符:+、-、*、/、%;

  六个关系运算符:==、!=、<、>、<=、>=;

  三个逻辑运算符:&&、||、!;

  三个其它运算符:empty、条件运算符a?b:c、以及括号()。

  示例如下:

 

3. 取变量中的成员数据

  表达式中数组可以使用[]来按下标存储,例如${arr[1]};

  表达式中的对象和Map可以用点运算符(.)来获取属性和键值,例如${obj.field}、${map.key};

  表达式中的对象和Map除了用点运算符来获取外,还可以使用[]来获取,例如${obj['field']}、${map[key]};

  特别是当要取的属性和键值含有特殊或者是一个变量时,只有用[],例如${map['a?']}、${obj[fieldName]}。

  示例如下:

  注意:成员数据包括map中的key、对象的publich属性和getter。

 

4. 表达式中的函数

  表达式中支持使用函数,语法为:prefix:function( arg1, arg2, arg3 &hellip;. argN);

  ZCF内置的函数都不用prefix部分,直接写为function( arg1, arg2, arg3 &hellip;. argN);

  表达式中凡是可以写参数的地方都可以用一个函数来代替,例如${pow(2,pow(2,2))};

  函数可以自定义,请参见知识库自定义ZHTML函数相关的文章。

 

5. 表达式中的变量查找顺序

  表达式中如果有变量的话,ZCF会去上下文中查找变量的值。首先ZCF会从当前标签提供的变量表中查找有没有指定名称的变量,如果有则返回该变量的值,如果没有找到则从当前标签的父标签的变量表中查找,此时还没有找到则逐级上溯查找,直到整个页面的全局变量表。如果表达式不在任何标签之中,则直接从全局变量表中查找。

  有时候会遇到两个变量在本标签和父标签中都有的情况,例如z:list标签中的${i},这时可以用${i}取本标签中的值,用${parent.i}取父标签,甚至在三层z:list嵌套时可以用${parent.parent.i}取父标签的父标签中的变量值。

  以输出乘法口诀表为例:

 

6.  可用全局变量前缀清单

  Request :http请求参数;

  Response :响应参数,注意此处不是取http响应中的attribute,而是取我们在JAVA方法中通过$S()方法或者Response.put()设置的值;

  Header :http头信息;

  Cookie :cookie数据;

  Current :本次请求的全局数据;

  User :当前用户的数据;

  Member :当前会员的数据;

  Priv :当前用户或者会员的权限数据;

  Config :系统全局配置数据;

  前缀不区分大小写,其中Request和Response变量可以加前缀,也可以不加前缀,例如如果url中带了type=1的参数,则${type}和${request.type}都可以取到1。

  示例如下:

 

7. 所有示例的执行结果

  如下所示: