#set指令 #set指令用於向一個變數或者對象賦值。 格式: #set($var = value) LHS是一個變數,不要使用特殊字元例如英文句號等,不能用大括弧括起來。測試發現#set($user.name = 'zhangsan'),#set(${age} = 18)均賦值失敗。 RHS可以是 ...
#set指令
#set指令用於向一個變數或者對象賦值。
格式: #set($var = value)
LHS是一個變數,不要使用特殊字元例如英文句號等,不能用大括弧括起來。測試發現#set($user.name = 'zhangsan'),#set(${age} = 18)均賦值失敗。
RHS可以是變數、字元串字面值、數字字面值、方法、ArrayList、Map、表達式。
測試案例
User對象類
public class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
測試類TestVelocity
public class TestVelocity { public static void main(String[] args) { VelocityEngine engine = new VelocityEngine(); // 初始化VelocityEngine engine.setProperty("resource.loader", "file"); engine.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader"); engine.setProperty("input.encoding", "utf8"); engine.setProperty("output.encoding", "utf8"); engine.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH, "D:\\conf"); engine.init(); Template template = engine.getTemplate("hellovelocity.vm"); VelocityContext ctx = new VelocityContext(); ctx.put("user", new User("zhangsan", 18)); StringWriter stringWriter = new StringWriter(); template.merge(ctx, stringWriter); System.out.println(stringWriter.toString()); } }
測試模板文件 hellovelocity.vm
#set($name = 'john')
#set($age = 18)
#set($array = ['a', 'b', 'c'])
#set($map = {'a' : 'a', 'b' : 'b', 'c' : 'c'})
#set($userName = "$!{user.getName()}")
#set($userAge = "$!{user.getAge()}")
#set($userTest1 = $user.getAge_())
#set($userTest2 = "$!{user.getAge_()}")
$name $age $array.get(0) $array.get(1) $array.get(2) $map.get('a') $map.get('b') $map.get('c')
$userName $userAge $userTest1 $userTest2
輸出結果
john 18 a b c a b c zhangsan 18 $userTest1
說明:
#set($userTest1 = $user.getAge_())
#set($userTest2 = "$!{user.getAge_()}")
右邊$!{user.getAge_()}表達式計算失敗情況下,放在雙引號裡面,賦值空串,放在外面將不會賦值。
在使用#set時,字元串的字面值如果放在雙引號里,將會被解析,放在單引號裡面,將會被當做字面量。
#set($test1 = "$userName") #set($test2 = '$userName') $test1=字元串zhangsan,$test2=字元串$userName。