在軟件開發(fā)中绵估,我們經(jīng)常需要將數(shù)據(jù)動態(tài)填充到模板中集币,以生成各種類型的文本輸出曼验。Apache Velocity 是一個流行的模板引擎泌射,可以幫助我們實現(xiàn)這一目標(biāo)粘姜。本文將介紹如何使用 Apache Velocity 動態(tài)填充模板,并演示一個簡單的示例熔酷。
引入包
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
代碼實現(xiàn)
動態(tài)填充表達式為 $對象名.參數(shù)名 或者 ${對象名.參數(shù)名}
舉栗子: $admin.realName 或者 ${admin.realName}
注意:表達式不能存在 換行孤紧,空格,特殊符號 等操作破壞完整結(jié)構(gòu)拒秘,否則動態(tài)填充失敗号显。(本人遇到過前端輸入描述自動換行,破壞了完整結(jié)構(gòu)(${admin.real\r\nName})導(dǎo)致動態(tài)填充失敗的情況)
// 初始化Velocity引擎
VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.init();
// 創(chuàng)建上下文并添加數(shù)據(jù)對象
VelocityContext context = new VelocityContext();
//需要的參數(shù)對象躺酒,可以多個
Admin admin = new Admin();
admin.setRealName("小明");
admin.setMobile("1561561568");
//狀態(tài)是枚舉
admin.setAdminState(AccountState.NORMAL);
context.put("admin", admin);
User user = new User();
user.setRealName("");
user.setMobile(null);
//狀態(tài)是枚舉
user.setUserState(AccountState.NORMAL);
context.put("user", user);
//需要動態(tài)填充的字符串押蚤,需要填充的參數(shù)寫法 $admin.realName 或 ${admin.realName}
String content = "管理員名稱 $admin.realName \r\n" +
"管理員手機號 ${admin.mobile} \r\n" +
"管理員狀態(tài) $admin.adminState.desc \r\n" +
"用戶名稱 $user.realName \r\n" +
"用戶手機號 ${user.mobile} \r\n" +
"用戶手機副號 ${user.deputyMobile} \r\n" +
"用戶狀態(tài) $user.userState.desc";
// 合并模板與上下文
StringWriter writer = new StringWriter();
velocityEngine.evaluate(context, writer, "logTag", content);
System.out.println("動態(tài)填充結(jié)果:\r\n" + writer.toString());
/**
* 賬號狀態(tài)
*
* @author tzq
*/
@Getter
@ToString
@AllArgsConstructor
public enum AccountState {
NORMAL("NORMAL", "正常狀態(tài)"),
LOCK("LOCK", "鎖定狀態(tài)"),
FORBID("FORBID", "禁止?fàn)顟B(tài)"),
;
private final String value;
private final String desc;
}
結(jié)果
動態(tài)填充結(jié)果:
管理員名稱 小明
管理員手機號 1561561568
管理員狀態(tài) 正常狀態(tài)
用戶名稱
用戶手機號 ${user.mobile}
用戶手機副號 ${user.deputyMobile}
用戶狀態(tài) 正常狀態(tài)
通過結(jié)果我們可以發(fā)現(xiàn),${user.mobile} 和 ${user.deputyMobile} (deputyMobile參數(shù)是我亂填的阴颖,user中并沒有這個參數(shù))并沒有被動態(tài)填充
這就是我們要注意的點,當(dāng)值為null 或者 對象/參數(shù)不存在時丐膝,不會進行動態(tài)填充量愧,而是保持表達式原樣