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 …. argN);
ZCF内置的函数都不用prefix部分,直接写为function( arg1, arg2, arg3 …. 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. 所有示例的执行结果
如下所示:
|
所有评论仅代表网友意见