锁定老帖子 主题:Beetl 1.2M1 最新增强功能
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
||
---|---|---|
作者 | 正文 | |
发表时间:2012-09-09
最后修改:2012-09-11
1 支持了类似Freemarker的 General Get,即如果模型有一个public Object get(String key);可以在模板中当着属性引用 如: ${user.name},或者采用[]方式 如${user['name']}
2 通过Config类来创建GroupTemplate。Config 默认会先装载 /org/bee/tl/core/beetl-default.properties, 然后如果classpath 下存在beetl.properties, 再装载或者覆盖其属性。beetl-default.properties 内容如下:
####### 默认配置 DELIMITER_PLACEHOLDER_START= ${ DELIMITER_PLACEHOLDER_END= } DELIMITER_STATEMENT_START= <% DELIMITER_STATEMENT_END=% > NATIVE_CALL = TRUE COMPILE_CLASS= FALSE DIRECT_BYTE_OUTPUT = FALSE TEMPLATE_ROOT= TEMPLATE_CHARSET = GBK TEMPLATE_CACHE_CHECK_PERIOD = 2 TEMPLATE_CLASS_FOLDER= ERROR_HANDLER = org.bee.tl.core.DefaultErrorHandler MVC_STRICT = FALSE # 内部使用 DEBUG= FALSE ####### 默认配置结束
####### 性能最佳配置开始 #COMPILE_CLASS=true #DIRECT_BYTE_OUTPUT = true
######## 性能最佳配置结束
####### 严格 MVC 配置开始 #MVC_STRICT = TRUE #NATIVE_CALL = FALSE ######## 严格 MVC 配置结束
####### 编译成 class 的其他选项开始,未完全测试,暂时不支持 #COMPILE_CLASS_KEEP_SOURCE=FALSE #OPTIMIZE_COMPILE_LATTER=FALSE #OPTIMIZE_COMPILE_WORKER_NUM=2 ####### 编译成 class 的其他选项结束
3 对安全输出做了增强,总结如下: 安全输出是任何一个模板引擎必须重视的问题,否则,将极大困扰模板开发者。 Beetl 中,如果要输出的模板变量为 null ,则 beetl 将不做输出,这点不同于 JSP , JSP 输出 null ,也不同于 Feemarker ,如果没有用 !, 它会报错 .
模板中还有俩中情况 会导致模板输出异常 l 有时候模板变量并不存在(譬如子模板里) l 模板变量为 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
l 还有一种情况很少发生,但也有可能,输出模板变量发生的任何异常,如变量内部抛出的一个异常
这需要使用格式 ${!( 变量 )}, 这样,在变量引用发生任何异常情况下,都不作输出,譬如 ${!( user.name)}, , beetl 将会调用 user.getName() 方法,如果发生异常, beetl 将不会忽略此异常,继续渲染
如下是预编译后的代码
值得注意的是,在变量后加上 ! 不仅仅可以应用于占位符输出 ( 但主要是应用于占位符输出 ) ,也可以用于表达式中,如: <% var k = user.name!'N/A'+user.age!; %> ${k} 如果 user 为 null ,则 k 值将为 N/A
4 与Struts2结合,只需要配置一下 <result-types> <result-type name="beetl" class="org.bee.tl.ext.struts2.Struts2BeetlActionResult" default="true"/> </result-types> 5 支持定一个超级变量,var varName = {};如下 <% var a = { var k= 123; %> ${k}. <% }; %> ${a}
这样输出是"123."
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||
返回顶楼 | ||
浏览 1456 次