1.如果表达式跟定界符或者占位符有冲突,可以在用 “\” 符号

  1. @for(user in users){
  2. email is ${user.name}\@163.com
  3. @}
  4.  
  5. ${[1,2,3]} //输出一个json列表
  6. ${ {key:1,value:2 \} } //输出一个json map,} 需要加上\

2.Beetl里定义的临时变量类型默认对应的java是Int型或者double类型,对于模板常用情况说,已经够了.如果需要定义长精度类型(对应java的BigDecimal),则需要在数字末尾加上h以表示这是长精度BigDecimal,其后的计算和输出以及逻辑表达式都将按照长精度类型来考虑。

  1. <%
  2. var a = 1;
  3. var b = "hi";
  4. var c = a++;
  5. var d = a+100.232;
  6. var e = (d+12)*a;
  7. var f = 122228833330322.1112h
  8. %>

3.三元表达式如果只考虑true条件对应的值的话,可以做简化,如下俩行效果是一样的。

  1. <%
  2. var a = 1 ;
  3. %>
  4. ${a==1?"ok":''}
  5. ${a==1?"ok"}

4.如果没有进入for循环体,还可以执行elsefor指定的语句。

  1. <%
  2. var list = [];
  3. for(item in list){
  4.  
  5. }elsefor{
  6. print("未有记录");
  7. }
  8. %>

5.for-in循环支持遍历集合对象,对于List和数组来说以及Iterator,对象就是集合对象,对于Map来说,对象就是Map.entry,如下俩个例子

  1. <%
  2. for(user in userList){
  3. print(userLP.index);
  4. print(user.name);
  5.  
  6. }
  7. %>
  1. <%
  2. for(entry in map){
  3. var key = entry.key;
  4. var value = entry.value;
  5. print(value.name);
  6.  
  7. }
  8. %>

6.userLP是Beetl隐含定义的变量,能在循环体内使用。其命名规范是item名称后加上LP,他提供了当前循环的信息

  1. userLP.index :当前的索引,从1开始
  2.  
  3. userLP.size:集合的长度
  4.  
  5. userLP.first 是否是第一个
  6.  
  7. userLP.last 是否是最后一个
  8.  
  9. userLP.even 索引是否是偶数
  10.  
  11. userLP.odd 索引是否是奇数

7.Beetl 还可以定位额外的对象属性,而无需更改java对象,这叫着虚拟属性,如,对于所有集合,数组,都有共同的虚拟熟悉size.虚拟属性是“.~”+虚拟1属性名

  1. template.binding("list",service.getUserList());
  2. template.binding("pageMap",service.getPage());
  3.  
  4. //在模板里
  5. 总共 ${list.~size}
  6. <%
  7. for(user in list){
  8. %>
  9. hello,${user.name};
  10.  
  11. <%}%>
  12.  
  13. 当前页${pageMap['page']},总共${pageMap["total"]}

8.同js一样,支持switch-case,switch变量可以支持任何类型,而不像js那样只能是整形

  1. <%
  2. var b = 1;
  3. switch(b){
  4. case 0:
  5. print("it's 0");
  6. break;
  7. case 1:
  8. print("it's 1");
  9. break;
  10. default:
  11. print("error");
  12.  
  13. }
  14. %>

9.select-case 是switch case的增强版。他允许case 里有逻辑表达式,同时,也不需要每个case都break一下,默认遇到合乎条件的case执行后就退出。

  1. <%
  2. var b = 1;
  3. select(b){
  4. case 0,1:
  5. print("it's small int");
  6. case 2,3:
  7. print("it's big int");
  8. default:
  9. print("error");
  10.  
  11. }
  12. %>

select 后也不需要一个变量,这样case 后的逻辑表达式将决定执行哪个case

  1. <%
  2. var b = 1;
  3. select{
  4. case b<1,b>10:
  5. print("it's out of range");
  6. break;
  7. case b==1:
  8. print("it's 1");
  9. break;
  10. default:
  11. print("error");
  12.  
  13. }
  14. %>

