欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Beetl 1.2M1 最新增强功能 freemarker beetl 

程序员文章站 2022-06-06 13:26:25
...

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."


相关标签: freemarker beetl