差異處
這裏顯示兩個版本的差異處。
下次修改 | 前次修改 | ||
java:mustache:helloworld [2016/08/27 17:10] tony 建立 |
java:mustache:helloworld [2023/06/25 09:48] (目前版本) |
||
---|---|---|---|
行 1: | 行 1: | ||
{{tag>java mustache}} | {{tag>java mustache}} | ||
- | ====== Mustache Hello World ====== | + | ====== Mustache - Hello World ====== |
===== Introduction ===== | ===== Introduction ===== | ||
- | Mustache是Albert所找的template system engine。 | + | Mustache是Albert所找的template system engine。目的是為了讓你可以簡單的只使用資料物件(bean),用少少甚至無邏輯去定義輸出格式。如果想切換輸出格式,只要修改樣本檔案就好。 |
===== How to? ===== | ===== How to? ===== | ||
+ | ==== Create Engine ==== | ||
+ | 使用Mustache的第一步就是要建立它的Engine instance,而方法就是透過MustacheEngineBuilder。以我的例子來說,我告訴了builder樣本的放置位置,第一優先從classpath中的templates資料夾中找尋txt結尾之檔案,第二優先為工作目錄的templates中找尋txt結尾之檔案: | ||
+ | <code java> | ||
+ | TemplateLocator locator1 = new ClassPathTemplateLocator(1, "templates","txt"); | ||
+ | TemplateLocator locator2 = new FileSystemTemplateLocator(2, Paths.get("templates").toString(), "txt"); | ||
- | ===== Resource ===== | + | MustacheEngine mustacheEngine = MustacheEngineBuilder |
- | * [[https://en.wikipedia.org/wiki/Mustache_(template_system)|wiki - Mustache_(template_system)]] | + | .newBuilder() |
+ | .addTemplateLocator(locator1) | ||
+ | .addTemplateLocator(locator2) | ||
+ | .build(); | ||
+ | </code> | ||
+ | ==== 第一個Template ==== | ||
+ | 以下為我的測試資料物件: | ||
+ | <code java> | ||
+ | public class TestBean { | ||
+ | public String getName(){ | ||
+ | return "testName"; | ||
+ | } | ||
+ | |||
+ | public String getPasswd(){ | ||
+ | return "testPasswd"; | ||
+ | } | ||
+ | |||
+ | public boolean showPasswd(){ | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | 以下為我的執行轉換程式,會去讀engine設定路徑下檔名為template1.txt的檔案,並將TestBean做轉換: | ||
+ | <code java> | ||
+ | Mustache template = mustacheEngine.getMustache("template1"); | ||
+ | System.out.println(template.render(new TestBean())); | ||
+ | </code> | ||
+ | 以下為我的範本,會顯示TestBean的name,並根據showPasswd決定顯示方式。#代表存在或為true;^代表不存在或為false: | ||
+ | <code> | ||
+ | name={{name}} | ||
+ | passwd={{#showPasswd}}{{passwd}}{{/showPasswd}}{{^showPasswd}}****{{/showPasswd}} | ||
+ | </code> | ||
+ | ==== Output ==== | ||
+ | <code> | ||
+ | name=testName | ||
+ | passwd=**** | ||
+ | </code> | ||
+ | ===== Summary ===== | ||
+ | 如果把邏輯寫在程式中,資料物件就不是這麼單純的資料物件;如果把邏輯寫在樣本中,樣本就不是那麼容易維護。選擇透過程式或樣本決定輸出格式,就看你根據需求的取捨。 | ||
+ | ===== 後記 ===== | ||
+ | 如果要選擇性顯示資料又不跳行,要寫成這樣: | ||
+ | <code> | ||
+ | {{#data1}} | ||
+ | Data1:{{data1}} | ||
+ | {{/data1}} | ||
+ | {{#data2}} | ||
+ | Data2:{{data2}} | ||
+ | {{/data2}} | ||
+ | </code> | ||
+ | 如果寫成以下形式,且Data1不存在時,會多一空白行。 | ||
+ | <code> | ||
+ | {{#data1}}Data1:{{data1}}{{/data1}} | ||
+ | {{#data2}}Data2:{{data2}}{{/data2}} | ||
+ | </code> | ||
===== ===== | ===== ===== | ||
---- | ---- |