10.通常模板渲染逻辑很少用到try-catch 但考虑到渲染逻辑复杂性,以及模板也有不可控的地方,所以提供try catch,在渲染失败的时候仍然能保证输出正常

  1. <%
  2. try{
  3. callOtherSystemView()
  4. }catch(error){
  5. print("暂时无数据");
  6. }
  7.  
  8. %>

error代表了一个异常,你可以通过error.message 来获取可能的错误信息

也可以省略catch部分,这样出现异常,不做任何操作

11.虚拟属性也是对象的属性,但是虚拟的,非模型对象的真实属性,这样的好处是当模板需要额外的用于显示的属性的时候但又不想更改模型,便可以采用这种办法 如beetl内置的虚拟属性.~size 针对了数组以及集合类型。

  1. ${user.gender}
  2. ${user.~genderShowName}

~genderShowName 是虚拟属性,其内部实现根据boolean变量gender来显示性别

12.安全输出是任何一个模板引擎必须重视的问题,否则,将极大困扰模板开发者。Beetl中,如果要输出的模板变量为null,则beetl将不做输出,这点不同于JSP,JSP输出null,也不同于Feemarker,如果没有用!,它会报错.

  1. 模板中还有俩种情况会导致模板输出异常
  2.  
  3. 有时候模板变量并不存在(譬如子模板里)
  4.  
  5. 模板变量为null,但输出的是此变量的一个属性,如${user.wife.name}
  1. 针对前俩种种情况,可以在变量引用后加上!以提醒beetl这是一个安全输出的变量。
  2.  
  3. ${user.wife.name! },即使user不存在,或者usernull,或者user.wifenull,或者user.wife.namenull beetl都不将输出
  4.  
  5. 可以在!后增加一个常量(字符串,数字类型等),或者另外一个变量,方法,本地调用,作为默认输出,譬如:
  6.  
  7. ${user.wife.name!”单身”},如果usernull,或者user.wifenull,或者user.wife.namenull,输出”单身”
  8.  
  9. 譬如
  10.  
  11. ${user.birthday!@System.constants.DefaultBir}, 表示如果usernull,或者user. birthdaynull,输出System.constants.DefaultBir
  12.  
  13. 还有一种情况很少发生,但也有可能,输出模板变量发生的任何异常,如变量内部抛出的一个异常
  14.  
  15. 这需要使用格式${!(变量)},这样,在变量引用发生任何异常情况下,都不作输出,譬如
  16.  
  17. ${!(user.name)},,beetl将会调用user.getName()方法,如果发生异常,beetl将会忽略此异常,继续渲染

13.在变量后加上!不仅仅可以应用于占位符输出(但主要是应用于占位符输出),也可以用于表达式中

  1. <%
  2.  
  3. <%
  4. var k = user.name!'N/A'+user.age!;
  5. %>
  6. ${k}
  7.  
  8. %>
  9. 如果user为null,则k值将为N/A

14.在有些模板里,可能整个模板都需要安全输出,也可能模板的部分需要安全输出,使用者不必为每一个表达式使用!,可以使用beetl的安全指示符号来完成安全输出 如:

  1. <%
  2. DIRECTIVE SAFE_OUTPUT_OPEN;
  3. %>
  4. ${user.wife.name}
  5. 模板其他内容,均能安全输出……
  6. <%
  7. //关闭安全输出。
  8. DIRECTIVE SAFE_OUTPUT_CLOSE;
  9. %>

15.在for-in 循环中 ,也可以为集合变量增加安全输出指示符号,这样,如果集合变量为null,也可以不进入循环体

  1. <%
  2. var list = null;
  3. for(item in list!){
  4.  
  5. }eslefor{
  6. print("no data");
  7. }
  8. %>

16.可以调用instance的public方法和属性,也可以调用静态类的属性和方法 ,需要加一个 @指示此调用是直接调用class,其后的表达式是java风格的。

  1. ${@user.getMaxFriend(“lucy”)}
  2. ${@user.maxFriend[0].getName()}
  3. ${@com.xxxx.constants.Order.getMaxNum()}
  4. ${@com.xxxx.User$Gender.MAN}
  5. <%
  6. var max = @com.xxxx.constants.Order.MAX_NUM;
  7. %>

