## 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; %> ``` 模板里定义的临时变量只能在当前模板中使用,如果想在子模板里使用,需要显示当着参数传递 ### 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 = { …} ; 此变量跟临时变量一样,可以在其他地方使用,最常见的用法是用于复杂的布局。请参考高级用法布局