文章目录
1. 配置项
#默认配置:
##- 配置引擎实现类,默认即可.
ENGINE=org.beetl.core.engine.FastRuntimeEngine
##- 指定了占位符号,默认是${ },也可以指定为其他占位符。
DELIMITER_PLACEHOLDER_START=${
DELIMITER_PLACEHOLDER_END=}
##- 指定了语句的定界符号,默认是<% %>,也可以指定为其他定界符号
DELIMITER_STATEMENT_START=<%
DELIMITER_STATEMENT_END=%>
##- 指定IO输出模式,默认是FALSE,即通常的字符输出,在考虑高性能情况下,可以设置成true。详细请参考高级用法
DIRECT_BYTE_OUTPUT = FALSE
##- 指定了支持HTML标签,且符号为#,默认配置下,模板引擎识别<#tag ></#tag>这样的类似html标签,并能调用相应的标签函数或者模板文件。你也可以指定别的符号,如bg: 则识别<bg:
HTML_TAG_SUPPORT = true
HTML_TAG_FLAG = #
##- 指定如果标签属性有var,则认为是需要绑定变量给模板的标签函数
HTML_TAG_BINDING_ATTRIBUTE = var
##- 指定允许本地Class直接调用
NATIVE_CALL = TRUE
##- 指定模板字符集是UTF-8
TEMPLATE_CHARSET = UTF-8
##- 指定异常的解析类,默认是ConsoleErrorHandler,他将在render发生异常的时候在后台打印出错误信息(System.out)。
ERROR_HANDLER = org.beetl.core.ConsoleErrorHandler
##- 指定了本地Class调用的安全策略
NATIVE_SECUARTY_MANAGER= org.beetl.core.DefaultNativeSecurityManager
##- 配置了是否进行严格MVC,通常情况下,此处设置为false.
MVC_STRICT = FALSE
#资源配置,resource后的属性只限于特定ResourceLoader
##- 指定了默认使用的模板资源加载器,注意,在beetl与其他MVC框架集成的时候,模板加载器不一定根据这个配置,比如spring,他的RESOURCE_LOADER以spring的配置为准
RESOURCE_LOADER=org.beetl.core.resource.ClasspathResourceLoader
#classpath 根路径
##- 配置了模板资源加载器的一些属性,如设置根路径为/,即Classpath的顶级路径,并且总是检测模板是否更改
RESOURCE.root= /
#是否检测文件变化,开发用true合适,但线上要改为false
RESOURCE.autoCheck= true
#自定义脚本方法文件的Root目录和后缀
##- 配置了自定义的方法所在的目录以及文件名后缀。beetl既支持通过java类定义方法,也支持通过模板文件来定义方法
RESOURCE.functionRoot = functions
RESOURCE.functionSuffix = html
#自定义标签文件Root目录和后缀
##- 配置了自定义的html标签所在的目录以及文件名后缀。beetl既支持通过java类定义标签,也支持通过模板文件来定义标签
RESOURCE.tagRoot = htmltag
RESOURCE.tagSuffix = tag
##### 扩展 ##############
# 内置的方法
##- 注册了一个date方法,其实现类是org.beetl.ext.fn.DateFunction
FN.date = org.beetl.ext.fn.DateFunction
#......
#内置的功能包
##- 注册了一个方法包strutil,其实现类org.beetl.ext.fn.StringUtil,此类的每个public方法都将注册为beetl的方法
FNP.strutil = org.beetl.ext.fn.StringUtil
#......
#内置的默认格式化函数
##- 注册了一个日期格式化函数
FTC.java.util.Date = org.beetl.ext.format.DateFormat
#.....
# 标签类
##- 注册了一个include标签函数
TAG.include= org.beetl.ext.tag.IncludeTag
2. LP (这么奇特的规则,不说怎么知道)
LP.index是Beetl语法 :
@for(item in menus){
@if(itemLP.first{
<a lay-href="${item .url}"><i class="layui-icon ${item .icon}"></i> <cite>${item.name}</cite></a>
@}
@}
itemLP是Beetl隐含定义的变量,能在循环体内使用。其命名规范是item名称后加上LP,他提供了当前循环的信息
#item 根据循环对象 变化比如 如果为 xxx 则 为 xxxLP.index
itemLP.index #当前的索引,从1开始
itemLP.size #集合的长度
itemLP.first #是否是第一个
itemLP.last #是否是最后一个
itemLP.even #索引是否是偶数
itemLP.odd #索引是否是奇数
3. 模板资源加载器
资源加载器是根据String值获取Resource实例的工场类,同时资源加载器还要负责响应模板引擎询问模板是否变化的调用。对于新手来说,无需考虑模板资源加载器如何实现,只需要根据自己场景选择系统提供的三类模板资源加载器即可
-
字符串模板加载器
在创建GroupTemplate过程中,如果传入的是StringTemplateResourceLoader,则允许通过调用gt.getTemplate(String template)来获取模板实例对象 -
文件资源模板加载器
模板资源是以文件形式管理的,集中放在某一个文件目录下(如webapp的模板根目录就可能是WEB-INF/template里),因此,可以使用FileResourceLoader来加载模板实例,如下代码:
String root = System.getProperty("user.dir")+File.separator+"template";
FileResourceLoader resourceLoader = new FileResourceLoader(root,"utf-8");
Configuration cfg = Configuration.defaultConfiguration();
GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
Template t = gt.getTemplate("/s01/hello.txt");
String str = t.render();
System.out.println(str);
- Classpath资源模板加载器
模板资源是打包到jar文件或者同Class放在一起,因此,可以使用ClasspathResourceLoader来加载模板实例,如下代码:
ClasspathResourceLoader resourceLoader = new ClasspathResourceLoader("org/beetl/sample/s01/");
Configuration cfg = Configuration.defaultConfiguration();
GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
Template t = gt.getTemplate("/hello.txt");
String str = t.render();
System.out.println(str);
- WebApp资源模板加载器
WebAppResourceLoader 是用于web应用的资源模板加载器,默认根路径是WebRoot目录。也可以通过制定root属性来设置相对于WebRoot的的模板根路径,从安全角考虑,建议放到WEB-INF目录下
Configuration cfg = Configuration.defaultConfiguration();
WebAppResourceLoader resourceLoader = new WebAppResourceLoader();
groupTemplate = new GroupTemplate(resourceLoader, cfg);
WebAppResourceLoader 假定 beetl.jar 是位于 WEB-INF/lib 目录下,因此,可以通过WebAppResourceLoader类的路径来推断出WebRoot路径从而指定模板根路径。所有线上环境一般都是如此,如果是开发环境或者其他环境不符合此假设,你需要调用resourceLoader.setRoot() 来指定模板更路径
- 自定义资源模板加载器
有时候模板可能来自文件系统不同目录,或者模板一部分来自某个文件系统,另外一部分来自数据库,还有的情况模板可能是加密混淆的模板,此时需要自定义资源加载,继承ResouceLoader才能实现模板功能
5. 变量定义和使用
<%
/*此处是一个定义临时变量*/
ar a = 3;
var b = 3,c = "abc",d=true,e=null;
var f = [1,2,3];
var g = {
key1:a,key2:c};
var i = a+b;
%>
template.binding("list",service.getUserList());
//在模板里
<%
for(user in list){
%>
hello,${
user.name};
<% } %>
//共享变量
//共享变量指在所有模板中都可以引用的变量,可通过groupTemplate.setSharedVars(Map sharedVars)传入变量,这些变量能用在 所有模板 的任何一个地方
//.....
GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
Map<String,Object> shared = new HashMap<String,Object>();
shared.put("name", "beetl");
gt.setSharedVars(shared);
Template t = gt.getTemplate("/org/beetl/sample/s0208/t1.txt");
String str = t.