本期视频实现了三个功能,模糊搜索、标签分类、登录/注销功能;

内容简介:使用了常用内置函数,以及安全输出,实现了上面提到的三个业务

作者:GK

常用内置方法

date 返回一个java.util.Date类型的变量,如 date() 返回一个当前时间(对应java的java.util.Date); ${date( "2011-1-1" , "yyyy-MM-dd" )} 返回指定日期

print 打印一个对象 print(user.name);

println 打印一个对象以及回车换行符号,回车换号符号使用的是模板本身的,而不是本地系统的.如果仅仅打印一个换行符,则直接调用println() 即可

printFile 直接答应文件,文件路径以模板根目录为相对目录,printFile(‘‘/common/header.html’’);

nvl 函数nvl,如果对象为null,则返回第二个参数,否则,返回自己 nvl(user,"不存在")

isEmpty 判断变量或者表达式是否为空,变量不存在,变量为null,变量是空字符串,变量是空集合,变量是空数组,此函数都将返回true

isNotEmpty 同上,判断对象是否不为空

has 变量名为参数,判断是否存在此全局变量,如 has(userList),类似于1.x版本的exist("userList"),但不需要输入引号了

assert 如果表达式为false,则抛出异常

trim 截取数字或者日期,返回字符,如trim(12.456,2)返回"12.45",trim(date,'yyyy')返回"2017"

trunc 截取数字,保留指定的小数位,如trunc(12.456,2) 输出是12.45.不推荐使用,因为处理float有问题,兼容原因保留了

decode 一个简化的if else 结构,如 ${decode(a,1,"a=1",2,"a=2","不知道了")},如果a是1,这decode输出"a=1",如果a是2,则输出"a==2", 如果是其他值,则输出"不知道了"

debug 在控制台输出debug指定的对象以及所在模板文件以及模板中的行数,如debug(1),则输出1 [在3行@/org/beetl/core/lab/hello.txt],也可以输出多个,如debug("hi",a),则输出hi,a=123,[在3行@/org/beetl/core/lab/hello.txt]

parseInt 将数字或者字符解析为整形 如 parseInt("123");

parseLong 将数字或者字符解析为长整形,parseInt(123.12);

parseDouble 将数字或者字符解析为浮点类型 如parseDouble("1.23")

range 接收三个参数,初始值,结束值,还有步增(可以不需要,则默认为1),返回一个Iterator,常用于循环中,如for(var i in range(1,5)) {print(i)},将依次打印1234.

flush 强制io输出。

json,将对象转成json字符串,如 var data = json(userList) 可以跟一个序列化规则 如,var data = json(userList,"[*].id:i"),具体参考 https://git.oschina.net/xiandafu/beetl-json

pageCtx ,仅仅在web开发中,设置一个变量,然后可以在页面渲染过程中,调用此api获取,如pageCtx("title","用户添加页面"),在其后任何地方,可以pageCtx("title") 获取该变量

type.new 创建一个对象实例,如 var user = type.new("com.xx.User"); 如果配置了IMPORT_PACKAGE,则可以省略包名,type.new("User")

type.name 返回一个实例的名字,var userClassName = type.name(user),返回"User"

global 返回一个全局变量值,参数是一个字符串,如 var user = global("user_"+i);

cookie 返回指定的cookie对象 ,如var userCook = cookie("user"),allCookies = cookie();

字符串相关方法

strutil方法对参数均不做空指针检测,你可自定义方法来覆盖这些内置的方法

strutil.startWith ${ strutil.startWith("hello","he")} 输出是true

strutil.endWith ${ strutil.endWith("hello","o")} 输出是true

strutil.length ${ strutil. length ("hello")},输出是5

strutil.subString ${ strutil.subString ("hello",1)},输出是"ello"

strutil.subStringTo ${ strutil.subStringTo ("hello",1,2)},输出是"e"

strutil.split ${ strutil.split ("hello,joeli",",")},参数第一个是字符串,第二个是正则表达式。输出是数组:返回第一个是"hello",第二个是"joelli"

