博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
beetl模板的${!}用法
阅读量:7060 次
发布时间:2019-06-28

本文共 1384 字,大约阅读时间需要 4 分钟。

转自:http://ibeetl.com/guide/#beetl

2.20. 安全输出

安全输出是任何一个模板引擎必须重视的问题,否则,将极大困扰模板开发者。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为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

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

<%DIRECTIVE SAFE_OUTPUT_OPEN;%>${user.wife.name}模板其他内容,均能安全输出……<%//关闭安全输出。DIRECTIVE SAFE_OUTPUT_CLOSE;%>

Beetl不建议每一个页面都使用DIRECTIVE SAFE_OUTPUT_OPEN,这样,如果如果真有不期望的错误,不容易及时发现,其次,安全输出意味着beetl会有额外的代码检测值是否存在或者是否为null,性能会略差点。所以建议及时关闭安全输出(这不是必须的,但页面所有地方是安全输出,可能不容易发现错误)

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

<%var list = null;for(item in list!){ }elsefor{ print("no data"); } %>

转载于:https://www.cnblogs.com/YuyuanNo1/p/9133858.html

你可能感兴趣的文章
win 8 学习笔记一:生存周期
查看>>
Codeforces 55D Beautiful Number (数位统计)
查看>>
菜鸟学Java(三)——JSTL标签之核心标签
查看>>
hdu 3074 Multiply game(模板级线段树)
查看>>
MySQL: load data infile
查看>>
[转]HTML accesskey 属性
查看>>
I/O多路复用详解
查看>>
Linq使用Group By经验总结
查看>>
Ajax原生写法
查看>>
无线遥控器方案 Si4010/Si4012
查看>>
Hulu面试题
查看>>
On iPad, UIImagePickerController must be presented via UIPopoverController
查看>>
项目管理沟通计划
查看>>
IntelliJ IDEA 12.1.4 解决中文乱码
查看>>
据说每个大牛、小牛都应该有自己的库——DOM处理
查看>>
第一章 初识MVC4
查看>>
red ant
查看>>
树的子结构
查看>>
ireport常见问题
查看>>
Advanced Awk for Sysadmins
查看>>