17.

 

Beetl使用注意事项的更多相关文章

  1. beetl 配置多视图解析器

    如下配置,指定了三个视图解析器,一个用于beetl页面渲染,一个用于cms,采用了beetl技术,另外一个一些遗留的页面采用jsp <bean name="beetlConfig&qu ...

  2. Beetl学习总结(4)——Web集成

    4.1. Web提供的全局变量 Web集成模块向模板提供web标准的变量,做如下说明 request 中的所有attribute.在模板中可以直接通过attribute name 来引用,如在cont ...

  3. Beetl 3中文文档 转载 http://ibeetl.com/guide/

    Beetl作者:李家智(闲大赋) <xiandafu@126.com> 1. 什么是Beetl 广告:闲大赋知识星球,付费会员 Beetl( 发音同Beetle ) 目前版本是3.0.7, ...

  4. jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧

    这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...

  5. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  6. TODO:Golang指针使用注意事项

    TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...

  7. app开发外包注意事项,2017最新资讯

    我们见过很多创业者,栽在这app外包上.很多创业者对于app外包这件事情不是特别重视,以为将事情交给app外包公司就完事了,实际上不是的.无论是从选择app外包公司还是签订合同.售后维护等各方面都有许 ...

  8. favicon.ioc使用以及注意事项

    1.效果 2.使用引入方法 2.1 注意事项:(把图标命名为favicon.ico,并且放在根目录下,同时使用Link标签,多重保险) 浏览器默认使用根目录下的favicon.ico 图标(如果你并没 ...

  9. ORACLE分区表梳理系列(二)- 分区表日常维护及注意事项(红字需要留意)

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

随机推荐

  1. iOS 设置字体样式

    1.iOS设置字体样式   label.font = [UIFont fontWithName:@"Arial-BoldItalicMT" size:24];   字体名如下: F ...

  2. node+express上传图片到七牛

    本人微信公众号:前端修炼之路,欢迎关注 最近做项目的时候有一个上传图片的需求,由于没有后端的配合,所以决定自己来搭个服务器,实现上传图片功能.以后如果需要修改成java或者php为后端,直接使用即可, ...

  3. 如何使用安信可 ESP 系列一体化开发环境【转】

    本文转载自:http://wiki.ai-thinker.com/ai_ide_use 关于 Problems 报错 注意:Eclipse 只是一个代码编写工具,它并不能读取 makefile 里面的 ...

  4. winform中通过事件实现窗体传值思路【待修改】

    Form2向Form1传值         private Form1 form1;//定义一个类型为Form1类型的字段,用于存储传递过来的Form对象         public void Se ...

  5. BZOJ 1626 [Usaco2007 Dec]Building Roads 修建道路:kruskal(最小生成树)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1626 题意: 有n个农场,坐标为(x[i],y[i]). 有m条原先就修好的路,连接农场( ...

  6. h5打电话发短信写邮件怎么实现

    // 一.打电话<a href="tel:0755-10086">打电话给:0755-10086</a> // 二.发短信,winphone系统无效< ...

  7. 分享知识-快乐自己:oracle表分区详解

    从以下几个方面来整理关于分区表的概念及操作: 1)表空间及分区表的概念: 2)表分区的具体作用: 3)表分区的优缺点: 4)表分区的几种类型及操作方法: 5)对表分区的维护性操作: 1):表空间及分区 ...

  8. Use trained sklearn model with pyspark

    Use trained sklearn model with pyspark   from pyspark import SparkContext import numpy as np from sk ...

  9. eclipse的maven工程Dynamic Web Module 2.3 修改为3.0 解决办法

    1. 创建Maven Web工程 2. 项目只有src/main/resources >Java Build Path导入Tomcat运行环境 3. 删除以图片红框中的文件 4. Propert ...

  10. Log4j2_学习_01_Log4j 2使用教程

    一.推荐使用的log4j2.xml <?xml version="1.0" encoding="UTF-8"?> <!-- 设置log4j2的 ...