使用Apache Velocity動態(tài)填充模板

在軟件開發(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)填充量愧,而是保持表達式原樣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市帅矗,隨后出現(xiàn)的幾起案子偎肃,更是在濱河造成了極大的恐慌,老刑警劉巖浑此,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件累颂,死亡現(xiàn)場離奇詭異,居然都是意外死亡凛俱,警方通過查閱死者的電腦和手機紊馏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒲犬,“玉大人朱监,你說我怎么就攤上這事≡#” “怎么了赫编?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奋隶。 經(jīng)常有香客問我擂送,道長,這世上最難降的妖魔是什么唯欣? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任嘹吨,我火速辦了婚禮,結(jié)果婚禮上境氢,老公的妹妹穿的比我還像新娘躺苦。我一直安慰自己身腻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布匹厘。 她就那樣靜靜地躺著嘀趟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愈诚。 梳的紋絲不亂的頭發(fā)上她按,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音炕柔,去河邊找鬼酌泰。 笑死,一個胖子當(dāng)著我的面吹牛匕累,可吹牛的內(nèi)容都是我干的陵刹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼欢嘿,長吁一口氣:“原來是場噩夢啊……” “哼衰琐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起炼蹦,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤羡宙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掐隐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狗热,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年虑省,在試婚紗的時候發(fā)現(xiàn)自己被綠了匿刮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡探颈,死狀恐怖僻焚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膝擂,我是刑警寧澤虑啤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站架馋,受9級特大地震影響狞山,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叉寂,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一萍启、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦勘纯、人聲如沸局服。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淫奔。三九已至,卻和暖如春堤结,著一層夾襖步出監(jiān)牢的瞬間唆迁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工竞穷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唐责,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓瘾带,卻偏偏與公主長得像鼠哥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子看政,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容