strutil.contain ${ strutil.contain ("hello,"el")},输出是true

strutil.toUpperCase ${ strutil.toUpperCase ("hello")},输出是HELLO

strutil.toLowerCase ${ strutil.toLowerCase ("hello")},输出是hello

strutil.replace ${ strutil.replace ("hello","lo","loooo")},输出是helloooo

strutil.format ${ strutil.format ("hello,{0}, my age is {1}","joeli",15)},输出是hello,joeli, my age is 15. 具体请参考http://docs.oracle.com/javase/6/docs/api/java/text/MessageFormat.html

strutil.trim 去掉字符串的尾部空格

strutil.formatDate var a = strutil.formatDate(user.bir,'yyyy-MM-dd')};

strutil.index var index = strutil.index("abc","a");返回 索引0

strutil.lastIndex var index = strutil.lastIndex("aba","a");返回索引2

数组相关方法

array.range 返回数组或者Collection一部分,接受三个参数,第一个是数组或者Collection子类,第二,三个参数分别是起始位置

array.remove 删除某个数组或者Collection的一个元素,并返回该数组或者Collection.第一个是数组或者Collection子类,第二个参数是元素

array.add 向数组或者Collection添加一个元素,并返回该数组或者Collection。第一个是数组或者Collection子类,第二个参数是元素

array.contain 判断数组或者元素是否包含元素,如果包含,返回true。否则false。第一个是数组或者Collection子类,第二个参数是元素

array.toArray 转化成数组,如array.toArray(1,2,"a");

array.collection2Array 将java集合转化为数组 array.collection2Array([1,2,''])

正则表达式相关方法

reg.match(str,regex) str为需要处理的字符串,regex是表达式

reg.replace(str,regex,replace),str为需要处理的字符串,regex是表达式,替换的字符串替换字符串

reg.find(str,regex) 返回找到的符合表达式的第一个字符串,否则返回空字符串

reg.findList(str,regex) 找到所有符合表达式的字符串,否则返回空列表

reg.split(str,regex),对字符串进行切分,返回列表

reg.split(str,regex,limit) 同上,limit是最多返回个数

安全输出

变量后面加一个感叹号标识安全输出,占位符,定界符都可以使用,感叹号后面可以写默认值 例如:

${userName!}

${userName!"默认值"}

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

模板中还有俩种情况会导致模板输出异常

有时候模板变量并不存在(譬如子模板里) 模板变量为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将会忽略此异常,继续渲染

值得注意的是,在变量后加上!不仅仅可以应用于占位符输出(但主要是应用于占位符输出),也可以用于表达式中,如:

var k = user.name!'N/A'+user.age!;

%>

${k}

%>

如果user为null,则k值将为N/A

视频地址:下载下来会更清晰,视频比较长,可使用倍速看,主要实现业务比较的地方耗费时间长

java beetl 视频_04.Beetl常用内置函数以及安全输出---《Beetl视频课程》相关推荐

  1. 04.Beetl常用内置函数以及安全输出---《Beetl视频课程》

    本期视频实现了三个功能,模糊搜索.标签分类.登录/注销功能: 内容简介:使用了常用内置函数,以及安全输出,实现了上面提到的三个业务 一起学beetl目录:https://my.oschina.net/ ...

  2. 8.Hive基础—函数—系统内置函数、常用内置函数、自定义函数、自定义UDF函数、自定义UDTF函数

    本文目录如下: 第8章 函数 8.1 系统内置函数 8.2 常用内置函数 8.2.1 空字段赋值 8.2.2 CASE WHEN THEN ELSE END 8.2.3 行转列 8.2.4 列转行 8 ...

  3. python常用内置函数总结-Python 常用内置函数

    Python 常用内置函数如下: 1. abs()函数返回数字的绝对值. print( abs(-45) )# 返回45print("abs(0.2):",abs(0.2))#返回 ...

  4. MySQL学习笔记_7_MySQL常用内置函数

    MySQL常用内置函数 说明: 1)可以用在SELECT/UPDATE/DELETE中,及where,orderby,having中 2)在函数里将字段名作为参数,变量的值就是字段所对应的每一行的值. ...

  5. 【学习笔记】16、常用内置函数(Built-in Functions)

    常用内置函数(Built-in Functions) 可以参照中文版文档:Python3 内置函数 | 菜鸟教程 常用的内置函数可以做如下分类: 1.数据类型相关 type() – 取数据类型 int ...

  6. 零基础学Python(第二十二章 常用内置函数)

    本套学习内容共计[22]个章节,每个章节都会有对应的从0-1的学习过程详细讲解,希望可以给更多的人提供帮助. 开发环境:[Win10] 开发工具:[Visual Studio 2019] 本章内容为: ...

  7. python中常见的内置函数_Python常用内置函数总结

    Python 常用内置函数总结 一.数学相关 1 .绝对值: abs(-1) 2 .最大最小值: max([1,2,3]) . min([1,2,3]) 3 .序列长度: len('abc') . l ...

  8. T-SQL备忘(6):常用内置函数

    T-SQL备忘(6):常用内置函数 日期和时间函数: 1.获取当前时间:GETDATE() select GETDATE() 返回: 2015-04-27 20:52:06.700 2.返回时间的部分 ...

  9. PYTHON语言之常用内置函数

    一 写在开头 本文列举了一些常用的python内置函数.完整详细的python内置函数列表请参见python文档的Built-in Functions章节. 二 python常用内置函数 请注意,有关 ...

最新文章

  1. Microbiome:马铃薯疮痂病与土壤微生物组关系新进展
  2. SpringInAction--自动化装配Bean(显示装配之xml配置)
  3. (37)Verilog HDL拼接运算:拼接操作与重复操作
  4. 07_Redis事务
  5. 一次mongoengine查询速度慢的优化
  6. 免费证件照制作的软件有哪些?来看看这几个好用的软件
  7. Prescan入门教程之避坑笔记:初学者初用
  8. Logit模型和Logistic模型
  9. win10 JDK的安装及环境变量的配置
  10. 记录:seekbar进度条宽度和滑块高度一致问题
  11. vscode 管理员权限 运行终端
  12. 2023年计算机考研数学考一还是二?考研数学一二三区别
  13. WFP 样式(复习用)
  14. 2022.1.9 力扣-周赛-统计追加字母可以获得的单词数
  15. DZ X!插件破解之盗版提示!
  16. 有一个整数,加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?完全平方数:16=4*4
  17. 墙都不扶就服你!javaredisson分布式锁
  18. eclipse+jdk1.8安装包安装步骤
  19. 【设计模式】之工厂模式
  20. linux万能显卡,Linux N卡驱动年终盘点:干得漂亮

热门文章

  1. 判断相等_C语言判断字符串是否为回文
  2. java 集合初始化_6种方法初始化JAVA中的list集合
  3. endnote大客户版_Endnote软件的使用,有图有干货!
  4. c语言成绩统计与学籍管理源码,[源码和文档分享]基于C语言的学生成绩管理系统...
  5. Python+OpenCV:基于SVM手写数据OCR(OCR of Hand-written Data using SVM)
  6. 避免数据二次提交的处理方式
  7. 《5》CentOS7.0+OpenStack+kvm云平台部署—配置Horizon
  8. LVS--DR模型介绍及实现
  9. Trace obtained enqueue information by set event 10704
  10. java怎么把弹框设置为圆角_自定义圆角Dialog