Beetl 1.2M1 最新增强功能

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=% >

扫描二维码关注公众号,回复: 670431 查看本文章

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. [email protected]} 表示如果 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."


猜你喜欢

转载自javamonkey.iteye.com/blog/1674708