1.7 变量
About 665 wordsAbout 2 min
2023-02-12
1.7 变量
1.7.1 临时变量
在模板中定义的变量成为临时变量,这类似js中采用var 定义的变量,如下例子
<%
var 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;
//多行文本,使用""" 或者''''
var c="""
hello go
"多行文本"
""";
%>
模板里定义的临时变量只能在当前模板中使用,如果想在子模板里使用,需要显示当着参数传递
1.7.2 全局变量
全局变量是通过在java代码里调用template.binding传入的变量,这些变量能在模板的任何一个地方,包括子模板都能访问到。如java代码里
template.binding("list",service.getUserList());
//在模板里
<%
for(user in list){
%>
hello,${user.name};
<% } %>
自从2.8.0版本后,有一个特殊的变量成为root变量,当模板找不到变量的时候,会寻找root变量的属性来作为变量的值,这个root变量必须绑定为"_root"
template.binding("_root",new User());
//在模板里,俩个都一样
${name}
${wife.name}
这里name 和 wife都是User对象的属性
1.7.3 共享变量
共享变量指在所有模板中都可以引用的变量,可通过groupTemplate.setSharedVars(Map<String, Object> 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.render();
System.out.println(str);
t = gt.getTemplate("/org/beetl/sample/s0208/t2.txt");
str = t.render();
System.out.println(str);
//t1.txt
hi,${name}
//t2.txt
hello,${name}
1.7.4 模板变量
模板变量是一种特殊的变量,即可以将模板中任何一段的输出赋值到该变量,并允许稍后在其他地方使用,如下代码
<%
var content = {
var c = "1234";
print(c);
%>
模板其他内容:
<% }; %>
第2行定义了一个模板变量content = { …} ; 此变量跟临时变量一样,可以在其他地方使用,最常见的用法是用于复杂的布局。请参考高级用法布局
1.7.5 申明变量类型
自从3.10以后的版本,使用var定义的变量,可以申明变量类型,如下
<%
var<int> list = [1,2,3];
var<String,String> map = callFun();
var<String,Map<String,User>> map = callFun2();
%>
申明变量类型的格式类似Java的泛型,此申明也类似java泛型一样不会影响实际运行,仅仅作为辅助解释类型用,相当于注释.
Beetl语法中使用var关键字的地方,都可以使用泛型格式解释变量的类型,如for语句
<%
for(var<org.test.UserItem> item in list){
print(item.getName());
}
%>