ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 1.7 变量 [TOC] ### 1.7.1 临时变量 在模板中定义的变量成为临时变量,这类似js中采用var 定义的变量,如下例子 ```javascript <% 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代码里 ```javascript template.binding("list",service.getUserList()); //在模板里 <% for(user in list){ %> hello,${user.name}; <% } %> ``` 自从2.8.0版本后,有一个特殊的变量成为root变量,当模板找不到变量的时候,会寻找root变量的属性来作为变量的值,这个root变量必须绑定为"_root" ```javascript template.binding("_root",new User()); //在模板里,俩个都一样 ${name} ${wife.name} ``` 这里name 和 wife都是User对象的属性 ### 1.7.3 共享变量 共享变量指在所有模板中都可以引用的变量,可通过groupTemplate.setSharedVars(Map<String, Object> sharedVars)传入变量,这些变量能用在 **所有模板** 的任何一个地方 ```java //..... 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); ``` ```javascript //t1.txt hi,${name} //t2.txt hello,${name} ``` ### 1.7.4 模板变量 模板变量是一种特殊的变量,即可以将模板中任何一段的输出赋值到该变量,并允许稍后在其他地方使用,如下代码 ```javascript <% var content = { var c = "1234"; print(c); %> 模板其他内容: <% }; %> ``` 第2行定义了一个模板变量content = { …} ; 此变量跟临时变量一样,可以在其他地方使用,最常见的用法是用于复杂的布局。请参考高级用法布局 ### 1.7.5 申明变量类型 自从**3.10**以后的版本,使用var定义的变量,可以申明变量类型,如下 ```javascript <% var<int> list = [1,2,3]; var<String,String> map = callFun(); var<String,Map<String,User>> map = callFun2(); %> ``` 申明变量类型的格式类似Java的泛型,此申明也类似java泛型一样不会影响实际运行,仅仅作为辅助解释类型用,相当于注释. Beetl语法中使用var关键字的地方,都可以使用泛型格式解释变量的类型,如for语句 ```javascript <% for(var<org.test.UserItem> item in list){ print(item.getName()); } %> ```