beetl模板使用场景_Beetl使用注意事项
1.如果表达式跟定界符或者占位符有冲突,可以在用 “\” 符号
@for(user inusers){
email is ${user.name}\@163.com
@}
${[1,2,3]} //输出一个json列表
${ {key:1,value:2 \} } //输出一个json map,} 需要加上\
2.Beetl里定义的临时变量类型默认对应的java是Int型或者double类型,对于模板常用情况说,已经够了.如果需要定义长精度类型(对应java的BigDecimal),则需要在数字末尾加上h以表示这是长精度BigDecimal,其后的计算和输出以及逻辑表达式都将按照长精度类型来考虑。
var a = 1;var b = "hi";var c = a++;var d = a+100.232;var e = (d+12)*a;var f = 122228833330322.1112h%>
3.三元表达式如果只考虑true条件对应的值的话,可以做简化,如下俩行效果是一样的。
var a = 1;%>${a==1?"ok":''}
${a==1?"ok"}
4.如果没有进入for循环体,还可以执行elsefor指定的语句。
var list =[];for(item inlist){
}elsefor{
print("未有记录");
}%>
5.for-in循环支持遍历集合对象,对于List和数组来说以及Iterator,对象就是集合对象,对于Map来说,对象就是Map.entry,如下俩个例子
for(user inuserList){
print(userLP.index);
print(user.name);
}%>
for(entry inmap){var key =entry.key;var value =entry.value;
print(value.name);
}%>
6.userLP是Beetl隐含定义的变量,能在循环体内使用。其命名规范是item名称后加上LP,他提供了当前循环的信息
userLP.index :当前的索引,从1开始
userLP.size:集合的长度
userLP.first 是否是第一个
userLP.last 是否是最后一个
userLP.even 索引是否是偶数
userLP.odd 索引是否是奇数
7.Beetl 还可以定位额外的对象属性,而无需更改java对象,这叫着虚拟属性,如,对于所有集合,数组,都有共同的虚拟熟悉size.虚拟属性是“.~”+虚拟1属性名
template.binding("list",service.getUserList());
template.binding("pageMap",service.getPage());//在模板里
总共 ${list.~size}
for(user inlist){%>hello,${user.name};当前页${pageMap['page']},总共${pageMap["total"]}
8.同js一样,支持switch-case,switch变量可以支持任何类型,而不像js那样只能是整形
var b = 1;switch(b){case 0:
print("it's 0");break;case 1:
print("it's 1");break;default:
print("error");
}%>
9.select-case 是switch case的增强版。他允许case 里有逻辑表达式,同时,也不需要每个case都break一下,默认遇到合乎条件的case执行后就退出。
var b = 1;
select(b){case 0,1:
print("it's small int");case 2,3:
print("it's big int");default:
print("error");
}%>
select 后也不需要一个变量,这样case 后的逻辑表达式将决定执行哪个case
var b = 1;
select{case b<1,b>10:
print("it's out of range");break;case b==1:
print("it's 1");break;default:
print("error");
}%>
10.通常模板渲染逻辑很少用到try-catch 但考虑到渲染逻辑复杂性,以及模板也有不可控的地方,所以提供try catch,在渲染失败的时候仍然能保证输出正常
try{
callOtherSystemView()
}catch(error){
print("暂时无数据");
}%>
error代表了一个异常,你可以通过error.message 来获取可能的错误信息
也可以省略catch部分,这样出现异常,不做任何操作
11.虚拟属性也是对象的属性,但是虚拟的,非模型对象的真实属性,这样的好处是当模板需要额外的用于显示的属性的时候但又不想更改模型,便可以采用这种办法 如beetl内置的虚拟属性.~size 针对了数组以及集合类型。
${user.gender}
${user.~genderShowName}
~genderShowName 是虚拟属性,其内部实现根据boolean变量gender来显示性别
12.安全输出是任何一个模板引擎必须重视的问题,否则,将极大困扰模板开发者。Beetl中,如果要输出的模板变量为null,则beetl将不做输出,这点不同于JSP,JSP输出null,也不同于Feemarker,如果没有用!,它会报错.
模板中还有俩种情况会导致模板输出异常
有时候模板变量并不存在(譬如子模板里)
模板变量为null,但输出的是此变量的一个属性,如${user.wife.name}
针对前俩种种情况,可以在变量引用后加上!以提醒beetl这是一个安全输出的变量。
如${user.wife.name!},即使user不存在,或者user为null,或者user.wife为null,或者user.wife.name为null beetl都不将输出
可以在!后增加一个常量(字符串,数字类型等),或者另外一个变量,方法,本地调用,作为默认输出,譬如:
${user.wife.name!”单身”},如果user为null,或者user.wife为null,或者user.wife.name为null,输出”单身”
譬如
${user.birthday!@System.constants.DefaultBir}, 表示如果user为null,或者user. birthday为null,输出System.constants.DefaultBir
还有一种情况很少发生,但也有可能,输出模板变量发生的任何异常,如变量内部抛出的一个异常
这需要使用格式${!(变量)},这样,在变量引用发生任何异常情况下,都不作输出,譬如
${!(user.name)},,beetl将会调用user.getName()方法,如果发生异常,beetl将会忽略此异常,继续渲染
13.在变量后加上!不仅仅可以应用于占位符输出(但主要是应用于占位符输出),也可以用于表达式中
var k = user.name!'N/A'+user.age!;%>${k}%>如果user为null,则k值将为N/A
14.在有些模板里,可能整个模板都需要安全输出,也可能模板的部分需要安全输出,使用者不必为每一个表达式使用!,可以使用beetl的安全指示符号来完成安全输出 如:
${user.wife.name}
模板其他内容,均能安全输出……
//关闭安全输出。
DIRECTIVE SAFE_OUTPUT_CLOSE;%>
15.在for-in 循环中 ,也可以为集合变量增加安全输出指示符号,这样,如果集合变量为null,也可以不进入循环体
var list = null;for(item in list!){
}eslefor{
print("no data");
}%>
16.可以调用instance的public方法和属性,也可以调用静态类的属性和方法 ,需要加一个 @指示此调用是直接调用class,其后的表达式是java风格的。
${@user.getMaxFriend(“lucy”)}
${@user.maxFriend[0].getName()}
${@com.xxxx.constants.Order.getMaxNum()}
${@com.xxxx.User$Gender.MAN}
var max =@com.xxxx.constants.Order.MAX_NUM;%>
17.
beetl模板使用场景_Beetl使用注意事项相关推荐
- beetl模板使用场景_Java 模板引擎 Beetl 2.0 发布
Java开源模板引擎 Velocity Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由 ...
- Spring Boot 2 精髓学习笔记(五)---Beetl 模板引擎(1)
本节介绍MVC 中的视图技术之模板引擎Beetl ,用于渲染模板. 一.Beetl模板引擎 Beetl是2010 年开发井维护至今的一个模板引擎,具有如下特点: 功能完备.作为主流模板引擎,适用于各种 ...
- 热加载beetl模板
beetl:# RESOURCE.autoCheck= true resource-auto-check: true #热加载beetl模板,开发时候用 转载于:https://www.cnblogs ...
- java beetl模板引擎_Spring Boot集成beetl模板引擎 个人总结
1. Spring boot快速集成beetl模板引擎 查看官方文档:http://ibeetl.com/guide/#beetl 可参看官方文档 4.6. Spring Boot集成 增加beetl ...
- SpringBoot集成beetl模板快速入门
SpringBoot集成beetl模板快速入门 本文引导 SpringBoot集成beetl模板快速入门 创建SpringBoot工程(idea) 新建工程 修改maven本地仓库位置 配置Sprin ...
- MongoDB 应用场景、避坑事项与最佳实践
MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前 NoSQL 数据库产品中最热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,MongoDB 使用 C++开发. ...
- Beetl模板 以@为定位符常用的标签和方法
Beetl模板 以@为定位符常用的标签和方法 1.如何使用layout @layout("/common/_container.html",{pluginis:["ztr ...
- 使用beetl模板,但是去除/关闭/禁用beetlsql
0.先说结论 0.1.首先把这个beetlsql依赖去掉,参考下面[2] 0.2.其次把这个配置文件中添加: beetlsql.enabled = false 或者 beetlsql:enabled: ...
- Restful 风格开发 Spring MVC 的视图解析器---使用 beetl 模板引擎
一.restful 风格 restful 的目的 将用户的行为当成是对数据库中记录的操作: 增加用户:/user post(post方式) 删除用户:/user/2 delete(删除第2条记录) 修 ...
- SpringBoot集成Beetl模板引擎之入门案例
准备: 1.创建SpringBoot项目 2.下载一个模板这里是下载的博客模板 3.将博客模板引入到SpingNBoot项目中 因为Beetl的规定所以改为btl结尾而不是html index文件中引 ...
最新文章
- ubuntu和windows实现互相之间远程控制
- 智能手机触摸屏失灵和触摸屏保养教程
- SAP SD 模块与FI、MM的接口
- ubuntu/deepin 禁用IPV6
- OSPF协议介绍及配置 (下)
- easyui numberbox一些常用属性,方法
- 浙大JAVA实验题12_2019浙大计算机考研机试模拟赛(2)——概念专题
- android 获取服务对象,android 如何取得正在运行的service对象
- cxf调用接口的几种方式_Java调用CXF WebService接口的两种方式实例
- 通过Ajax的方式执行GP服务
- android自定义进度条_Android中的自定义进度栏
- linux Sprintf中文乱码,Linux下printf、fprintf、sprintf的区别
- python 调用海康sdk_Qt调用海康SDK实现摄像头视频播放
- 如何将ipad大文件传输到window PC
- gan的几种变体_推荐系统系列第6部分,用于协作过滤的自动编码器的6种变体
- 微信公众号后台添加安全域名 提示:无法访问xxx指向的web服务器(或虚拟主机)的目录,请检查网络设置
- android应用apn.xml,android之APN
- HTTP与HTTPS及计算机热门快捷键
- 真无线蓝牙耳机哪款适合新手?数码发烧友最全盘点,高实用性蓝牙耳机
- 初学者笔记:Scanf间隔符号的使用
热门文章
- 满满干货之前端RSA长文本加密(vue项目)
- 基于MATLAB的列车防护曲线组合步长算法分析与仿真验证
- 什么是单臂路由?单臂路由的优缺点?如何配置单臂路由?
- 【Aspose for .NET】Aspose.word操作表格:在表格中插入行
- python存钱挑战_52周拯救挑战赛(python),存钱,Python
- c语言中英文字幕怎么相加,excel表格怎么快速分离中英文双语字幕? excel分离中英文字符串的技巧...
- 编程比赛三大赛制介绍(ACM赛制、OI赛制、IOI赛制)
- php 获取xlsx,使用php读取xlsx文件
- 【笔记】Python脚本:绘制表格转为图片发送
- aria2 php,ac68u之aria2安装教程-新手摸索篇 - 52asus - 华硕网络设备技术交流平台