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
将不会忽略此异常,继续渲染
如下是预编译后的代码
try{
out.write(user.getName());
}catch(Exception ex){
}
|
值得注意的是,在变量后加上
!
不仅仅可以应用于占位符输出
(
但主要是应用于占位符输出
)
,也可以用于表达式中,如:
<%
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."
分享到:
相关推荐
标题中的"restlet-1.2m1"指的是Restlet框架的1.2 Milestone 1版本,这是一个在正式版本发布前的开发版本,通常包含了一些新功能或改进,但可能存在一些不稳定因素。 描述中提到"2.0的版本与该版本不兼容",这意味着...
标签:archiva-configuration-1.2-M1.jar,archiva,configuration,1.2,M1,jar包下载,依赖包
标签:archiva-common-1.2-M1.jar,archiva,common,1.2,M1,jar包下载,依赖包
标签:archiva-cli-1.2-M1.jar,archiva,cli,1.2,M1,jar包下载,依赖包
标签:archiva-security-1.2-M1.jar,archiva,security,1.2,M1,jar包下载,依赖包
标签:archiva-policies-1.2-M1.jar,archiva,policies,1.2,M1,jar包下载,依赖包
标签:archiva-converter-1.2-M1.jar,archiva,converter,1.2,M1,jar包下载,依赖包
标签:archiva-scheduled-1.2-M1.jar,archiva,scheduled,1.2,M1,jar包下载,依赖包
标签:archiva-rss-1.2-M1.jar,archiva,rss,1.2,M1,jar包下载,依赖包
标签:archiva-rss-1.2-M1-javadoc.jar,archiva,rss,1.2,M1,javadoc,jar包下载,依赖包
标签:archiva-cli-1.2-M1-sources.jar,archiva,cli,1.2,M1,sources,jar包下载,依赖包
标签:archiva-policies-1.2-M1-javadoc.jar,archiva,policies,1.2,M1,javadoc,jar包下载,依赖包
标签:archiva-scheduled-1.2-M1-javadoc.jar,archiva,scheduled,1.2,M1,javadoc,jar包下载,依赖包
标签:archiva-converter-1.2-M1-javadoc.jar,archiva,converter,1.2,M1,javadoc,jar包下载,依赖包
标签:archiva-common-1.2-M1-javadoc.jar,archiva,common,1.2,M1,javadoc,jar包下载,依赖包
标签:archiva-rss-1.2-M1-sources.jar,archiva,rss,1.2,M1,sources,jar包下载,依赖包
标签:archiva-xmlrpc-services-1.2-M1.jar,archiva,xmlrpc,services,1.2,M1,jar包下载,依赖包
标签:archiva-configuration-1.2-M1-javadoc.jar,archiva,configuration,1.2,M1,javadoc,jar包下载,依赖包
标签:archiva-cli-1.2-M1-javadoc.jar,archiva,cli,1.2,M1,javadoc,jar包下载,依赖包
标签:archiva-consumer-api-1.2-M1.jar,archiva,consumer,api,1.2,M1,jar包下载,依赖包